[adios] 75/207: upstream 1.6.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jun 12 06:04:39 UTC 2015


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

mckinstry pushed a commit to branch master
in repository adios.

commit 88e10429b28cd9f1adbf01ca08be34d806f24a26
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Sun Dec 22 07:20:20 2013 +0000

    upstream 1.6.0
---
 CMakeLists.txt                                     |  1052 +-
 Makefile.in                                        |    31 +-
 NEWS                                               |    19 +
 README                                             |     4 +-
 TODO                                               |    35 +-
 aclocal.m4                                         |     8 +
 cmake_init                                         |   270 +-
 config.h.cmake                                     |    68 +-
 config.h.in                                        |    45 +-
 config/ac_alacrity.m4                              |    73 +
 config/ac_aplod.m4                                 |    73 +
 config/ac_bgq.m4                                   |    24 +
 config/ac_bzip2.m4                                 |    73 +
 config/ac_dataspaces.m4                            |    24 +-
 config/ac_flexpath.m4                              |    10 -
 config/ac_isobar.m4                                |    73 +
 config/ac_mxml.m4                                  |   154 +-
 config/ac_nc4par.m4                                |     3 +-
 config/ac_ncsu_timer.m4                            |    60 +
 config/ac_phdf5.m4                                 |     3 +-
 config/ac_szip.m4                                  |    73 +
 config/ac_zlib.m4                                  |    73 +
 configure                                          |  3311 +++-
 configure.ac                                       |   311 +-
 examples/C/Makefile.am                             |     2 +-
 examples/C/Makefile.in                             |    33 +-
 examples/C/arrays/CMakeLists.txt                   |    16 +-
 examples/C/arrays/Makefile.am                      |     5 +-
 examples/C/arrays/Makefile.in                      |    67 +-
 examples/C/arrays/arrays.xml                       |     6 +-
 examples/C/attributes/CMakeLists.txt               |    16 +-
 examples/C/attributes/Makefile.am                  |     5 +-
 examples/C/attributes/Makefile.in                  |    67 +-
 examples/C/attributes/attributes.xml               |    20 +-
 examples/C/compression_test/Makefile.am            |    37 +
 .../C/{manual => compression_test}/Makefile.in     |   181 +-
 examples/C/compression_test/adios_global.c         |    88 +
 examples/C/compression_test/adios_read_box.c       |    79 +
 examples/C/compression_test/adios_read_points.c    |    59 +
 .../compression_test/conf_genarray3D/amr_bzip2.xml |    42 +
 .../conf_genarray3D/amr_identity.xml               |    42 +
 .../conf_genarray3D/amr_isobar.xml                 |    42 +
 .../compression_test/conf_genarray3D/amr_none.xml  |    42 +
 .../compression_test/conf_genarray3D/amr_zlib.xml  |    42 +
 .../compression_test/conf_genarray3D/mpi_bzip2.xml |    42 +
 .../conf_genarray3D/mpi_identity.xml               |    42 +
 .../conf_genarray3D/mpi_isobar.xml                 |    42 +
 .../compression_test/conf_genarray3D/mpi_none.xml  |    42 +
 .../compression_test/conf_genarray3D/mpi_zlib.xml  |    42 +
 .../conf_genarray3D/posix_bzip2.xml                |    42 +
 .../conf_genarray3D/posix_identity.xml             |    42 +
 .../conf_genarray3D/posix_isobar.xml               |    42 +
 .../conf_genarray3D/posix_none.xml                 |    42 +
 .../conf_genarray3D/posix_zlib.xml                 |    42 +
 .../conf_simple/amr_bzip2.xml}                     |     5 +-
 .../conf_simple/amr_identity.xml}                  |     5 +-
 .../conf_simple/amr_isobar.xml}                    |     5 +-
 .../conf_simple/amr_none.xml}                      |     5 +-
 .../conf_simple/amr_zlib.xml}                      |     5 +-
 .../conf_simple/bak}/adios_global.xml              |     5 +-
 .../conf_simple/bak/mpi.xml}                       |     5 +-
 .../conf_simple/bak/posix.xml}                     |     5 +-
 .../conf_simple/bak_2/amr_bzip2.xml}               |     5 +-
 .../conf_simple/bak_2/amr_identity.xml}            |     5 +-
 .../conf_simple/bak_2/amr_isobar.xml}              |     5 +-
 .../conf_simple/bak_2/amr_none.xml}                |     5 +-
 .../conf_simple/bak_2/amr_szip.xml}                |     5 +-
 .../conf_simple/bak_2/amr_zlib.xml}                |     5 +-
 .../conf_simple/bak_2/mpi_bzip2.xml}               |     5 +-
 .../conf_simple/bak_2/mpi_identity.xml}            |     5 +-
 .../conf_simple/bak_2/mpi_isobar.xml}              |     5 +-
 .../conf_simple/bak_2/mpi_none.xml}                |     5 +-
 .../conf_simple/bak_2/mpi_szip.xml}                |     5 +-
 .../conf_simple/bak_2/mpi_zlib.xml}                |     5 +-
 .../conf_simple/bak_2/posix_bzip2.xml}             |     5 +-
 .../conf_simple/bak_2/posix_identity.xml}          |     5 +-
 .../conf_simple/bak_2/posix_isobar.xml}            |     5 +-
 .../conf_simple/bak_2/posix_none.xml}              |     5 +-
 .../conf_simple/bak_2/posix_szip.xml}              |     5 +-
 .../conf_simple/bak_2/posix_zlib.xml}              |     5 +-
 .../conf_simple/mpi_bzip2.xml}                     |     5 +-
 .../conf_simple/mpi_identity.xml}                  |     5 +-
 .../conf_simple/mpi_isobar.xml}                    |     5 +-
 .../conf_simple/mpi_none.xml}                      |     5 +-
 .../conf_simple/mpi_zlib.xml}                      |     5 +-
 .../conf_simple/posix_bzip2.xml}                   |     5 +-
 .../conf_simple/posix_identity.xml}                |     5 +-
 .../conf_simple/posix_isobar.xml}                  |     5 +-
 .../conf_simple/posix_none.xml}                    |     5 +-
 .../conf_simple/posix_zlib.xml}                    |     5 +-
 examples/C/compression_test/genarray3D.c           |   205 +
 examples/C/compression_test/gread_temperature.ch   |     4 +
 .../gwrite_temperature.ch                          |     6 +-
 examples/C/compression_test/read_test.h            |   154 +
 examples/C/compression_test/test_read_box.sh       |    13 +
 examples/C/compression_test/test_read_points.sh    |    13 +
 examples/C/compression_test/write_all.sh           |    15 +
 examples/C/flexpath_arrays/Makefile.in             |    31 +-
 .../global_range_select/Makefile.am                |     7 +-
 .../global_range_select/Makefile.in                |    71 +-
 .../C/flexpath_arrays/global_range_select/README   |    50 +
 .../flexpath_arrays/global_range_select/arrays.xml |    12 +-
 .../global_range_select/arrays_read.c              |    67 +-
 .../global_range_select/arrays_write.c             |    51 +-
 .../C/flexpath_arrays/process_select/Makefile.am   |     6 +-
 .../C/flexpath_arrays/process_select/Makefile.in   |    68 +-
 examples/C/global-array-time/CMakeLists.txt        |    11 +
 examples/C/global-array-time/Makefile.am           |     5 +-
 examples/C/global-array-time/Makefile.in           |    67 +-
 examples/C/global-array-time/adios_globaltime.xml  |    17 +-
 .../C/global-array-time/adios_globaltime_no_xml.c  |     4 +-
 examples/C/global-array/CMakeLists.txt             |    15 +
 examples/C/global-array/Makefile.am                |     5 +-
 examples/C/global-array/Makefile.in                |    67 +-
 examples/C/global-array/adios_global.xml           |    17 +-
 examples/C/manual/CMakeLists.txt                   |    21 +-
 examples/C/manual/Makefile.am                      |     5 +-
 examples/C/manual/Makefile.in                      |    67 +-
 examples/C/manual/config.xml                       |    22 +-
 examples/C/manual/gread_temperature.ch             |     2 +-
 examples/C/manual/gwrite_temperature.ch            |     2 +-
 examples/C/read_all/Makefile.am                    |     2 +-
 examples/C/read_all/Makefile.in                    |    35 +-
 examples/C/read_all/read_all.c                     |     3 +-
 examples/C/scalars/CMakeLists.txt                  |    24 +-
 examples/C/scalars/Makefile.am                     |     5 +-
 examples/C/scalars/Makefile.in                     |    67 +-
 examples/C/scalars/gread_scalars.ch                |    32 +-
 examples/C/scalars/scalars.xml                     |    35 +-
 examples/C/schema/CMakeLists.txt                   |    38 +-
 examples/C/schema/Makefile.am                      |    49 +-
 examples/C/schema/Makefile.in                      |   186 +-
 examples/C/schema/rectilinear.c                    |    89 -
 examples/C/schema/rectilinear.xml                  |    31 -
 examples/C/schema/rectilinear2d.c                  |   158 +
 examples/C/schema/rectilinear2d.png                |   Bin 0 -> 3728 bytes
 examples/C/schema/rectilinear2d.readme             |    42 +
 examples/C/schema/rectilinear2d.xml                |    51 +
 examples/C/schema/structured.c                     |    89 -
 examples/C/schema/structured.xml                   |    20 -
 examples/C/schema/structured2d.c                   |   150 +
 examples/C/schema/structured2d.readme              |    41 +
 examples/C/schema/structured2d.xml                 |    51 +
 examples/C/schema/tri2d.c                          |   305 +
 examples/C/schema/tri2d.n.png                      |   Bin 0 -> 7422 bytes
 examples/C/schema/tri2d.readme                     |    49 +
 examples/C/schema/tri2d.xml                        |    76 +
 examples/C/schema/triangle2d.c                     |   114 +
 examples/C/schema/triangle2d.n4.png                |   Bin 0 -> 32602 bytes
 examples/C/schema/triangle2d.readme                |    40 +
 examples/C/schema/triangle2d.xml                   |    58 +
 examples/C/schema/uniform.c                        |    78 -
 examples/C/schema/uniform.xml                      |    69 -
 examples/C/schema/uniform2d.c                      |   143 +
 examples/C/schema/uniform2d.png                    |   Bin 0 -> 7100 bytes
 examples/C/schema/uniform2d.readme                 |    42 +
 examples/C/schema/uniform2d.xml                    |    49 +
 examples/C/schema/unstructured.c                   |   441 -
 examples/C/schema/unstructured.xml                 |    37 -
 examples/C/stat/CMakeLists.txt                     |    11 +
 examples/C/stat/Makefile.am                        |     6 +-
 examples/C/stat/Makefile.in                        |    68 +-
 examples/C/stat/stat.xml                           |    14 +-
 examples/C/transforms/Makefile.am                  |    44 +
 examples/C/{manual => transforms}/Makefile.in      |   208 +-
 examples/C/transforms/S3D/alacrity.xml             |    28 +
 examples/C/transforms/S3D/identity.xml             |    27 +
 examples/C/transforms/S3D/none.xml                 |    27 +
 examples/C/transforms/adios_global.c               |    53 +
 examples/C/transforms/adios_global.xml             |    20 +
 examples/C/transforms/adios_read_all_3D.c          |   259 +
 examples/C/transforms/adios_read_points.c          |    86 +
 examples/C/transforms/adios_read_subv.c            |    99 +
 examples/C/transforms/adios_read_wb_subpg.c        |    91 +
 examples/C/transforms/adios_write_all_3D.c         |   198 +
 examples/C/transforms/gread_temperature.ch         |     4 +
 .../C/{manual => transforms}/gwrite_temperature.ch |     6 +-
 examples/Fortran/Makefile.in                       |    31 +-
 examples/Fortran/arrays/Makefile.am                |     3 +
 examples/Fortran/arrays/Makefile.in                |    63 +-
 examples/Fortran/arrays/arrays.xml                 |     6 +-
 examples/Fortran/global-array-time/Makefile.am     |     3 +
 examples/Fortran/global-array-time/Makefile.in     |    63 +-
 .../Fortran/global-array-time/adios_globaltime.xml |    23 +-
 examples/Fortran/global-array/Makefile.am          |     3 +
 examples/Fortran/global-array/Makefile.in          |    63 +-
 examples/Fortran/global-array/adios_global.xml     |    15 +-
 examples/Fortran/scalars/Makefile.am               |     3 +
 examples/Fortran/scalars/Makefile.in               |    63 +-
 examples/Fortran/scalars/scalars.xml               |     6 +-
 examples/Makefile.in                               |    31 +-
 examples/coupling/.gitignore                       |     4 +
 examples/coupling/coupling_reader_2D.F90           |     5 +-
 examples/coupling/coupling_reader_2D.xml           |    22 +-
 examples/coupling/coupling_writer_2D.xml           |    38 +-
 examples/coupling/job1                             |    89 +
 examples/coupling/read.F90                         |   320 -
 examples/skel/picongpu/picongpu.xml                |    34 +
 examples/skel/picongpu/picongpu_params.xml         |    40 +
 examples/skel/picongpu/picongpu_skel.xml           |    34 +
 .../skel/picongpu/test/Makefile                    |    20 +-
 examples/skel/picongpu/test/picongpu.xml           |    34 +
 examples/skel/picongpu/test/picongpu_params.xml    |    34 +
 .../skel/picongpu/test/picongpu_params.xml.default |    34 +
 examples/skel/picongpu/test/picongpu_skel.xml      |    35 +
 .../picongpu/test/picongpu_skel_fields_write.c     |   184 +
 examples/staging/stage_write/Makefile              |    47 +-
 .../staging/stage_write/Makefile.genarray_stream   |    16 +-
 .../stage_write/{Makefile => Makefile.stage_write} |    14 +-
 examples/staging/stage_write/genarray_stream.F90   |    44 +-
 examples/staging/stage_write/genarray_stream.xml   |    32 +-
 examples/staging/stage_write/job                   |    13 +-
 examples/staging/stage_write/{job => job.32}       |    20 +-
 examples/staging/stage_write/make.settings         |    17 +
 examples/staging/stage_write/stage_write.c         |    87 +-
 examples/staging/stage_write/utils.c               |     2 +-
 examples/staging/stage_write/x.bp.dir/x.bp.0       |   Bin 386962 -> 0 bytes
 runconf                                            |   197 +-
 src/CMakeLists.txt                                 |   141 +-
 src/Makefile.am                                    |   134 +-
 src/Makefile.in                                    |  3572 +++-
 src/core/adios.c                                   |    49 +-
 src/core/adios_bp_v1.c                             |   234 +-
 src/core/adios_bp_v1.h                             |    55 +-
 src/core/adios_copyspec.c                          |   215 +
 src/core/adios_copyspec.h                          |   249 +
 src/core/adios_endianness.c                        |   132 +-
 src/core/adios_internals.c                         |  4959 ++++--
 src/core/adios_internals.h                         |   348 +-
 src/core/adios_internals_mxml.c                    |  7247 ++-------
 src/core/adios_read.c                              |    41 +-
 src/core/adios_read_hooks.c                        |     2 +
 src/core/adios_read_hooks.h                        |     8 +
 src/core/adios_read_v1.c                           |     6 +-
 src/core/adios_selection_util.c                    |   275 +
 src/core/adios_selection_util.h                    |    33 +
 src/core/adios_subvolume.c                         |   536 +
 src/core/adios_subvolume.h                         |   261 +
 src/core/adios_timing.c                            |    24 +-
 src/core/adios_timing.h                            |     8 +-
 src/core/adios_transport_hooks.c                   |    26 +-
 src/core/adios_transport_hooks.h                   |    22 +-
 src/core/adiosf.c                                  |    74 +-
 src/core/adiosf_read.c                             |     2 +-
 src/core/adiosf_read_mod.f90                       |   270 +-
 src/core/adiosf_read_v1.c                          |    94 +-
 src/core/adiosf_write_mod.f90                      |   765 +-
 src/core/bp_types.h                                |    71 +-
 src/core/bp_utils.c                                |   642 +-
 src/core/bp_utils.h                                |    28 +-
 src/core/buffer.c                                  |     4 +-
 src/core/common_adios.c                            |   414 +-
 src/core/common_read.c                             |  2531 ++-
 src/core/common_read.h                             |     9 +
 src/core/ds_metadata.h                             |    12 +-
 src/core/flexpath.h                                |    98 +-
 src/core/globals.c                                 |     4 +-
 src/core/mpidummy.c                                |     8 +-
 src/core/qhashtbl.c                                |   657 +
 src/core/qhashtbl.h                                |    80 +
 src/core/transforms/adios_patchdata.c              |   342 +
 src/core/transforms/adios_patchdata.h              |    24 +
 src/core/transforms/adios_transforms_common.c      |   348 +
 src/core/transforms/adios_transforms_common.h      |    64 +
 src/core/transforms/adios_transforms_datablock.c   |    85 +
 src/core/transforms/adios_transforms_datablock.h   |    50 +
 src/core/transforms/adios_transforms_hooks.c       |   152 +
 src/core/transforms/adios_transforms_hooks.h       |    47 +
 src/core/transforms/adios_transforms_hooks_read.c  |    85 +
 src/core/transforms/adios_transforms_hooks_read.h  |   127 +
 src/core/transforms/adios_transforms_hooks_write.c |    71 +
 src/core/transforms/adios_transforms_hooks_write.h |    97 +
 src/core/transforms/adios_transforms_read.c        |   598 +
 src/core/transforms/adios_transforms_read.h        |    79 +
 src/core/transforms/adios_transforms_reqgroup.c    |   500 +
 src/core/transforms/adios_transforms_reqgroup.h    |   149 +
 src/core/transforms/adios_transforms_specparse.c   |   157 +
 src/core/transforms/adios_transforms_specparse.h   |    50 +
 src/core/transforms/adios_transforms_transinfo.h   |    30 +
 src/core/transforms/adios_transforms_util.c        |    69 +
 src/core/transforms/adios_transforms_util.h        |    22 +
 src/core/transforms/adios_transforms_write.c       |   774 +
 src/core/transforms/adios_transforms_write.h       |    97 +
 .../transforms/plugindetect/detect_plugin_infos.h  |    74 +
 .../plugindetect/detect_plugin_read_hook_decls.h   |    29 +
 .../plugindetect/detect_plugin_read_hook_reg.h     |    32 +
 .../transforms/plugindetect/detect_plugin_types.h  |    32 +
 .../plugindetect/detect_plugin_write_hook_decls.h  |    29 +
 .../plugindetect/detect_plugin_write_hook_reg.h    |    32 +
 .../transforms/plugindetect/plugin_info_types.h    |    24 +
 src/core/util.c                                    |    21 +-
 src/core/util.h                                    |     2 +
 src/nssi/adios_nssi_config.c                       |     2 +-
 src/nssi/adios_nssi_filter.c                       |     6 +-
 src/public/adios.h                                 |    17 +-
 src/public/adios_error.h                           |    50 +-
 src/public/adios_read_v1.h                         |     2 +-
 src/public/adios_read_v2.h                         |    80 +-
 src/public/adios_schema.h                          |    78 +
 src/public/adios_selection.h                       |    13 +
 src/public/adios_types.h                           |     2 +-
 src/read/read_bp.c                                 |   616 +-
 src/read/read_bp_staged.c                          |    10 +-
 src/read/read_bp_staged1.c                         |    53 +-
 src/read/read_dataspaces.c                         |    50 +-
 src/read/read_datatap.c                            |     6 +-
 src/read/read_dimes.c                              |    43 +-
 src/read/read_flexpath.c                           |  1894 ++-
 src/read/read_nssi.c                               |     2 +-
 src/transforms/Makefile.plugins                    |    27 +
 src/transforms/adios_transform_alacrity_read.c     |    79 +
 src/transforms/adios_transform_alacrity_write.c    |   187 +
 src/transforms/adios_transform_aplod_read.c        |   192 +
 src/transforms/adios_transform_aplod_write.c       |   197 +
 src/transforms/adios_transform_bzip2_read.c        |   118 +
 src/transforms/adios_transform_bzip2_write.c       |   156 +
 src/transforms/adios_transform_identity_read.c     |   124 +
 src/transforms/adios_transform_identity_read.h     |    27 +
 src/transforms/adios_transform_identity_write.c    |    33 +
 src/transforms/adios_transform_isobar_read.c       |   131 +
 src/transforms/adios_transform_isobar_write.c      |   190 +
 src/transforms/adios_transform_szip.h              |   139 +
 src/transforms/adios_transform_szip_read.c         |    95 +
 src/transforms/adios_transform_szip_write.c        |   116 +
 src/transforms/adios_transform_zlib_read.c         |   114 +
 src/transforms/adios_transform_zlib_write.c        |   176 +
 src/transforms/transform_plugins.h                 |    14 +
 src/write/adios_dataspaces.c                       |   194 +-
 src/write/adios_datatap.c                          |  1364 +-
 src/write/adios_dimes.c                            |   193 +-
 src/write/adios_flexpath.c                         |  1662 +-
 src/write/adios_mpi.c                              |   131 +-
 src/write/adios_mpi_amr.c                          |   571 +-
 src/write/{adios_mpi_amr.c => adios_mpi_bgq.c}     |  2422 +--
 src/write/adios_mpi_lustre.c                       |   197 +-
 src/write/adios_nc4.c                              |   132 +-
 src/write/adios_nssi.c                             |     6 +-
 src/write/adios_phdf5.c                            |    83 +-
 src/write/adios_posix.c                            |   184 +-
 src/write/adios_posix1.c                           |    70 +-
 src/write/adios_var_merge.c                        |   325 +-
 tests/C/CMakeLists.txt                             |    13 +-
 tests/C/Makefile.am                                |     7 +-
 tests/C/Makefile.in                                |   272 +-
 .../C/flexpath_tests/1D_arr_global/CMakeLists.txt  |    23 +
 tests/C/flexpath_tests/1D_arr_global/Makefile.am   |    21 +
 .../C/flexpath_tests/1D_arr_global}/Makefile.in    |   150 +-
 tests/C/flexpath_tests/1D_arr_global/cfg.h         |    15 +
 tests/C/flexpath_tests/1D_arr_global/reader.c      |   188 +
 .../1D_arr_global/test_config_flex.xml             |     7 +-
 tests/C/flexpath_tests/1D_arr_global/writer.c      |    88 +
 .../1D_arr_global_noxml/CMakeLists.txt             |    15 +
 .../flexpath_tests/1D_arr_global_noxml/Makefile.am |    22 +
 .../1D_arr_global_noxml}/Makefile.in               |   136 +-
 tests/C/flexpath_tests/1D_arr_global_noxml/cfg.h   |    15 +
 .../C/flexpath_tests/1D_arr_global_noxml/reader.c  |   184 +
 .../C/flexpath_tests/1D_arr_global_noxml/writer.c  |   124 +
 tests/C/flexpath_tests/CMakeLists.txt              |     8 +
 tests/C/flexpath_tests/Makefile.am                 |     5 +
 {utils => tests/C/flexpath_tests}/Makefile.in      |    47 +-
 tests/C/flexpath_tests/README                      |   128 +
 tests/C/flexpath_tests/common/utils.c              |   317 +
 .../global_range_select/CMakeLists.txt             |    15 +
 .../global_range_select/Makefile.am                |     8 +-
 .../global_range_select/Makefile.in                |    76 +-
 .../flexpath_tests}/global_range_select/arrays.xml |     0
 .../global_range_select/arrays_read.c              |     6 +-
 .../global_range_select/arrays_write.c             |     6 +-
 .../global_range_select/run_tests.pl               |     8 +
 tests/C/flexpath_tests/include/misc.h              |   118 +
 tests/C/flexpath_tests/include/test_common.h       |   260 +
 tests/C/flexpath_tests/include/utils.h             |    23 +
 tests/C/flexpath_tests/maya_append/CMakeLists.txt  |    15 +
 tests/C/flexpath_tests/maya_append/Makefile.am     |    19 +
 .../C/flexpath_tests/maya_append}/Makefile.in      |   128 +-
 tests/C/flexpath_tests/maya_append/cfg.h           |    26 +
 tests/C/flexpath_tests/maya_append/reader.c        |   137 +
 tests/C/flexpath_tests/maya_append/readme.txt      |    64 +
 tests/C/flexpath_tests/maya_append/writer.c        |   133 +
 tests/C/flexpath_tests/maya_noxml/CMakeLists.txt   |    15 +
 tests/C/flexpath_tests/maya_noxml/Makefile.am      |    19 +
 .../C/flexpath_tests/maya_noxml}/Makefile.in       |   119 +-
 tests/C/flexpath_tests/maya_noxml/cfg.h            |    47 +
 tests/C/flexpath_tests/maya_noxml/reader.c         |   374 +
 tests/C/flexpath_tests/maya_noxml/readme.txt       |   116 +
 tests/C/flexpath_tests/maya_noxml/writer.c         |   292 +
 tests/C/flexpath_tests/scalar/CMakeLists.txt       |    15 +
 tests/C/flexpath_tests/scalar/Makefile.am          |    21 +
 .../C/flexpath_tests/scalar}/Makefile.in           |   150 +-
 tests/C/flexpath_tests/scalar/cfg.h                |    14 +
 tests/C/flexpath_tests/scalar/reader.c             |   130 +
 tests/C/flexpath_tests/scalar/readme.txt           |   108 +
 tests/C/flexpath_tests/scalar/test_config_flex.xml |    15 +
 tests/C/flexpath_tests/scalar/test_config_mpi.xml  |    15 +
 tests/C/flexpath_tests/scalar/writer.c             |    73 +
 tests/Fortran/CMakeLists.txt                       |     2 +-
 tests/Fortran/Makefile.am                          |     3 +
 tests/Fortran/Makefile.in                          |    63 +-
 tests/Makefile.in                                  |    31 +-
 tests/bp_read/CMakeLists.txt                       |    11 +-
 tests/bp_read/Makefile.am                          |     5 +-
 tests/bp_read/Makefile.in                          |    65 +-
 tests/genarray/CMakeLists.txt                      |     4 +-
 tests/genarray/Makefile.am                         |     7 +-
 tests/genarray/Makefile.in                         |    65 +-
 tests/genarray/genarray.xml                        |    15 +-
 tests/genarray/genarray2D.F90                      |    22 +-
 tests/genarray/genarray3d.xml                      |    21 +-
 tests/suite/CMakeLists.txt                         |    18 +-
 tests/suite/Makefile.am                            |     6 +
 tests/suite/Makefile.in                            |    65 +-
 tests/suite/programs/CMakeLists.txt                |    60 +-
 tests/suite/programs/Makefile.am                   |    77 +-
 tests/suite/programs/Makefile.in                   |   248 +-
 tests/suite/programs/adios_amr_write.c             |     2 +-
 tests/suite/programs/adios_amr_write.xml           |     2 +-
 tests/suite/programs/adios_amr_write_2vars.c       |     2 +-
 tests/suite/programs/adios_staged_read.c           |     2 +-
 tests/suite/programs/adios_staged_read_2vars.c     |     2 +-
 tests/suite/programs/adios_staged_read_v2.c        |     2 +-
 tests/suite/programs/adios_transforms.xml          |    26 +
 tests/suite/programs/adios_transforms_read_write.c |   223 +
 tests/suite/programs/connect_to_space_subset.c     |     4 +-
 tests/suite/programs/copy_subvolume.c              |   275 +
 tests/suite/programs/hashtest.c                    |   152 +
 tests/suite/programs/local_array_time.c            |     4 +-
 tests/suite/programs/many_vars.c                   |   175 +-
 tests/suite/programs/path_test.c                   |   332 +
 tests/suite/programs/path_test.xml                 |    67 +
 tests/suite/programs/reuse_dim.c                   |   209 +
 tests/suite/programs/selections.c                  |     4 +-
 tests/suite/programs/transforms.xml                |    12 +
 tests/suite/programs/transforms_specparse.c        |   165 +
 tests/suite/programs/two_groups.c                  |     4 +-
 tests/suite/programs/write_alternate.c             |     4 +-
 tests/suite/programs/write_alternate.xml           |    18 +-
 tests/suite/programs/write_read.c                  |   222 +-
 tests/suite/programs/write_read.xml                |    36 +-
 tests/suite/reference/arrays_bpls.txt              |    12 +-
 tests/suite/reference/attributes_bpls.txt          |    24 +-
 tests/suite/reference/attributes_read.txt          |    16 +-
 tests/suite/reference/global_array_bpls.txt        |    10 +-
 tests/suite/reference/global_array_no_xml_bpls.txt |   212 +-
 .../suite/reference/global_array_no_xml_f_bpls.txt |    32 +-
 tests/suite/reference/global_array_time_bpls.txt   |    14 +-
 tests/suite/reference/no_xml_write_byid_bpls.txt   |   206 +-
 tests/suite/reference/no_xml_write_byid_f_bpls.txt |    26 +-
 tests/suite/reference/scalars_write_bpls.txt       |    30 +-
 .../suite/reference/transforms_read_write_bpls.txt |    10 +
 tests/suite/reference/write_read_bpls.txt          |    36 +-
 tests/suite/test.sh                                |    21 +-
 tests/suite/tests/01_scalars.sh                    |    25 +-
 tests/suite/tests/02_attributes.sh                 |    11 +-
 tests/suite/tests/03_arrays.sh                     |    11 +-
 tests/suite/tests/04_global_array.sh               |    20 +-
 tests/suite/tests/05_global_array_time.sh          |    21 +-
 tests/suite/tests/06_posix_method.sh               |     5 +-
 tests/suite/tests/07_global_array_no_xml.sh        |    19 +-
 tests/suite/tests/08_amr_write_read.sh             |    15 +-
 tests/suite/tests/09_amr_write_read_2vars.sh       |    11 +-
 tests/suite/tests/10_write_read.sh                 |     5 +-
 tests/suite/tests/11_write_alternate.sh            |     5 +-
 tests/suite/tests/12_selections.sh                 |     2 +-
 tests/suite/tests/13_write_byid.sh                 |    16 +-
 tests/suite/tests/14_pathtest.sh                   |    45 +
 .../tests/{12_selections.sh => 15_reuse_dim.sh}    |    16 +-
 tests/suite/tests/16_transform_write_read.sh       |    65 +
 utils/CMakeLists.txt                               |     3 +-
 utils/Makefile.am                                  |     2 +-
 utils/Makefile.in                                  |    39 +-
 utils/adios_lint/Makefile.am                       |     2 +-
 utils/adios_lint/Makefile.in                       |    35 +-
 utils/bp2ascii/Makefile.am                         |     2 +-
 utils/bp2ascii/Makefile.in                         |    35 +-
 utils/bp2ascii/bp2ascii.c                          |     2 +-
 utils/bp2bp/CMakeLists.txt                         |     8 +-
 utils/bp2bp/Makefile.am                            |     2 +-
 utils/bp2bp/Makefile.in                            |    35 +-
 utils/bp2h5/CMakeLists.txt                         |     2 +
 utils/bp2h5/Makefile.am                            |     2 +-
 utils/bp2h5/Makefile.in                            |    35 +-
 utils/bp2ncd/CMakeLists.txt                        |     7 +-
 utils/bp2ncd/Makefile.am                           |     2 +-
 utils/bp2ncd/Makefile.in                           |    35 +-
 utils/bp2ncd/bp2ncd.c                              |   536 +-
 utils/bpdiff/CMakeLists.txt                        |    11 +
 utils/bpdiff/Makefile.am                           |    17 +
 utils/{bpdump => bpdiff}/Makefile.in               |   101 +-
 utils/bpdiff/bpdiff.c                              |   500 +
 utils/bpdiff/decompose.h                           |    17 +
 utils/bpdiff/decompose_block.c                     |    91 +
 .../staging/stage_write => utils/bpdiff}/utils.c   |     0
 utils/bpdiff/utils.h                               |    50 +
 utils/bpdump/CMakeLists.txt                        |     3 +-
 utils/bpdump/Makefile.am                           |     2 +-
 utils/bpdump/Makefile.in                           |    36 +-
 utils/bpdump/bpdump.c                              |    95 +-
 utils/bpls/Makefile.am                             |     2 +-
 utils/bpls/Makefile.in                             |    35 +-
 utils/bpls/bpls.c                                  |   252 +-
 utils/bpls/bpls.h                                  |     5 +-
 utils/bpsplit/Makefile.am                          |     2 +-
 utils/bpsplit/Makefile.in                          |    35 +-
 utils/bpsplit/bpappend.c                           |    26 +-
 utils/bpsplit/bpgettime.c                          |     3 +-
 utils/bpsplit/bpsplit.c                            |    31 +-
 utils/gpp/Makefile.am                              |     3 +
 utils/gpp/Makefile.in                              |    61 +-
 utils/gpp/ad_config.py                             |    34 +-
 utils/gpp/gpp.py                                   |    15 +-
 utils/skel/CMakeLists.txt                          |    13 +-
 utils/skel/Makefile.am                             |    14 +
 utils/skel/Makefile.in                             |    57 +-
 utils/skel/bin/skel                                |    72 +-
 utils/skel/bin/skel_extract.py                     |    22 +-
 utils/skel/etc/Makefile.in                         |    31 +-
 utils/skel/etc/templates/Makefile.default.tpl      |    15 +-
 utils/skel/etc/templates/submit_sith.tpl           |     2 +-
 utils/skel/lib/adios.py                            |    40 +-
 utils/skel/lib/skel_bpls.py                        |    83 +
 utils/skel/lib/skel_bpy.py                         |   276 +
 utils/skel/lib/skel_makefile.py                    |    69 +
 utils/skel/lib/skel_params.py                      |    65 +-
 utils/skel/lib/skel_replay.py                      |   105 +
 utils/skel/lib/skel_source.py                      |    93 +-
 utils/skel/lib/skel_submit.py                      |    73 +-
 utils/skel/lib/skel_xml.py                         |    71 +-
 utils/skel/src/Makefile.in                         |    31 +-
 utils/skel/src/skel_xml_output.c                   |     2 +-
 utils/skeldump/CMakeLists.txt                      |    13 +
 utils/skeldump/Makefile.am                         |    17 +
 utils/{bpls => skeldump}/Makefile.in               |    81 +-
 utils/{bpls/bpls.c => skeldump/skeldump.c}         |   159 +-
 utils/{bpls/bpls.h => skeldump/skeldump.h}         |    28 +-
 wrappers/numpy/README                              |    17 +-
 wrappers/numpy/adios.cpp                           | 16287 +++++++++++++++++++
 wrappers/numpy/adios.pyx                           |     9 +-
 wrappers/numpy/setup.py                            |    37 +
 538 files changed, 64043 insertions(+), 19379 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cd66d6c..56a6578 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,8 @@
 cmake_minimum_required(VERSION 2.8.0)
 project(ADIOS_PROJECT)
 
+SET_PROPERTY(GLOBAL PROPERTY ALLOW_DUPLICATE_CUSTOM_TARGETS 1)
+
 #set(LANGUAGE "" CACHE FILEPATH "")  #C/CXX/Fortran
 
 #enable_language(${LANGUAGE})
@@ -20,6 +22,7 @@ set(bindir ${exec_prefix}/bin)
 set(libdir ${exec_prefix}/lib)
 set(includedir ${prefix}/include)
 
+
 if(DEFINED ENV{MACRODEFFLAG})
   set(MACRODEFFLAG $ENV{MACRODEFFLAG})
 else()
@@ -65,9 +68,18 @@ endif()
 
 if(DEFINED ENV{skel_timing})
   if("$ENV{skel_timing}" STREQUAL "")
-    message("SKEL is not enabled")
-  else()
+#    message("SKEL is not enabled")
+    set(SKEL_TIMING 0)
+  elseif("$ENV{skel_timing}" STREQUAL "ON")
+    set(SKEL_TIMING 1)
+  elseif("$ENV{skel_timing}" STREQUAL "on")
     set(SKEL_TIMING 1)
+  elseif("$ENV{skel_timing}" STREQUAL "OFF")
+    set(SKEL_TIMING 0)
+  elseif("$ENV{skel_timing}" STREQUAL "off")
+    set(SKEL_TIMING 0)
+  else()
+    set(SKEL_TIMING 0)
   endif()
   if(SKEL_TIMING)
     set(SKEL_HAVE_ADIOS_TIMING True)
@@ -76,16 +88,64 @@ if(DEFINED ENV{skel_timing})
   endif()
 else()
   set(SKEL_HAVE_ADIOS_TIMING False)
-  message("SKEL is not enabled")
+#  message("SKEL is not enabled")
+endif()
+#message("SKEL_HAVE_ADIOS_TIMING is ${SKEL_HAVE_ADIOS_TIMING}")
+
+if(DEFINED ENV{bgq})
+  if("$ENV{bgq}" STREQUAL "")
+    set(HAVE_BGQ 0)
+    set(BGQ OFF CACHE BOOL "")
+  elseif("$ENV{bgq}" STREQUAL "ON")
+    set(HAVE_BGQ 1)
+    set(BGQ ON CACHE BOOL "")
+  elseif("$ENV{bgq}" STREQUAL "on")
+    set(HAVE_BGQ 1)
+    set(BGQ ON CACHE BOOL "")
+  elseif("$ENV{bgq}" STREQUAL "OFF")
+    set(HAVE_BGQ 0)
+    set(BGQ OFF CACHE BOOL "")
+  elseif("$ENV{bgq}" STREQUAL "Off")
+    set(HAVE_BGQ 0)
+    set(BGQ OFF CACHE BOOL "")
+  else()
+    set(HAVE_BGQ 0)
+    set(BGQ OFF CACHE BOOL "")
+  endif()
+else()
+  set(HAVE_BGQ 0)
+  set(BGQ OFF CACHE BOOL "")
+endif()
+
+if(DEFINED ENV{research_transports})
+  if("$ENV{research_transports}" STREQUAL "")
+    set(RESEARCH_TRANSPORTS 0)
+    message("research_transports is NOT enabled")
+  elseif("$ENV{research_transports}" STREQUAL "OFF")
+    set(RESEARCH_TRANSPORTS 0)
+    message("research_transports is NOT enabled")
+  elseif("$ENV{research_transports}" STREQUAL "off")
+    set(RESEARCH_TRANSPORTS 0)
+    message("research_transports is NOT enabled")
+  elseif("$ENV{research_transports}" STREQUAL "on")
+    set(RESEARCH_TRANSPORTS 1)
+    message("research_transports is enabled")
+  elseif("$ENV{research_transports}" STREQUAL "ON")
+    set(RESEARCH_TRANSPORTS 1)
+    message("research_transports is enabled")
+  else()
+    set(RESEARCH_TRANSPORTS 0)
+    message("research_transports is NOT enabled")
+  endif()
+else()
+  set(RESEARCH_TRANSPORTS 0)
+  message("research_transports is NOT enabled")
 endif()
-message("SKEL_HAVE_ADIOS_TIMING is ${SKEL_HAVE_ADIOS_TIMING}")
 
 set(MXML_DIR $ENV{MXML_DIR}  CACHE FILEPATH "path to mxml dir")
 
 set(DATATAP OFF CACHE BOOL "")
 
-set(DIMES OFF CACHE BOOL "")
-
 set(NSSI OFF CACHE BOOL "")
 
 if(DEFINED ENV{SEQ_NC_DIR})
@@ -179,12 +239,12 @@ else()
 endif()
 if(DEFINED ENV{DATASPACES_LIBDIR})
   if("${DATASPACES_LIBDIR}" STREQUAL "")
-    set(DATASPACES OFF CACHE BOOL "")
+    set(DATASPACES OFF CACHE BOOL "" FORCE)
   else()
     set(DATASPACES_LIBDIR $ENV{DATASPACES_LIBDIR} CACHE INTERNAL "Internal variable")
   endif()
 else()
-  set(DATASPACES OFF CACHE BOOL "")
+  set(DATASPACES OFF CACHE BOOL "" FORCE)
 endif()
 if(DEFINED DATASPACES_INCDIR)
   if(DEFINED DATASPACES_LIBDIR)
@@ -195,13 +255,17 @@ if(DEFINED DATASPACES_INCDIR)
 endif()
 if("${DATASPACES}" STREQUAL "OFF")
   if(DEFINED ENV{DATASPACES_DIR})
-    set(DATASPACES ON CACHE BOOL "" FORCE)
-    set(DATASPACES_DIR $ENV{DATASPACES_DIR} CACHE FILEPATH "path to dataspaces dir")
+    if(NOT "$ENV{DATASPACES_DIR}" STREQUAL "")
+      set(DATASPACES ON CACHE BOOL "" FORCE)
+      set(DATASPACES_DIR $ENV{DATASPACES_DIR} CACHE FILEPATH "path to dataspaces dir")
+    endif()
 #  set(DATASPACES_LIBS "-L$ENV{DATASPACES_DIR}/libs -ldspaces -ldscommon
 #  -ldar" CACHE STRING "dataspace libs")
-  elseif(DEFINED ENV{DATASPACES})
-    set(DATASPACES_DIR $ENV{DATASPACES} CACHE FILEPATH "path to dataspaces dir")
-    set(DATASPACES ON CACHE BOOL "" FORCE)
+  else()
+    if(NOT "$ENV{DATASPACES}" STREQUAL "")
+      set(DATASPACES_DIR $ENV{DATASPACES} CACHE FILEPATH "path to dataspaces dir")
+      set(DATASPACES ON CACHE BOOL "" FORCE)
+    endif()
   endif()
 endif()
 
@@ -231,6 +295,51 @@ else()
   set(CRAY_UGNI OFF CACHE BOOL "")
 endif()
 
+if(DATASPACES)
+  set(DIMES ON CACHE BOOL "")
+else()
+  set(DIMES OFF CACHE BOOL "")
+endif()
+
+if(DEFINED ENV{FLEXPATH_INCDIR})
+  if("${FLEXPATH_INCDIR}" STREQUAL "")
+    set(FLEXPATH OFF CACHE BOOL "")
+  else()
+    set(FLEXPATH_INCDIR "$ENV{FLEXPATH_INCDIR}" CACHE INTERNAL "Internal variable")
+  endif()
+else()
+  set(FLEXPATH OFF CACHE BOOL "")
+endif()
+if(DEFINED ENV{FLEXPATH_LIBDIR})
+  if("${FLEXPATH_LIBDIR}" STREQUAL "" FORCE)
+    set(FLEXPATH OFF CACHE BOOL "")
+  else()
+    set(FLEXPATH_LIBDIR $ENV{FLEXPATH_LIBDIR} CACHE INTERNAL "Internal variable")
+  endif()
+else()
+  set(FLEXPATH OFF CACHE BOOL "" FORCE)
+endif()
+if(DEFINED FLEXPATH_INCDIR)
+  if(DEFINED FLEXPATH_LIBDIR)
+    set(FLEXPATH ON CACHE BOOL "" FORCE)
+    set(FLEXPATH_INCDIR "$ENV{FLEXPATH_INCDIR}" CACHE STRING "" FORCE)
+    set(FLEXPATH_LIBDIR $ENV{FLEXPATH_LIBDIR} CACHE STRING "" FORCE)
+  endif()
+endif()
+if("${FLEXPATH}" STREQUAL "OFF")
+  if(DEFINED ENV{FLEXPATH_DIR})
+    if(NOT "$ENV{FLEXPATH_DIR}" STREQUAL "")
+      set(FLEXPATH ON CACHE BOOL "" FORCE)
+      set(FLEXPATH_DIR $ENV{FLEXPATH_DIR} CACHE FILEPATH "path to flexpath dir")
+    endif()
+  else()
+    if(NOT "$ENV{FLEXPATH_DIR}" STREQUAL "")
+      set(FLEXPATH_DIR $ENV{FLEXPATH} CACHE FILEPATH "path to dataspaces dir")
+      set(FLEXPATH ON CACHE BOOL "" FORCE)
+    endif()
+  endif()
+endif()
+
 #if(DEFINED ENV{SEQ_HDF5_DIR} AND DEFINED ENV{SEQ_HDF5_CLIB})
 #  set(HDF5 ON CACHE BOOL "")
 #  set(HDF5_DIR "$ENV{SEQ_HDF5_DIR}" CACHE FILEPATH "path to hdf5 dir")
@@ -261,14 +370,111 @@ if(DEFINED ENV{LUSTRE_DIR})
 else()
   set(LUSTRE OFF CACHE BOOL "")
 endif()
+
+if(DEFINED ENV{BZIP2_DIR})
+  if("$ENV{BZIP2_DIR}" STREQUAL "")
+    set(BZIP2 OFF CACHE BOOL "")
+  else()
+    set(BZIP2 ON CACHE BOOL "")
+    set(BZIP2_DIR "$ENV{BZIP2_DIR}")
+  endif()
+elseif(DEFINED ENV{BZIP2})
+  if("$ENV{BZIP2}" STREQUAL "")
+    set(BZIP2 OFF CACHE BOOL "")
+  else()
+    set(BZIP2 ON CACHE BOOL "")
+    set(BZIP2_DIR "$ENV{BZIP2}")
+  endif()
+endif()
+
+if(DEFINED ENV{SZIP_DIR})
+  if("$ENV{SZIP_DIR}" STREQUAL "")
+    set(SZIP OFF CACHE BOOL "")
+  else()
+    set(SZIP ON CACHE BOOL "")
+    set(SZIP_DIR $ENV{SZIP_DIR})
+  endif()
+elseif(DEFINED ENV{SZIP})
+  if(NOT "$ENV{SZIP}" STREQUAL "")
+    set(SZIP OFF CACHE BOOL "")
+  else()
+    set(SZIP_DIR $ENV{SZIP})
+    set(SZIP ON CACHE BOOL "")
+  endif()
+endif()
+
+if(DEFINED ENV{ISOBAR_DIR})
+  if("$ENV{ISOBAR_DIR}" STREQUAL "")
+    set(ISOBAR OFF CACHE BOOL "")
+  else()
+    set(ISOBAR ON CACHE BOOL "")
+    set(ISOBAR_DIR $ENV{ISOBAR_DIR})
+  endif()
+elseif(DEFINED ENV{ISOBAR})
+  if("$ENV{ISOBAR}" STREQUAL "")
+    set(ISOBAR OFF CACHE BOOL "")
+  else()
+    set(ISOBAR ON CACHE BOOL "")
+    set(ISOBAR_DIR $ENV{ISOBAR})
+  endif()
+endif()
+
+if(DEFINED ENV{APLOD_DIR})
+  if("$ENV{APLOD_DIR}" STREQUAL "")
+    set(APLOD OFF CACHE BOOL "")
+  else()
+    set(APLOD ON CACHE BOOL "")
+    set(APLOD_DIR $ENV{APLOD_DIR})
+  endif()
+elseif(DEFINED ENV{APLOD})
+  if("$ENV{APLOD}" STREQUAL "")
+    set(APLOD OFF CACHE BOOL "")
+  else()
+    set(APLOD ON CACHE BOOL "")
+    set(${APLOD_DIR} $ENV{APLOD})
+  endif()
+endif()
+
+if(DEFINED ENV{ALACRITY_DIR})
+  if("$ENV{ALACRITY_DIR}" STREQUAL "")
+    set(ALACRITY OFF CACHE BOOL "")
+  else()
+    set(ALACRITY ON CACHE BOOL "")
+    set(ALACRITY_DIR $ENV{ALACRITY_DIR})
+  endif()
+elseif(DEFINED ENV{ALACRITY})
+  if("$ENV{ALACRITY}" STREQUAL "")
+    set(ALACRITY OFF CACHE BOOL "")
+  else()
+    set(ALACRITY ON CACHE BOOL "")
+    set(ALACRITY_DIR $ENV{ALACRITY})
+  endif()
+endif()
+
+if(DEFINED ENV{NCSU_TIMER_DIR})
+  if("$ENV{NCSU_TIMER_DIR}" STREQUAL "")
+    set(NCSU_TIMER OFF CACHE BOOL "")
+  else()
+    set(NCSU_TIMER ON CACHE BOOL "")
+    set(NCSU_TIMER_DIR $ENV{NCSU_TIMER_DIR})
+  endif()
+elseif(DEFINED ENV{NCSU_TIMER})
+  if("$ENV{NCSU_TIMER}" STREQUAL "")
+    set(NCSU_TIMER OFF CACHE BOOL "")
+  else()
+    set(NCSU_TIMER ON CACHE BOOL "")
+    set(NCSU_TIMER $ENV{NCSU_TIMER})
+  endif()
+endif()
 ###################### end of external library is used(ON) or not (OFF) ##############################
 
 
 #################################### start generating config.h #######################################
 set(BUILD_WITH_CMAKE 1)
 
-INCLUDE (CheckIncludeFiles)
-INCLUDE (CheckFunctionExists)
+include(CheckIncludeFiles)
+include(CheckFunctionExists)
+include(CheckLibraryExists)
 
 # Define to dummy `main' function (if any) required to link to the Fortran
 # libraries.
@@ -296,7 +502,7 @@ if(CRAY_PMI)
   if(CRAY_PMI_LIBS)
     set(HAVE_CRAY_PMI 1)
 #  set(LIBS "${LIBS} ${CRAY_PMI_LIBS}")
-    set(CPPFLAGS "${CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
   endif()
 endif()
 
@@ -307,7 +513,7 @@ if(CRAY_UGNI)
   if(CRAY_UGNI_LIBS)
     set(HAVE_CRAY_UGNI 1)
 #   set(LIBS "${LIBS} ${CRAY_UGNI_LIBS}")
-    set(CPPFLAGS "${CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
   endif()
 endif()
 
@@ -351,13 +557,13 @@ if(PORTALS)
     set(PORTALS_CFLAGS "${PORTALS_CFLAGS} ${EXTRA_CFLAGS}")
     set(CFLAGS "${CFLAGS} ${PORTALS_CFLAGS}")
     set(PORTALS_CPPFLAGS "${PORTALS_CPPFLAGS} ${EXTRA_CPPFLAGS}")
-    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}")
   elseif(HAVE_PORTALS_PORTALS3_H)
     set(HAVE_PORTALS 1)
     set(PORTALS_CFLAGS "${PORTALS_CFLAGS} ${EXTRA_CFLAGS}")
     set(CFLAGS "${CFLAGS} ${PORTALS_CFLAGS}")
     set(PORTALS_CPPFLAGS "${PORTALS_CPPFLAGS} ${EXTRA_CPPFLAGS}")
-    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}") 
+#    set(CPPFLAGS "${CPPFLAGS} ${PORTALS_CPPFLAGS}") 
  endif()
 #else()
 #  find_package(TPLPortals) 
@@ -389,64 +595,64 @@ if(DATASPACES)
   if(DATASPACES_INCLUDE_DIR)
     set(HAVE_DATASPACES_H 1)
     set(DATASPACES_CPPFLAGS "-I${DATASPACES_INCLUDE_DIR}")
-    include_directories(${DATASPACES_INCLUDE_DIR})
+#include_directories(${DATASPACES_INCLUDE_DIR})
   endif()
 endif()
 
 # Define if you have the DATASPACES.
 set(HAVE_DATASPACES 0)
 if(HAVE_DATASPACES_H)
-  set(CPPFLAGS "${CPPFLAGS} ${DATASPACES_CPPFLAGS}")
+#  set(CPPFLAGS "${CPPFLAGS} ${DATASPACES_CPPFLAGS}")
   if(DEFINED DATASPACES_LIBDIR)
     if("${DATASPACES_LIBDIR}" STREQUAL "")
 #      set(HAVE_DATASPACES 0)
 #    else()
-      set(DATASPACES_LIBDIR "${DATASPACES_DIR}/lib")
+      set(DATASPACES_LIBDIR "$ENV{DATASPACES_DIR}/lib")
     endif()
   else()
-    set(DATASPACES_LIBDIR "${DATASPACES_DIR}/lib")
+    set(DATASPACES_LIBDIR "$ENV{DATASPACES_DIR}/lib")
   endif()
   
   if(HAVE_INFINIBAND)
-    find_library(DATASPACES_LIBS1 NAMES dspaces PATHS ${DATASPACES_LIBDIR}) 
+    find_library(DATASPACES_LIBS1 NAMES libdspaces.a PATHS ${DATASPACES_LIBDIR}) 
     set(DATASPACES_LIBS1 "${DATASPACES_LIBS1}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS2 NAMES dscommon PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS2 NAMES libdscommon.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS2 "${DATASPACES_LIBS2}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS3 NAMES dart  PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS3 NAMES libdart.a  PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS3 "${DATASPACES_LIBS3}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS4 NAMES rdmacm  PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS4 NAMES librdmacm.a  PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS4 "${DATASPACES_LIBS4}" CACHE INTERNAL "Internal variable")
     if(DATASPACES_LIBS1 AND DATASPACES_LIBS2 AND DATASPACES_LIBS3 AND DATASPACES_LIBS4)
-      set(DATASPACES_LIBS "${DATASPACES_LIBS1} ${DATASPACES_LIBS2} ${DATASPACES_LIBS3} ${DATASPACES_LIBS4}")
-      set(DATASPACES_LIBS "${DATASPACES_LIBS}" CACHE STRING "")
+      set(DATASPACES_LIBS ${DATASPACES_LIBS1} ${DATASPACES_LIBS2} ${DATASPACES_LIBS3} ${DATASPACES_LIBS4})
+      set(DATASPACES_LIBS ${DATASPACES_LIBS} CACHE STRING "")
       set(HAVE_DATASPACES 1)
 #      set(LIBS "${LIBS} ${DATASPACES_LIBS}")
     else()
       set(DATASPACES OFF CACHE BOOL "do not find supporting library" FORCE)
     endif()
   elseif(HAVE_PORTALS)
-    find_library(DATASPACES_LIBS1 NAMES dart2 PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS1 NAMES libdart2.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS1 "${DATASPACES_LIBS1}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS2 NAMES spaces PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS2 NAMES libspaces.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS2 "${DATASPACES_LIBS2}" CACHE INTERNAL "Internal variable")
     if(DATASPACES_LIBS1 AND DATASPACES_LIBS2)
-      set(DATASPACES_LIBS "${DATASPACES_LIBS1} ${DATASPACES_LIBS2}")
-      set(DATASPACES_LIBS "${DATASPACES_LIBS}" CACHE STRING "")
+      set(DATASPACES_LIBS ${DATASPACES_LIBS1} ${DATASPACES_LIBS2})
+      set(DATASPACES_LIBS ${DATASPACES_LIBS} CACHE STRING "")
       set(HAVE_DATASPACES 1)
 #      set(LIBS "${LIBS} ${DATASPACES_LIBS}")
     else()
       set(DATASPACES OFF CACHE BOOL "do not find supporting library" FORCE)
     endif()
   elseif(HAVE_CRAY_PMI AND HAVE_CRAY_UGNI)
-    find_library(DATASPACES_LIBS1 NAMES dspaces PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS1 NAMES libdspaces.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS1 "${DATASPACES_LIBS1}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS2 NAMES dscommon PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS2 NAMES libdscommon.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS2 "${DATASPACES_LIBS2}" CACHE INTERNAL "Internal variable")
-    find_library(DATASPACES_LIBS3 NAMES dart PATHS ${DATASPACES_LIBDIR})
+    find_library(DATASPACES_LIBS3 NAMES libdart.a PATHS ${DATASPACES_LIBDIR})
     set(DATASPACES_LIBS3 "${DATASPACES_LIBS3}" CACHE INTERNAL "Internal variable")
     if(DATASPACES_LIBS1 AND DATASPACES_LIBS2 AND DATASPACES_LIBS3)
-      set(DATASPACES_LIBS "${DATASPACES_LIBS1} ${DATASPACES_LIBS2} ${DATASPACES_LIBS3}")
-      set(DATASPACES_LIBS "${DATASPACES_LIBS}" CACHE STRING "")
+      set(DATASPACES_LIBS ${DATASPACES_LIBS1} ${DATASPACES_LIBS2} ${DATASPACES_LIBS3})
+      set(DATASPACES_LIBS ${DATASPACES_LIBS} CACHE STRING "")
       set(HAVE_DATASPACES 1)
 #      set(LIBS "${LIBS} ${DATASPACES_LIBS}")
      else()
@@ -458,11 +664,28 @@ if(HAVE_DATASPACES_H)
   endif()
 endif()
 
-# Define if you have the DIMES.
-set(HAVE_DIMES 0)
-
 # Define to 1 if you have the <dimes.h> header file.
 set(HAVE_DIMES_H 0)
+if(HAVE_DATASPACES_H)
+  set(HAVE_DIMES_H 1)
+endif()
+  
+# Define if you have the DIMES.
+set(HAVE_DIMES 0)
+if(HAVE_DATASPACES)
+  if(HAVE_INFINIBAND)
+    set(DIMES OFF CACHE BOOL "" FORCE)
+    message("DIMES currently NOT supported for Infiniband!")
+  elseif(HAVE_PORTALS)
+    set(DIMES OFF CACHE BOOL "" FORCE)
+    message("DIMES currently NOT supported for Cray Portals!")
+  else()
+    set(HAVE_DIMES 1)
+    set(DIMES_LIBS ${DATASPACES_LIBS})
+    set(DIMES_CFLAGS ${DATASPACES_CFLAGS})
+    set(DIMES_CPPFLAGS ${DATASPACES_CPPFLAGS})
+  endif()
+endif()
 
 # Define to 1 if you have the <dlfcn.h> header file.
 CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN_H)
@@ -476,6 +699,58 @@ CHECK_INCLUDE_FILES(dmalloc.h HAVE_DMALLOC_H)
 # Define to 1 if you have the `fdatasync' function.
 CHECK_FUNCTION_EXISTS(fdatasync HAVE_FDATASYNC)
 
+set(HAVE_FLEXPATH 0)
+if(FLEXPATH)
+  if(DEFINED FLEXPATH_INCDIR)
+    if("${FLEXPATH_INCDIR}" STREQUAL "")
+      set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
+    endif()
+  else()
+    set(FLEXPATH_INCDIR "$ENV{FLEXPATH_DIR}/include")
+  endif()
+  find_path(FLEXPATH_INCLUDE_DIR1 NAMES evpath.h PATHS ${FLEXPATH_INCDIR})
+  set(FLEXPATH_INCLUDE_DIR1 "${FLEXPATH_INCLUDE_DIR1}" CACHE INTERNAL "Internal variable")
+  find_path(FLEXPATH_INCLUDE_DIR2 NAMES ffs.h PATHS ${FLEXPATH_INCDIR})
+  set(FLEXPATH_INCLUDE_DIR2 "${FLEXPATH_INCLUDE_DIR2}" CACHE INTERNAL "Internal variable")
+  find_path(FLEXPATH_INCLUDE_DIR3 NAMES atl.h PATHS ${FLEXPATH_INCDIR})
+  set(FLEXPATH_INCLUDE_DIR3 "${FLEXPATH_INCLUDE_DIR3}" CACHE INTERNAL "Internal variable")
+  find_path(FLEXPATH_INCLUDE_DIR4 NAMES dill.h PATHS ${FLEXPATH_INCDIR})
+  set(FLEXPATH_INCLUDE_DIR4 "${FLEXPATH_INCLUDE_DIR4}" CACHE INTERNAL "Internal variable")
+  find_path(FLEXPATH_INCLUDE_DIR5 NAMES cercs_env.h PATHS ${FLEXPATH_INCDIR})
+  set(FLEXPATH_INCLUDE_DIR5 "${FLEXPATH_INCLUDE_DIR5}" CACHE INTERNAL "Internal variable")
+  if(FLEXPATH_INCLUDE_DIR1 AND FLEXPATH_INCLUDE_DIR2 AND FLEXPATH_INCLUDE_DIR3 AND FLEXPATH_INCLUDE_DIR4 AND FLEXPATH_INCLUDE_DIR5)
+    set(HAVE_FLEXPATH_H 1)
+    set(FLEXPATH_INCLUDE_DIR ${FLEXPATH_INCDIR}) 
+  endif()
+  if(DEFINED FLEXPATH_LIBDIR)
+    if("${FLEXPATH_LIBDIR}" STREQUAL "")
+      set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
+    endif()
+  else()
+    set(FLEXPATH_LIBDIR "$ENV{FLEXPATH_DIR}/lib")
+  endif()
+  find_library(FLEXPATH_LIBS1 NAMES libevpath.a PATHS ${FLEXPATH_LIBDIR})
+  set(FLEXPATH_LIBS1 "${FLEXPATH_LIBS1}" CACHE INTERNAL "Internal variable")
+  find_library(FLEXPATH_LIBS2 NAMES libffs.a PATHS ${FLEXPATH_LIBDIR})
+  set(FLEXPATH_LIBS2 "${FLEXPATH_LIBS2}" CACHE INTERNAL "Internal variable")
+  find_library(FLEXPATH_LIBS3 NAMES libatl.a PATHS ${FLEXPATH_LIBDIR})
+  set(FLEXPATH_LIBS3 "${FLEXPATH_LIBS3}" CACHE INTERNAL "Internal variable")
+  find_library(FLEXPATH_LIBS4 NAMES libdill.a PATHS ${FLEXPATH_LIBDIR})
+  set(FLEXPATH_LIBS4 "${FLEXPATH_LIBS4}" CACHE INTERNAL "Internal variable")
+  find_library(FLEXPATH_LIBS5 NAMES libcercs_env.a PATHS ${FLEXPATH_LIBDIR})
+  set(FLEXPATH_LIBS5 "${FLEXPATH_LIBS5}" CACHE INTERNAL "Internal variable")
+  if(FLEXPATH_LIBS1 AND FLEXPATH_LIBS2 AND FLEXPATH_LIBS3 AND FLEXPATH_LIBS4 AND FLEXPATH_LIBS5 AND HAVE_FLEXPATH_H)
+    set(HAVE_FLEXPATH 1)
+    set(FP_LIBS ${FLEXPATH_LIBS1} ${FLEXPATH_LIBS2} ${FLEXPATH_LIBS3} ${FLEXPATH_LIBS4} ${FLEXPATH_LIBS5})
+    set(FP_LIBS "${FP_LIBS}" CACHE STRING "")
+    set(FP_CPPFLAGS "-I${FLEXPATH_INCLUDE_DIR}")
+#    set(FP_CFLAGS ${FP_CPPFLAGS})
+#include_directories(${FLEXPATH_INCLUDE_DIR})
+  else()
+    set(FLEXPATH OFF CACHE BOOL "do not find supporting library" FORCE)
+  endif()
+endif()
+
 # Define to 1 if you have the `gettimeofday' function.
 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
 
@@ -489,7 +764,7 @@ if(BUILD_FORTRAN)
       message(STATUS "find MPI")
       set (HAVE_MPI 1)
 #      set(MPILIBS ${MPI_LIBRARIES})
-      include_directories(${MPI_INCLUDE_PATH})
+#include_directories(${MPI_INCLUDE_PATH})
 #      set(LIBS ${MPILIBS})
   endif(MPI_FOUND)
 else()
@@ -499,33 +774,23 @@ else()
       message(STATUS "find MPI")
       set (HAVE_MPI 1)
 #      set(MPILIBS ${MPI_LIBRARIES})
-#    set(MPILIBS "-lmpi")
-      include_directories(${MPI_INCLUDE_PATH})
+#    set(MPILIBS ${MPILIBS})
+#include_directories(${MPI_INCLUDE_PATH})
 #      set(LIBS ${MPILIBS})
   endif(MPI_FOUND)
 endif(BUILD_FORTRAN)
 
 # Define to 1 if you have the <hdf5.h> header file.
 if(HDF5)
-  find_library(HDF5_LIB1 NAMES hdf5_hl PATHS "${HDF5_DIR}/lib")
-  set(HDF5_LIB1 "${HDF5_LIB1}" CACHE INTERNAL "Internal variable")
-  find_library(HDF5_LIB2 NAMES hdf5 PATHS "${HDF5_DIR}/lib")
-  set(HDF5_LIB2 "${HDF5_LIB2}" CACHE INTERNAL "Internal variable")
-  find_library(HDF5_LIB3 NAMES sz PATHS "$ENV{SZIP_DIR}/lib")
-  set(HDF5_LIB3 "${HDF5_LIB3}" CACHE INTERNAL "Internal variable")
-  if(HDF5_LIB1 AND HDF5_LIB2 AND HDF5_LIB3)
-    set(HAVE_HDF5 1)
+   set(HAVE_HDF5 1)
 #    link_directories(${HDF5_DIR}/lib)
-#    link_directories($ENV{SZIP_DIR}/lib)
-    set(HDF5_LIBS ${HDF5_LIB1} ${HDF5_LIB2} ${HDF5_LIB3} -lz -lm CACHE STRING "")
-  else()
-    set(HAVE_HDF5 0)
-  endif()
+  set(HDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "")
+
   find_path(HDF5_INCLUDE_DIR hdf5.h ${HDF5_DIR}/include)
   if(HDF5_INCLUDE_DIR)
     set(HAVE_HDF5_H 1)
-    include_directories(${HDF5_INCLUDE_DIR})
-    set(CPPFLAGS "${CPPFLAGS} ${HDF5_FLAGS}")
+#    include_directories(${HDF5_INCLUDE_DIR})
+#    set(CPPFLAGS "${CPPFLAGS} ${HDF5_FLAGS}")
 #      set(LIBS "${LIBS} ${HDF5_LIBS}")
   else()
     set(HAVE_HDF5_H 0)
@@ -542,23 +807,20 @@ CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
 set(HAVE_LIBRT 0)
 
 # Define if you have LUSTRE.
-#if(LUSTRE)
-#  set(LUSTRE_DIR "" CACHE FILEPATH "")
-#  if(LUSTRE_DIR)
-#    find_library(LUSTRE_LIB_DIR NAMES lustre PATHS "${LUSTRE_DIR}/lib")
-#    if(LUSTRE_LIB_DIR AND ${LUSTRE_DIR}/include)
-#      message(STATUS "find LUSTRE library")
-#      set(HAVE_LUSTRE 1)
-#      set(LIBS "${LIBS} -llustreapi")
-#      set(LUSTRE_CPPFLAGS "-I${LUSTRE_DIR}/include")
-#      set(CPPFLAGS "${CPPFLAGS} ${LUSTRE_CPPFLAGS}")
-#    endif()
-#  else()
-#    set(HAVE_LUSTRE 0)
-#  endif(LUSTRE_DIR)
-#else()
-#  set(HAVE_LUSTRE 0)
-#endif(LUSTRE)
+if(LUSTRE)
+  set(LUSTRE_DIR "$ENV{LUSTRE_DIR}" CACHE STRING "")
+  if(LUSTRE_DIR)
+    find_library(LUSTRE_LIBS NAMES lustreapi PATHS "${LUSTRE_DIR}")
+    if(LUSTRE_LIBS)
+      message(STATUS "find LUSTRE library")
+      set(HAVE_LUSTRE 1)
+    endif()
+  else()
+    set(HAVE_LUSTRE 0)
+  endif(LUSTRE_DIR)
+else()
+  set(HAVE_LUSTRE 0)
+endif(LUSTRE)
 
 # Define to 1 if you have the <memory.h> header file.
 CHECK_INCLUDE_FILES(memory.h HAVE_MEMORY_H)
@@ -568,9 +830,9 @@ find_path(MXML_INCLUDE_DIR NAMES mxml.h PATHS ${MXML_DIR}/include)
 if(NOT MXML_INCLUDE_DIR-NOTFOUND)
   message(STATUS "find mxml header")
   set(HAVE_MXML_H 1)
-  include_directories(${MXML_INCLUDE_DIR})
+#include_directories(${MXML_INCLUDE_DIR})
   set(MXML_CPPFLAGS "-I${MXML_INCLUDE_DIR}")
-  set(CPPFLAGS "${CPPFLAGS} ${MXML_CPPFLAGS}")
+#  set(CPPFLAGS "${CPPFLAGS} ${MXML_CPPFLAGS}")
 endif(NOT MXML_INCLUDE_DIR-NOTFOUND)
 
 # Define if you have the MXML.
@@ -582,8 +844,8 @@ if(MXML_LIBS)
 endif()
 if(MXML_LIBS AND HAVE_MXML_H)
   set(HAVE_MXML 1)
-#  set(LIBS "${LIBS} -lmxml")
-  set(CPPFLAGS "${CPPFLAGS} ${MXML_CPPFLAGS}")
+#  set(LIBS "${LIBS} ${MXML_LIBS})
+#  set(CPPFLAGS "${CPPFLAGS} ${MXML_CPPFLAGS}")
 endif()
 
 # Define to 1 if you have the `nanosleep' function.
@@ -595,9 +857,9 @@ if(NETCDF)
   if(NETCDF_INCLUDE_DIR)
 # Define to 1 if you have the <netcdf.h> header file.
     set(HAVE_NETCDF_H 1)
-    include_directories(${NETCDF_INCLUDE_DIR})
+#    include_directories(${NETCDF_INCLUDE_DIR})
     set(NETCDF_CPPFLAGS "-I${NETCDF_INCLUDE_DIR}")
-    set(CPPFLAGS "${CPPFLAGS} ${NETCDF_CPPFLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${NETCDF_CPPFLAGS}")
   else()
     set(HAVE_NETCDF_H 0)
   endif()
@@ -606,22 +868,8 @@ else()
 endif()
 
 if(HAVE_NETCDF_H)
-  find_library(NETCDF_LIB1 NAMES netcdf PATHS ${NETCDF_DIR}/lib)
-  find_library(NETCDF_LIB2 NAMES hdf5_hl PATHS $ENV{SEQ_HDF5_DIR}/lib)
-  find_library(NETCDF_LIB3 NAMES hdf5 PATHS $ENV{SEQ_HDF5_DIR}/lib)
-  find_library(NETCDF_LIB4 NAMES sz PATHS $ENV{SZIP_DIR}/lib)
-  set(NETCDF_LIB1 "${NETCDF_LIB1}" CACHE INTERNAL "Internal variable")
-  set(NETCDF_LIB2 "${NETCDF_LIB2}" CACHE INTERNAL "Internal variable")
-  set(NETCDF_LIB3 "${NETCDF_LIB3}" CACHE INTERNAL "Internal variable")
-  set(NETCDF_LIB4 "${NETCDF_LIB4}" CACHE INTERNAL "Internal variable")
-  if(NETCDF_LIB1 AND NETCDF_LIB2 AND NETCDF_LIB3 AND NETCDF_LIB4)
-#    set(LIBS "${LIBS} ${NETCDF_LIBS}")
-    set(NETCDF_LIBS "${NETCDF_LIB1} ${NETCDF_LIB2} ${NETCDF_LIB3} ${NETCDF_LIB4}" CACHE STRING "")
-    set(NETCDF_LIBS "${NETCDF_LIBS} -lcurl")
-    set(HAVE_NETCDF 1)
-  else()
-    set(HAVE_NETCDF 0)
-  endif()
+  set(NETCDF_LIBS $ENV{SEQ_NC_LIBS} CACHE STRING "")
+  set(HAVE_NETCDF 1)
 else()
   set(HAVE_NETCDF 0)
 endif()
@@ -652,9 +900,9 @@ if(NC4PAR)
   find_path(NC4PAR_INCLUDE_DIR NAMES netcdf.h PATHS ${NC4PAR_DIR}/include)
   if(NC4PAR_INCLUDE_DIR)
     set(HAVE_NC4PAR_H 1)
-    include_directories(${NC4PAR_INCLUDE_DIR})
+#include_directories(${NC4PAR_INCLUDE_DIR})
     set(NC4PAR_CPPFLAGS "-I${NC4PAR_INCLUDE_DIR}")
-    set(CPPFLAGS "${CPPFLAGS} ${NC4PAR_CPPFLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${NC4PAR_CPPFLAGS}")
   else()
     set(HAVE_NC4PAR_H 0)
   endif()
@@ -663,22 +911,9 @@ else()
 endif()
 
 if(HAVE_NC4PAR_H)
-  find_library(NC4PAR_LIB1 NAMES netcdf PATHS ${NC4PAR_DIR}/lib)
-  find_library(NC4PAR_LIB2 NAMES hdf5_hl PATHS $ENV{PAR_HDF5_DIR}/lib)
-  find_library(NC4PAR_LIB3 NAMES hdf5 PATHS $ENV{PAR_HDF5_DIR}/lib)
-  find_library(NC4PAR_LIB4 NAMES sz PATHS $ENV{SZIP_DIR}/lib)
-  set(NC4PAR_LIB1 "${NETCDF_LIB1}" CACHE INTERNAL "Internal variable")
-  set(NC4PAR_LIB2 "${NETCDF_LIB2}" CACHE INTERNAL "Internal variable")
-  set(NC4PAR_LIB3 "${NETCDF_LIB3}" CACHE INTERNAL "Internal variable")
-  set(NC4PAR_LIB4 "${NETCDF_LIB4}" CACHE INTERNAL "Internal variable")
-  if(NC4PAR_LIB1 AND NC4PAR_LIB2 AND NC4PAR_LIB3 AND NC4PAR_LIB4)
-    set(NC4PAR_LIBS "${NC4PAR_LIB1} ${NC4PAR_LIB2} ${NC4PAR_LIB3} ${NC4PAR_LIB4}" CACHE STRING "")
+  set(NC4PAR_LIBS $ENV{PAR_NC_LIBS} CACHE STRING "")
 #    set(LIBS "${LIBS} ${NC4PAR_LIBS}")
-    set(NC4PAR_LIBS "${NC4PAR_LIBS} -lcurl") 
-    set(HAVE_NC4PAR 1)
-  else()
-    set(HAVE_NC4PAR 0)
-  endif()
+  set(HAVE_NC4PAR 1)
 else()
   set(HAVE_NC4PAR 0)
 endif()
@@ -720,29 +955,18 @@ endif()
 # Define if you have NSSI.
 set(HAVE_NSSI 0)
 
-
 # Define if you have the Pablo.
 set(HAVE_PABLO 0)
 
 # Define if you have PHDF5.
 if(PHDF5)
-  find_library(PHDF5_LIB1 NAMES hdf5_hl PATHS "${PHDF5_DIR}/lib")
-  find_library(PHDF5_LIB2 NAMES hdf5 PATHS "${PHDF5_DIR}/lib")
-  find_library(PHDF5_LIB3 NAMES sz PATHS "$ENV{SZIP_DIR}/lib") 
-  set(PHDF5_LIB1 "${PHDF5_LIB1}" CACHE INTERNAL "Internal variable")
-  set(PHDF5_LIB2 "${PHDF5_LIB2}" CACHE INTERNAL "Internal variable")
-  set(PHDF5_LIB3 "${PHDF5_LIB3}" CACHE INTERNAL "Internal variable")
-  if(PHDF5_LIB1 AND PHDF5_LIB2 AND PHDF5_LIB3)
-    set(PHDF5_LIBS ${PHDF5_LIB1} ${PHDF5_LIB2} ${PHDF5_LIB3} -lz -lm CACHE STRING "")
-    set(HAVE_PHDF5 1)
-  else()
-    set(HAVE_PHDF5 0)
-  endif()
+  set(PHDF5_LIBS $ENV{PAR_HDF5_LIBS} CACHE STRING "")
+  set(HAVE_PHDF5 1)
   find_path(PHDF5_INCLUDE_DIR hdf5.h ${PHDF5_DIR}/include)
   if(PHDF5_INCLUDE_DIR)
     set(HAVE_PHDF5_H 1)
-    include_directories(${PHDF5_INCLUDE_DIR})
-    set(CPPFLAGS "${CPPFLAGS} ${PHDF5_FLAGS}")
+#include_directories(${PHDF5_INCLUDE_DIR})
+#    set(CPPFLAGS "${CPPFLAGS} ${PHDF5_FLAGS}")
 #      set(LIBS "${LIBS} ${PHDF5_LIBS}")
   else()
     set(HAVE_PHDF5_H 0)
@@ -760,7 +984,7 @@ if(HAVE_PHDF5)
     set(HAVE_HDF5 1)
 #    include_directories(${PHDF5_INCLUDE_DIR})
     set(USE_PARALLEL_COMPILER 1)
-    set(CPPFLAGS "${CPPFLAGS} ${PHDF5_FLAGS}")
+#    set(CPPFLAGS "${CPPFLAGS} ${PHDF5_FLAGS}")
 #    set(LIBS "${LIBS} ${PHDF5_LIBS}")
     message(STATUS "Use PHDF5 for sequential HDF5 tools")
   endif()
@@ -842,6 +1066,113 @@ CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
 # Datatap is disabled
 set(NO_DATATAP 1)
 
+set(HAVE_ZLIB 0)
+set(HAVE_ZLIB_H 0)
+#CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
+#find_library(ZLIB_LIBS NAMES libz.a PATHS ${SZIP_DIR}/lib)
+#if(HAVE_ZLIB_H AND ZLIB_LIBS)
+
+set(HAVE_ZLIB 0)
+set(HAVE_ZLIB_H 0)
+find_package(ZLIB)
+if(ZLIB_FOUND)
+  set(HAVE_ZLIB 1)
+  set(HAVE_ZLIB_H 1)
+#include_directories(${ZLIB_INCLUDE_DIRS})
+  set(ZLIB_LIBS ${ZLIB_LIBRARIES})
+  set(ZLIB_CPPFLAGS "-I${ZLIB_INCLUDE_DIRS}")
+#  set(CPPFLAGS "${CPPFLAGS} ${ZLIB_CPPFLAGS}")
+  set(ZLIB ON CACHE BOOL "")
+else()
+   set(ZLIB OFF CACHE BOOL "")
+endif()
+
+set(HAVE_BZIP2 0)
+if(BZIP2)
+  find_path(BZIP2_INCLUDE_DIR NAMES bzlib.h PATHS ${BZIP2_DIR}/include)
+  if(BZIP2_INCLUDE_DIR)
+    set(HAVE_BZLIB_H 1)
+  endif()
+  find_library(BZIP2_LIBS NAMES bz2 PATHS ${BZIP2_DIR}/lib)
+  if(BZIP2_INCLUDE_DIR AND BZIP2_LIBS)
+    set(HAVE_BZIP2 1)
+    set(BZIP2_CPPFLAGS "-I${BZIP2_INCLUDE_DIR}")
+#include_directories(${BZIP2_INCLUDE_DIR})
+#    set(CPPFLAGS "${CPPFLAGS} ${BZIP2_CPPFLAGS}")
+  endif()
+endif()
+
+set(HAVE_SZIP 0)
+if(SZIP)
+  find_path(SZIP_INCLUDE_DIR NAMES szlib.h PATHS ${SZIP_DIR}/include)
+  if(SZIP_INCLUDE_DIR)
+    set(HAVE_SZLIB_H 1)
+  endif()
+  find_library(SZIP_LIBS NAMES libsz.a PATHS ${SZIP_DIR}/lib)
+  if(SZIP_INCLUDE_DIR AND SZIP_LIBS)
+    set(HAVE_SZIP 1)
+    set(SZIP_CPPFLAGS "-I${SZIP_INCLUDE_DIR}")
+#include_directories(${SZIP_INCLUDE_DIR})
+#    set(CPPFLAGS "${CPPFLAGS} ${SZIP_CPPFLAGS}")
+  endif()
+endif()
+
+set(HAVE_ISOBAR 0)
+if(ISOBAR)
+  find_path(ISOBAR_INCLUDE_DIR NAMES isobar.h PATHS ${ISOBAR_DIR}/include)
+  if(ISOBAR_INCLUDE_DIR)
+    set(HAVE_ISOBAR_H 1)
+  endif()
+  find_library(ISOBAR_LIBS NAMES isobar PATHS ${ISOBAR_DIR}/lib)
+  if(ISOBAR_INCLUDE_DIR AND ISOBAR_LIBS)
+    set(HAVE_ISOBAR 1)
+    set(ISOBAR_CPPFLAGS "-I${ISOBAR_INCLUDE_DIR}")
+#    set(CPPFLAGS "${CPPFLAGS} ${ISOBAR_CPPFLAGS}")
+#include_directories(${ISOBAR_INCLUDE_DIR})
+#    set(ISOBAR_CFLAGS ${ISOBAR_CPPFLAGS})
+  endif()
+endif()
+
+set(HAVE_APLOD 0)
+if(APLOD)
+  find_path(APLOD_INCLUDE_DIR NAMES aplod.h PATHS ${APLOD_DIR}/include)
+  if(APLOD_INCLUDE_DIR)
+    set(HAVE_APLOD_H 1)
+  endif()
+  find_library(APLOD_LIBS NAMES aplod PATHS ${APLOD_DIR}/lib)
+  if(APLOD_INCLUDE_DIR AND APLOD_LIBS)
+    set(HAVE_APLOD 1)
+    set(APLOD_CPPFLAGS "-I${APLOD_INCLUDE_DIR}")
+#    set(CPPFLAGS "${CPPFLAGS} ${APLOD_CPPFLAGS}")
+#include_directories(${APLOD_INCLUDE_DIR})
+#    set(APLOD_CFLAGS ${APLOD_CPPFLAGS})
+  endif()
+endif()
+
+set(HAVE_ALACRITY 0)
+if(ALACRITY)
+  find_path(ALACRITY_INCLUDE_DIR NAMES alacrity.h PATHS ${ALACRITY_DIR}/include)
+  find_library(ALACRITY_LIBS NAMES alacrity PATHS ${ALACRITY_DIR}/lib)
+  if(ALACRITY_INCLUDE_DIR AND ALACRITY_LIBS)
+    set(HAVE_ALACRITY 1)
+    set(ALACRITY_CPPFLAGS "-I${ALACRITY_INCLUDE_DIR}")
+#include_directories(${ALACRITY_INCLUDE_DIR})
+#    set(ALACRITY_CFLAGS ${ALACRITY_CPPFLAGS})
+  endif()
+endif()
+
+set(HAVE_NCSU_TIMER 0)
+if(NCSU_TIMER)
+  find_path(TIMER_INCLUDE_DIR NAMES timer.h PATHS ${NCSU_TIMER_DIR}/include)
+  find_library(TIMER_LIBS NAMES timer PATHS ${NCSU_TIMER_DIR}/lib)
+  if(TIMER_INCLUDE_DIR AND TIMER_LIBS)
+    set(HAVE_NCSU_TIMER 1)
+    set(TIMER_CPPFLAGS "-I${TIMER_INCLUDE_DIR}")
+#include_directories(${TIMER_INCLUDE_DIR})
+#    set(TIMER_CFLAGS ${TIMER_CPPFLAGS})
+  endif()
+endif()
+
 # Define to 1 if your C compiler doesn't accept -c and -o together.
 
 # Name of package
@@ -873,7 +1204,7 @@ set(VERSION_MAJOR 1)
 set(VERSION_MINOR 5)
 
 # Micro version number
-set(VERSION_MICRO 0)
+set(VERSION_MICRO 1)
 
 # Version number of package
 set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO})
@@ -895,7 +1226,7 @@ FortranCInterface_HEADER(${CMAKE_CURRENT_BINARY_DIR}/FC.h MACRO_NAMESPACE "FC_")
 #FortranCInterface_VERIFY(CXX)
 endif()
 ################################ end of Fortran processing ##############################
-
+find_library(M_LIBS libm.a)
 
 # Generate flags for adios lib creation which depends on the packages we found
 # ADIOSLIB_* for compiling libadios.a and libadiosf.a, and linking codes with those
@@ -907,204 +1238,330 @@ endif()
 # EXTRA flags are used for compiling adios stuff, which need not go into adios_config for user codes
 set(ADIOSLIB_EXTRA_CPPFLAGS "${MACRODEFFLAG}_FILE_OFFSET_BITS=64 ${MACRODEFFLAG}_LARGEFILE_SOURCE ${MACRODEFFLAG}_LARGEFILE64_SOURCE ${MACRODEFFLAG}_GNU_SOURCE")
 #message("${ADIOSLIB_EXTRA_CPPFLAGS}")
-set(ADIOSLIB_LDADD "-lm ${MXML_LIBS}")
+set(ADIOSLIB_LDADD ${M_LIBS} ${MXML_LIBS})
 set(ADIOSLIB_CFLAGS "")
 set(ADIOSLIB_CPPFLAGS "${MXML_CPPFLAGS}")
 #message("ADIOSLIB_CPPFLAGS is ${ADIOSLIB_CPPFLAGS}")
 set(ADIOSLIB_SEQ_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}")
 set(ADIOSLIB_SEQ_CFLAGS "")
-set(ADIOSLIB_SEQ_LDADD "-lm ${MXML_LIBS}")
+set(ADIOSLIB_SEQ_LDADD ${M_LIBS} ${MXML_LIBS})
 set(ADIOSLIB_INT_CPPFLAGS "${MACRODEFFLAG}_NOMPI ${MXML_CPPFLAGS}")
 set(ADIOSLIB_INT_CFLAGS "")
-set(ADIOSLIB_INT_LDADD "-lm ${MXML_LIBS}")
+set(ADIOSLIB_INT_LDADD ${M_LIBS} ${MXML_LIBS})
 set(ADIOSREADLIB_CPPFLAGS "")
 set(ADIOSREADLIB_CFLAGS "")
-set(ADIOSREADLIB_LDADD "-lm")
+set(ADIOSREADLIB_LDADD ${M_LIBS})
 set(ADIOSREADLIB_SEQ_CPPFLAGS "${MACRODEFFLAG}_NOMPI")
 set(ADIOSREADLIB_SEQ_CFLAGS "")
-set(ADIOSREADLIB_SEQ_LDADD "-lm")
+set(ADIOSREADLIB_SEQ_LDADD ${M_LIBS})
 
 if(NOT NO_DATATAP)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${DT_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${DT_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${DT_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${DT_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${DT_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${DT_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${DT_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${DT_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${DT_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${DT_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${DT_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${DT_LIBS})
 endif()
 
 if(HAVE_DATASPACES)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${DATASPACES_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${DATASPACES_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${DATASPACES_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${DATASPACES_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${DATASPACES_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${DATASPACES_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${DATASPACES_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${DATASPACES_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${DATASPACES_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${DATASPACES_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${DATASPACES_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${DATASPACES_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${DATASPACES_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${DATASPACES_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${DATASPACES_LIBS})
 endif()
 
 if(HAVE_DIMES)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${DIMES_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${DIMES_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${DIMES_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${DIMES_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${DIMES_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${DIMES_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${DIMES_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${DIMES_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${DIMES_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${DIMES_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${DIMES_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${DIMES_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${DIMES_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${DIMES_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${DIMES_LIBS})
 endif()
 
 if(HAVE_FLEXPATH)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${FP_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${FP_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${FP_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${FP_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${FP_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${FP_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${FP_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${FP_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${FP_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${FP_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${FP_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${FP_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${FP_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${FP_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${FP_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${FP_LIBS})
 endif(HAVE_FLEXPATH)
 
 if(HAVE_NSSI)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${NSSI_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${NSSI_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${NSSI_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${NSSI_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${NSSI_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${NSSI_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${NSSI_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${NSSI_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${MXML_CPPFLAGS} ${NSSI_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${MXML_CPPFLAGS} ${NSSI_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${MXML_LIBS} ${NSSI_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${MXML_LIBS} ${NSSI_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${MXML_CPPFLAGS} ${NSSI_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${MXML_CPPFLAGS} ${NSSI_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${MXML_LIBS} ${NSSI_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${MXML_LIBS} ${NSSI_LIBS})
 endif()
 
 if(HAVE_NC4PAR)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${NC4PAR_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${NC4PAR_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${NC4PAR_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${NC4PAR_LIBS})
 endif()
 
 if(HAVE_PHDF5)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${PHDF5_FLAGS}")
 #  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${PHDF5_FLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${PHDF5_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${PHDF5_LIBS})
 endif()
 
 if(HAVE_PORTALS)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${PORTALS_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${PORTALS_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${PORTALS_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${PORTALS_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${PORTALS_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${PORTALS_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${PORTALS_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${PORTALS_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${PORTALS_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${PORTALS_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${PORTALS_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${PORTALS_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${PORTALS_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${PORTALS_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${PORTALS_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${PORTALS_LIBS})
 endif()
 
 if(HAVE_INFINIBAND)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${INFINIBAND_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${INFINIBAND_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${INFINIBAND_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${INFINIBAND_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${INFINIBAND_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${INFINIBAND_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${INFINIBAND_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${INFINIBAND_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${INFINIBAND_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${INFINIBAND_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${INFINIBAND_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${INFINIBAND_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${INFINIBAND_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${INFINIBAND_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${INFINIBAND_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${INFINIBAND_LIBS})
 endif()
 
 if(HAVE_CRAY_PMI)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${CRAY_PMI_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${CRAY_PMI_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${CRAY_PMI_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${CRAY_PMI_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${CRAY_PMI_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${CRAY_PMI_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${CRAY_PMI_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${CRAY_PMI_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${CRAY_PMI_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${CRAY_PMI_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${CRAY_PMI_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${CRAY_PMI_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${CRAY_PMI_LIBS})
 endif()
 
 if(HAVE_CRAY_UGNI)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${CRAY_UGNI_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${CRAY_UGNI_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${CRAY_UGNI_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${CRAY_UGNI_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${CRAY_UGNI_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${CRAY_UGNI_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${CRAY_UGNI_CFLAGS}")
-  set(ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${CRAY_UGNI_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${CRAY_UGNI_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${CRAY_UGNI_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${CRAY_UGNI_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${CRAY_UGNI_LIBS})
 endif()
 
 if(HAVE_NETCDF)
   set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} ${NETCDF_CPPFLAGS}")
   set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${NETCDF_CFLAGS}")
-  set(ADIOSLIB_INT_LDADD "${ADIOSLIB_INT_LDADD} ${NETCDF_LIBS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${NETCDF_LIBS})
 endif()
 
 if(HAVE_HDF5)
   set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} ${HDF5_FLAGS}")
 #  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${HDF5_FLAGS}")
-  set(ADIOSLIB_INT_LDADD "${ADIOSLIB_INT_LDADD} ${HDF5_LIBS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${HDF5_LIBS})
 endif()
 
 if(HAVE_DMALLOC)
   set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${MACRODEFFLAG}DMALLOC ${DMALLOC_CPPFLAGS}")
   set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${DMALLOC_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${DMALLOC_LIBS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${DMALLOC_LIBS})
   set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${DMALLOC_CPPFLAGS}")
   set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${DMALLOC_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${DMALLOC_LIBS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${DMALLOC_LIBS})
   set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} ${DMALLOC_CPPFLAGS}")
   set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${DMALLOC_CFLAGS}")
-  set(ADIOSLIB_INT_LDADD "${ADIOSLIB_INT_LDADD} ${DMALLOC_LIBS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${DMALLOC_LIBS})
   set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} ${DMALLOC_CPPFLAGS}")
   set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${DMALLOC_CFLAGS}")
-  set(ADIOSREADLIB_LDADD "${ADIOSREADLIB_LDADD} ${DMALLOC_LIBS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${DMALLOC_LIBS})
   set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} ${DMALLOC_CPPFLAGS}")
   set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${DMALLOC_CFLAGS}")
-  set(ADIOSREADLIB_SEQ_LDADD "${ADIOSREADLIB_SEQ_LDADD} ${DMALLOC_LIBS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${DMALLOC_LIBS})
 endif()
 
 if(HAVE_LUSTRE)
-  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${LUSTRE_CPPFLAGS}")
-  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${LUSTRE_CFLAGS}")
-  set(ADIOSLIB_LDADD "${ADIOSLIB_LDADD} ${LUSTRE_LIBS}")
-  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${LUSTRE_CPPFLAGS}")
-  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${LUSTRE_CFLAGS}")
-  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS}")
+#  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} ${LUSTRE_CPPFLAGS}")
+#  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${LUSTRE_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${LUSTRE_LIBS})
+#  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} ${LUSTRE_CPPFLAGS}")
+#  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${LUSTRE_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS})
+endif()
+
+if(HAVE_ZLIB)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${ZLIB_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${ZLIB_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${ZLIB_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${ZLIB_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${ZLIB_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${ZLIB_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ZLIB_LIBS})
+endif()
+
+if(HAVE_BZIP2)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${BZIP2_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${BZIP2_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${BZIP2_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${BZIP2_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${BZIP2_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${BZIP2_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${BZIP2_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${BZIP2_LIBS})
+endif()
+
+if(HAVE_SZIP)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${SZIP_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${SZIP_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${SZIP_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${SZIP_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${SZIP_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${SZIP_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${SZIP_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${SZIP_LIBS})
+endif()
+
+if(HAVE_ISOBAR)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${ISOBAR_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${ISOBAR_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD "${ADIOSLIB_SEQ_LDADD} ${ISOBAR_LIBS}")
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${ISOBAR_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${ISOBAR_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${ISOBAR_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${ISOBAR_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ISOBAR_LIBS})
+endif()
+
+if(HAVE_APLOD)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${APLOD_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${APLOD_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${APLOD_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${APLOD_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${APLOD_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${APLOD_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${APLOD_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${APLOD_LIBS})
+endif()
+
+if(HAVE_ALACRITY)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${ALACRITY_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${ALACRITY_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${ALACRITY_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${ALACRITY_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${ALACRITY_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${ALACRITY_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${ALACRITY_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS})
+endif()
+
+if(HAVE_NCSU_TIMER)
+  set(ADIOSLIB_CPPFLAGS "${ADIOSLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
+  set(ADIOSLIB_CFLAGS "${ADIOSLIB_CFLAGS} ${TIMER_CFLAGS}")
+  set(ADIOSLIB_LDADD ${ADIOSLIB_LDADD} ${TIMER_LIBS})
+  set(ADIOSLIB_SEQ_CPPFLAGS "${ADIOSLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
+  set(ADIOSLIB_SEQ_CFLAGS "${ADIOSLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}")
+  set(ADIOSLIB_SEQ_LDADD ${ADIOSLIB_SEQ_LDADD} ${TIMER_LIBS})
+  set(ADIOSLIB_INT_CPPFLAGS "${ADIOSLIB_INT_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
+  set(ADIOSLIB_INT_CFLAGS "${ADIOSLIB_INT_CFLAGS} ${TIMER_CFLAGS}")
+  set(ADIOSLIB_INT_LDADD ${ADIOSLIB_INT_LDADD} ${TIMER_LIBS})
+  set(ADIOSREADLIB_CPPFLAGS "${ADIOSREADLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
+  set(ADIOSREADLIB_CFLAGS "${ADIOSREADLIB_CFLAGS} ${TIMER_CFLAGS}")
+  set(ADIOSREADLIB_LDADD ${ADIOSREADLIB_LDADD} ${TIMER_LIBS})
+  set(ADIOSREADLIB_SEQ_CPPFLAGS "${ADIOSREADLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}")
+  set(ADIOSREADLIB_SEQ_CFLAGS "${ADIOSREADLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}")
+  set(ADIOSREADLIB_SEQ_LDADD ${ADIOSREADLIB_SEQ_LDADD} ${TIMER_LIBS})
 endif()
 
 #set(NSSI_SERVER_LIBS "")
@@ -1179,3 +1636,222 @@ add_subdirectory(tests)
 add_subdirectory(examples)
 #set_source_files_properties
 ############################### end of top CMakeLists.txt ###############################
+
+message("*********************************")
+message("${PACKAGE} configured as follows:")
+message("*********************************")
+message("")
+if(BUILD_WRITE)
+  message("  - Build both the Write and Read libraries")
+else()
+  message("  - Build only the Read libraries")
+endif()
+if(BUILD_FORTRAN)
+  message("  - Build both the C and Fortran libraries")
+else()
+  message("  - Build only the C libraries (no Fortran)")
+endif()
+message("")
+message("  - General Compile FLAGS")
+message("      - CC  = $ENV{CC}")
+message("      - CXX = $ENV{CXX}")
+message("      - FC  = $ENV{FC}")
+message("      - CPPFLAGS = ${CPPFLAGS}")
+message("      - CFLAGS   = ${CFLAGS}")
+message("      - CXXFLAGS = ${CXXFLAGS}")
+message("      - FCFLAGS  = ${FCFLAGS}")
+message("      - LIBS     = ${LIBS}")
+message("      - MPILIBS = ${MPILIBS}")
+if(SKEL_HAVE_ADIOS_TIMING)
+ message("  - Skel Timing Mechanism Enabled")
+else()
+  message("  - Skel Timing Mechanism Disabled")
+endif()
+if(HAVE_MXML)
+  message("  - MXML")
+  message("      - MXML_CFLAGS = ${MXML_CFLAGS}")
+  message("      - MXML_CPPFLAGS = ${MXML_CPPFLAGS}")
+  message("      - MXML_LIBS = ${MXML_LIBS}")
+  message("")
+else()
+  message("")
+  message("  - No MXML")
+endif()
+if(HAVE_LUSTRE)
+  message("  - LUSTRE")
+  message("      - LUSTRE_CFLAGS = ${LUSTRE_CFLAGS}")
+  message("      - LUSTRE_CPPFLAGS = ${LUSTRE_CPPFLAGS}")
+  message("      - LUSTRE_LIBS = ${LUSTRE_LIBS}")
+  message("")
+else()
+  message("  - No LUSTRE")
+  message("")
+endif()
+message("  - Networking library for staging methods:")
+if(HAVE_PORTALS)
+  message("    - PORTALS")
+  message("      - PORTALS_CFLAGS = ${PORTALS_CFLAGS}")
+  message("      - PORTALS_CPPFLAGS = ${PORTALS_CPPFLAGS}")
+  message("      - PORTALS_LIBS = ${PORTALS_LIBS}")
+  message("")
+endif()
+if(HAVE_INFINIBAND)
+  message("    - INFINIBAND")
+  message("      - INFINIBAND_CFLAGS = ${INFINIBAND_CFLAGS}")
+  message("      - INFINIBAND_CPPFLAGS = ${INFINIBAND_CPPFLAGS}")
+  message("      - INFINIBAND_LIBS = ${INFINIBAND_LIBS}")
+  message("")
+endif()
+if(HAVE_CRAY_PMI AND HAVE_CRAY_UGNI)
+  message("    - CRAY uGNI with PMI")
+  message("      - CFLAGS = ${CRAY_PMI_CFLAGS} ${CRAY_UGNI_CFLAGS}")
+  message("      - CPPFLAGS = ${CRAY_PMI_CPPFLAGS} ${CRAY_UGNI_CPPFLAGS}")
+  message("      - LIBS = ${CRAY_PMI_LIBS} ${CRAY_UGNI_LIBS}")
+  message("")
+endif()
+if(HAVE_DCMF)
+  message("    - IBM DCMF")
+  message("      - DCMF_CFLAGS = ${DCMF_CFLAGS}")
+  message("      - DCMF_CPPFLAGS = ${DCMF_CPPFLAGS}")
+  message("      - DCMF_LIBS = ${DCMF_LIBS}")
+  message("")
+endif()
+if(HAVE_DATASPACES)
+  message("  - DATASPACES transport method")
+  message("      - DATASPACES_CFLAGS = ${DATASPACES_CFLAGS}")
+  message("      - DATASPACES_CPPFLAGS = ${DATASPACES_CPPFLAGS}")
+  message("      - DATASPACES_LIBS = ${DATASPACES_LIBS}")
+  message("")
+else()
+  message("  - No DATASPACES to build DATASPACES transport method")
+  message("")
+endif()
+if(HAVE_DIMES)
+  message("  - DIMES transport method")
+  message("      - DIMES_CFLAGS = ${DIMES_CFLAGS}")
+  message("      - DIMES_CPPFLAGS = ${DIMES_CPPFLAGS}")
+  message("      - DIMES_LIBS = ${DIMES_LIBS}")
+  message("")
+else()
+  message("  - No DIMES to build DIMES transport method")
+  message("")
+endif()
+if(HAVE_PHDF5)
+  message("  - PHDF5")
+  message("      - PHDF5_CFLAGS = ${PHDF5_CFLAGS}")
+  message("      - PHDF5_CPPFLAGS = ${PHDF5_FLAGS}")
+  message("      - PHDF5_LIBS = ${PHDF5_LIBS}")
+  message("")
+else()
+  message("  - No PHDF5 to build PHDF5 transport method")
+  message("")
+endif()
+if(HAVE_HDF5)
+  message("  - HDF5")
+  message("      - HDF5_CFLAGS = ${HDF5_CFLAGS}")
+  message("      - HDF5_FLAGS = ${HDF5_FLAGS}")
+  message("      - HDF5_LIBS = ${HDF5_LIBS}")
+  message("")
+else()
+  message("  - No HDF5")
+  message("")
+endif()
+if(HAVE_NC4PAR)
+  message("  - NetCDF 4 Parallel")
+  message("      - NC4PAR_CFLAGS = ${NC4PAR_CFLAGS}")
+  message("      - NC4PAR_CPPFLAGS = ${NC4PAR_CPPFLAGS}")
+  message("      - NC4PAR_LIBS = ${NC4PAR_LIBS}")
+  message("")
+else()
+  message("  - No NETCDF 4 Parallel to build NC4 transport method")
+  message("")
+endif()
+if(HAVE_NETCDF)
+  message("  - NetCDF")
+  message("      - NETCDF_CFLAGS = ${NETCDF_CFLAGS}")
+  message("      - NETCDF_CPPFLAGS = ${NETCDF_CPPFLAGS}")
+  message("      - NETCDF_LIBS = ${NETCDF_LIBS}")
+  message("")
+else()
+  message("  - No NSSI to build NSSI transport method")
+  message("")
+endif()
+if(HAVE_FLEXPATH)
+  message("  - FLEXPATH")
+  message("      - FP_CFLAGS = ${FP_CFLAGS}")
+  message("      - FP_CPPFLAGS = ${FP_CPPFLAGS}")
+  message("      - FP_LIBS = ${FP_LIBS}")
+  message("")
+else()
+  message("  - No FLEXPATH to build FLEXPATH transport method")
+endif()
+if(HAVE_ZLIB)
+  message("  - ZLIB")
+  message("      - ZLIB_CFLAGS = ${ZLIB_CFLAGS}")
+  message("      - ZLIB_CPPFLAGS = ${ZLIB_CPPFLAGS}")
+  message("      - ZLIB_LIBS = ${ZLIB_LIBS}")
+  message("")
+else()
+  message("  - No ZLIB to build ZLIB transform method")
+endif()
+if(HAVE_BZIP2)
+  message("  - BZIP2")
+  message("      - BZIP2_CFLAGS = ${BZIP2_CFLAGS}")
+  message("      - BZIP2_CPPFLAGS = ${BZIP2_CPPFLAGS}")
+  message("      - BZIP2_LIBS = ${BZIP2_LIBS}")
+  message("")
+else()
+  message("  - No BZIP2 to build BZIP2 transform method")
+endif()
+if(HAVE_SZIP)
+  message("  - SZIP")
+  message("      - SZIP_CFLAGS = ${SZIP_CFLAGS}")
+  message("      - SZIP_CPPFLAGS = ${SZIP_CPPFLAGS}")
+  message("      - SZIP_LIBS = ${SZIP_LIBS}")
+  message("")
+else()
+  message("  - No SZIP to build SZIP transform method")
+endif()
+if(HAVE_ISOBAR)
+  message("  - ISOBAR")
+  message("      - ISOBAR_CFLAGS = ${ISOBAR_CFLAGS}")
+  message("      - ISOBAR_CPPFLAGS = ${ISOBAR_CPPFLAGS}")
+  message("      - ISOBAR_LIBS = ${ISOBAR_LIBS}")
+  message("")
+else()
+  message("  - No ISOBAR to build ISOBAR transform method")
+endif()
+if(HAVE_APLOD)
+  message("  - APLOD")
+  message("      - APLOD_CFLAGS = ${APLOD_CFLAGS}")
+  message("      - APLOD_CPPFLAGS = ${APLOD_CPPFLAGS}")
+  message("      - APLOD_LIBS = ${APLOD_LIBS}")
+message("")
+else()
+  message("  - No APLOD to build APLOD transform method")
+endif()
+if(HAVE_ALACRITY)
+  message("  - ALACRITY")
+  message("      - ALACRITY_CFLAGS = ${ALACRITY_CFLAGS}")
+  message("      - ALACRITY_CPPFLAGS = ${ALACRITY_CPPFLAGS}")
+  message("      - ALACRITY_LIBS = ${ALACRITY_LIBS}")
+  message("")
+else()
+  message("  - No ALACRITY to build ALACRITY transform method")
+endif()
+if(HAVE_NCSU_TIMER)
+  message("  - NCSU timer lib")
+  message("      - TIMER_CFLAGS = ${TIMER_CFLAGS}")
+  message("      - TIMER_CPPFLAGS = ${TIMER_CPPFLAGS}")
+  message("      - TIMER_LIBS = ${TIMER_LIBS}")
+message("")
+else()
+  message("  - No NCSU timer lib")
+endif()
+if(HAVE_BGQ)
+  message("  - BGQ METHOD is enabled")
+else()
+  message("  - BGQ METHOD is disabled")
+endif()
+message("")
+message("  - Install path = ${prefix}")
diff --git a/Makefile.in b/Makefile.in
index c96e994..fc4f662 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -47,7 +47,11 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	config/config.guess config/config.sub config/depcomp \
 	config/install-sh config/ltmain.sh config/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -57,14 +61,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -175,12 +183,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -243,6 +260,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -315,7 +335,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/NEWS b/NEWS
index b4a81a6..b3216c0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,22 @@
+1.6.0 Release Dec 2013
+    - Transformations of data supported in file-based I/O
+      - lossless compression (zlib, bzip, szip)
+      - lossy compression (ISOBAR)
+      - precision-level-of-detail encoding (APLOD)
+    - Changes to Write API:
+      - variables are identified by full path at writing
+      - fix: all int functions return 0 as OK and !=0 on error
+    - Changes to Read API:
+      - Read API extensions to get information about the 
+        visualization meshes defined in a file
+      - leading / in path names is not enforced
+    - New I/O method for Bluegene/Q called "BGQ"
+        configure with the option --with-bgq
+    - Removed performance bottleneck in metadata operations when 
+      writing/reading thousands of variables. 
+    - fix: one can build ADIOS separately from the source with automake
+
+
 1.5.0 Release June 2013
     - Changes to Write API: 
       - adios_init() and adios_init_noxml() has MPI_Comm argument
diff --git a/README b/README
index a3419e3..257f1e4 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
-ADIOS 1.3 Release
------------------
+ADIOS (Adaptable I/O System) 
+----------------------------
 
 Please look at the examples/ directory for the example codes on how to 
 use ADIOS. If you need more detailed information, please, read the User's 
diff --git a/TODO b/TODO
index 03b242f..f09a464 100644
--- a/TODO
+++ b/TODO
@@ -1,19 +1,22 @@
+EXAMPLES
+========
+- remove old crappy examples, move in new ones from the new tutorials
+
 WRITE
 =====
 
 - bring back "write=no" into XML tag to skip some variables
-- time-reset function for appending data to the same timestep ("extend" mode)
-- adios_init() should have a communicator parameter
 - complete error logging
+- undef value (also func: adios_undef_get(), adios_undef_set())
+- each method should process parameters from PairStruct, not from string
+
 
 READ
 ====
+- peek_ahead function to support paraview
 - chunking: 
   - support memory limit
 
-- scalar written over timesteps (need to support old-fashioned way,
-i.e., scalar dimension is tagged with "time-index".)
-
 - missing data blocks when read should contain undef values
 
 - simple BP reader
@@ -28,20 +31,34 @@ i.e., scalar dimension is tagged with "time-index".)
 
 TEST
 =====
-The statistics of scalars written over multiple timestep. Particularly we 
+- Test ISOBAR
+- The statistics of scalars written over multiple timestep. Particularly we 
 need to test adios_complex and adios_double_complex scalars.
+- Tests for schema
+- Test BP reader without user-allocated memory
 
 BUILD
 =====
-- shared libraries (request by Numeca)
+- shared libraries (request by Numeca and ETH)
 - cross-compile support
-- separate source from build 
 - add version defines into adios public header (request by Michele Martone)
 
 MANUAL
 =====
 - developer's manual
 
+PYTHON WRAPPER
+==============
+- example codes
+- add to manual
 
+JAVA WRAPPER
+============
+- example codes
+- add to manual
 
-
+OTHER
+=====
+- check/fix or throw away bp2ascii
+- bpls
+  - add back sorting of names (needs to copy namelist because cannot sort fp->var_namelist
diff --git a/aclocal.m4 b/aclocal.m4
index 066344e..898c106 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -8973,6 +8973,10 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([config/ac_alacrity.m4])
+m4_include([config/ac_aplod.m4])
+m4_include([config/ac_bgq.m4])
+m4_include([config/ac_bzip2.m4])
 m4_include([config/ac_cray_pmi.m4])
 m4_include([config/ac_cray_ugni.m4])
 m4_include([config/ac_dataspaces.m4])
@@ -8983,14 +8987,18 @@ m4_include([config/ac_dmalloc.m4])
 m4_include([config/ac_flexpath.m4])
 m4_include([config/ac_hdf5.m4])
 m4_include([config/ac_infiniband.m4])
+m4_include([config/ac_isobar.m4])
 m4_include([config/ac_lustre.m4])
 m4_include([config/ac_mxml.m4])
 m4_include([config/ac_nc4par.m4])
+m4_include([config/ac_ncsu_timer.m4])
 m4_include([config/ac_netcdf.m4])
 m4_include([config/ac_nssi.m4])
 m4_include([config/ac_pablo.m4])
 m4_include([config/ac_phdf5.m4])
 m4_include([config/ac_portals.m4])
+m4_include([config/ac_szip.m4])
+m4_include([config/ac_zlib.m4])
 m4_include([config/acx_mpi.m4])
 m4_include([config/acx_pthread.m4])
 m4_include([config/cercs.m4])
diff --git a/cmake_init b/cmake_init
index 2cf8956..84445d5 100755
--- a/cmake_init
+++ b/cmake_init
@@ -33,52 +33,48 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     #   parallel hdf5 (for PHDF5 method)
     module load hdf5/1.8.10
     export SEQ_HDF5_DIR=$HDF5_DIR
+    export SEQ_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
     module unload hdf5
     module load szip
+    module load bzip2
     module load hdf5/1.8.10_par
     export PAR_HDF5_DIR=$HDF5_DIR
-    module unload hdf5
+    export PAR_HDF5_LIBS="-L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+    module unload hdf5/1.8.10_par
 # start of  Seq. NetCDF 4 
-#    module load netcdf/4.1.3
-#    export SEQ_NC_DIR=$NETCDF_DIR
-#    module load hdf5/1.8.10
-#    export SEQ_HDF5_DIR=$HDF5_DIR
-#    module unload hdf5/1.8.10
-#    module load szip/2.1
-#    export SZIP_DIR=$SZIP_DIR
-#    module unload netcdf
+    module load netcdf/4.1.3
+    export SEQ_NC_DIR=$NETCDF_DIR
+    export SEQ_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi12.8/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi12.8/lib -L/sw/sith/szip/2.1/rhel6_pgi12.8/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
+    module unload netcdf
 # end of  Seq. NetCDF 4
 # start of Parallel NetCDF 4
-#    module load netcdf/4.1.3_par
-#    export PAR_NC_DIR=$NETCDF_DIR
-#    module load hdf5/1.8.10_par
-#    export PAR_HDF5_DIR=$HDF5_DIR
-#    module unload hdf5/1.8.10_par
-#    export SZIP_DIR="/sw/sith/szip/2.1/rhel6_pgi12.8"
+    module load netcdf/4.1.3_par
+    export PAR_NC_DIR=$NETCDF_DIR
+    export PAR_NC_LIBS="-L/sw/sith/netcdf/4.1.3/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/hdf5/1.8.10/rhel6_pgi13.4_ompi1.6.3/lib -L/sw/sith/szip/2.1/rhel6_pgi13.4/lib -lnetcdf -lcurl -lhdf5_hl -lhdf5 -lsz -lz -lm"
 #    module unload netcdf
 # end of Parallel NetCDF 4 
+    export LUSTRE_DIR="/usr/lib64"
     export BUILD_WRITE=ON
     export BUILD_FORTRAN=ON
     export skel_timing=ON
+    export research_transports=ON
     export CC=mpicc
     export CXX=mpiCC
     export FC=mpif90
     export INSTALL_PREFIX="/ccs/home/jya/ADIOS/sith.$TARGET"
+    export APLOD_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
+    export ISOBAR_DIR="/ccs/proj/e2e/ncsu/sith.gnu"
+    export ALACRITY_DIR
+    export NCSU_TIMER_DIR
     if [ "$TARGET" == "pgi" ]; then
-#        export CC=pgcc
-#        export CXX=pgCC
-#        export FC=pgf90
         export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "gnu" ]; then
-#        export CC=gcc
-#        export CXX=g++
-#        export FC=gfortran
         export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
     elif [ "$TARGET" == "intel" ]; then
-#        export CC=icc
-#        export CXX=icpc
-#        export FC=ifort
         export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/sith/$TARGET"
+        export FLEXPATH_DIR="/ccs/proj/e2e/chaos/sith/$TARGET"
     else
         echo "TARGET must be pgi or gnu or intel"
         exit 1
@@ -86,26 +82,6 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-g -fPIC" 
-#    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/sith.$TARGET \
-#        --enable-dependency-tracking \
-#        --enable-research-transports \
-#        --with-lustre=/usr/lib64 \
-#        $WITHDART 
-        #--with-hdf5=${SEQ_HDF5_DIR} \
-        #--with-hdf5-libs="${SEQ_HDF5_CLIB}" \
-        #--with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
-        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
-        #--enable-shared --disable-static
-        #--without-datatap #--without-infiniband
-        #--with-phdf5=${PAR_HDF5_DIR} \
-        #--with-phdf5-libs="${PAR_HDF5_CLIB}" \
-        #--with-netcdf=${SEQ_NC_DIR} \
-        #--with-netcdf-libs="${SEQ_NC_CLIB}" \
-        #--with-nc4par=${PAR_NC_DIR} \
-        #--with-nc4par-libs="${PAR_NC_CLIB}" \
-        #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
-        #--with-datatap=/ccs/home/habbasi/work/ewok/
-        #--enable-datatap=ib
 
 elif [ `hostname | cut -c 1-4` == "yona" ]; then
 
@@ -286,58 +262,39 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #module load szip
         #module load xt-papi
         module load mxml
-	module load hdf5/1.8.8
-	export SEQ_HDF5_DIR=$HDF5_DIR
-	module unload hdf5/1.8.8
-	module load hdf5-parallel/1.8.8
-	export PAR_HDF5_DIR=$HDF5_DIR
-	module unload hdf5-parallel/1.8.8
+#        module load hdf5/1.8.11
+#    	export SEQ_HDF5_DIR=$HDF5_DIR
+#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+#    	module unload hdf5/1.8.11
+#    	module load hdf5-parallel/1.8.11
+#    	export PAR_HDF5_DIR=$HDF5_DIR
+#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+#    	module unload hdf5-parallel/1.8.11
 # start of Seq. NetCDF 4 
-	module load netcdf/4.2.0
-	export SEQ_NC_DIR=$NETCDF_DIR
-        module load hdf5/1.8.8
-        export SEQ_HDF5_DIR=$HDF5_DIR
-        module unload hdf5/1.8.8
-        module load szip/2.1
-        export SZIP_DIR=$SZIP_DIR
-	module unload netcdf
+#    	module load netcdf/4.2.0
+#    	export SEQ_NC_DIR=$NETCDF_DIR
+#    	export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.2.0/pgi/119/lib -lnetcdf"
+#    	module unload netcdf/4.2.0
 #end of Seq. NetCDF 4 
 #start of Parallel NetCDF 4
-	module load netcdf-hdf5parallel/4.2.0
-	export PAR_NC_DIR=$NETCDF_DIR
-	module unload netcdf
-        module load hdf5-parallel/1.8.8
-        export PAR_HDF5_DIR=$HDF5_DIR
-        module unload hdf5-parallel/1.8.8
-#        module load szip/2.1
-#        export SZIP_DIR=$SZIP_DIR
+    	module load netcdf-hdf5parallel/4.2.0
+    	export PAR_NC_DIR=$NETCDF_DIR
+    	export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.2.0/pgi/119/lib -lnetcdf"
+     	module unload netcdf
 #endof Parallel NetCDF 4 
-	# use the two lines below for openmpi
+    	# use the two lines below for openmpi
         export CRAY_UGNI_DIR="/opt/cray/ugni/4.0-1.0401.5928.9.5.gem"
         export CRAY_PMI_DIR="/opt/cray/pmi/4.0.1-1.0000.9421.73.3.gem"
-	export BUILD_WRITE=ON
-	export BUILD_FORTRAN=ON
-	export CC=cc
+        export LUSTRE_DIR="/usr/lib64"
+    	export BUILD_WRITE=ON
+    	export BUILD_FORTRAN=ON
+    	export CC=cc
         export FC=ftn
         export CXX=CC
-        export CFLAGS="-g -fPIC" 
-	export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
-	export skel_timing=ON
-	export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET"
-#          ./configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
-#            --host=titan --host_alias=titan  \
-#            --enable-dependency-tracking \
-            #--with-hdf5=/opt/cray/hdf5/1.8.7/pgi/109 \
-            #--with-phdf5=/opt/cray/hdf5-parallel/1.8.7/pgi/109 \
-#            --with-lustre=/opt/xt-lustre-ss/2.2_1.6.5/usr
-#            --with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.$TARGET
-#            --enable-research-transports \
-#            --with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
-#            --with-nc4par=/opt/cray/netcdf-hdf5parallel/4.0.1.3/netcdf-hdf5parallel-$TARGET \
-#            --with-phdf5=/opt/cray/hdf5-parallel/1.8.4.1/hdf5-parallel-$TARGET \
-#            --with-hdf5=/sw/xt5/hdf5/1.8.2/cnl2.1_gnu7.2.3 \
-#            --with-hdf5=/sw/xt5/hdf5/1.8.2/cnl2.1_gnu4.2.0 \
-#            --with-mxml=/ccs/proj/e2e/pnorbert/mxml.xt5.$TARGET \
+        export CFLAGS="-g -fPIC -O0" 
+    	export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET-1.3.0"
+    	export skel_timing=ON
+    	export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET"
             
     else 
     
@@ -346,9 +303,6 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         ##########################
         TARGET=pgi
         echo "Configure on TITAN (XK7) including staging methods for $TARGET env."
-        export CC=cc
-        export FC=ftn
-        export CXX=CC
         source /opt/modules/default/etc/modules.sh
         module unload szip
         module unload hdf5
@@ -364,17 +318,14 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #module unload xtpe-quadcore
         module load PrgEnv-$TARGET
         module swap xtpe-interlagos xtpe-istanbul
-	#module load xtpe-istanbul
-	#module load dataspaces/1.0.0
+	    #module load xtpe-istanbul
         unset EXTRA_LIBS
         unset LDFLAGS
-	export skel_timing=ON
-        export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET"
         if [ "$TARGET" == "pgi" ]; then
             #module swap pgi pgi/11.8.0
             # NSSI needs -pgcpplibs flag 
             export LDFLAGS="-pgcpplibs" 
-            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET"
+            export DATASPACES_DIR="/ccs/proj/e2e/dataspaces/titan/$TARGET-1.3.0"
         elif [ "$TARGET" == "gnu" ]; then
             # NSSI needs libstdc++
             export EXTRA_LIBS="/opt/gcc/4.7.2/snos/lib64/libstdc++.a"
@@ -386,61 +337,96 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
      
         # NOTE hdf5-parallel module does not work with C++ compiler
 #start of seq and parallel hdf5
-        module load hdf5/1.8.8
-        export SEQ_HDF5_DIR=$HDF5_DIR
-        module unload hdf5/1.8.8
-        module load szip
-        module load hdf5-parallel/1.8.8
-        export PAR_HDF5_DIR=$HDF5_DIR
-        module unload hdf5-paralle/1.8.8
+#        module unload hdf5
+#        module load hdf5/1.8.8
+#        export SEQ_HDF5_DIR=$HDF5_DIR
+#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.8/pgi/119/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.10.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+#	module unload hdf5/1.8.8
+#        module load hdf5-parallel/1.8.8
+#        export PAR_HDF5_DIR=$HDF5_DIR
+#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.8/pgi/119/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.10.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm "
+#        module unload hdf5-paralle/1.8.8
 #end of hdf5
         #module load papi
         module load mxml
+#        module load hdf5/1.8.11
+#       export SEQ_HDF5_DIR=$HDF5_DIR
+#        export SEQ_HDF5_LIBS="-L/opt/cray/hdf5/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+#       module unload hdf5/1.8.11
+#       module load hdf5-parallel/1.8.11
+#       export PAR_HDF5_DIR=$HDF5_DIR
+#        export PAR_HDF5_LIBS="-L/opt/cray/hdf5-parallel/1.8.11/PGI/121/lib -L/sw/xk6/szip/2.1/sles11.1_pgi12.4.0/lib -lhdf5_hl -lhdf5 -lsz -lz -lm"
+#       module unload hdf5-parallel/1.8.11
 # start of Seq. NetCDF 4 
-#        module load netcdf/4.2.0
-#        export SEQ_NC_DIR=$NETCDF_DIR
-#        module load hdf5/1.8.8
-#        export SEQ_HDF5_DIR=$HDF5_DIR
-#        module unload hdf5/1.8.8
-#        module load szip/2.1
-#        export SZIP_DIR=$SZIP_DIR
-#        module unload netcdf
+#       module load netcdf/4.2.0
+#       export SEQ_NC_DIR=$NETCDF_DIR
+#       export SEQ_NC_LIBS="-L/opt/cray/netcdf/4.2.0/pgi/119/lib -lnetcdf"
+#       module unload netcdf/4.2.0
 #end of Seq. NetCDF 4 
 #start of Parallel NetCDF 4
-#        module load netcdf-hdf5parallel/4.2.0
-#        export PAR_NC_DIR=$NETCDF_DIR
-#        module unload netcdf-hdf5parallel/4.2.0
-#        module load hdf5-parallel/1.8.8
-#        export PAR_HDF5_DIR=$HDF5_DIR
-#        module unload hdf5-parallel/1.8.8
-#        module load szip/2.1
-#        export SZIP_DIR=$SZIP_DIR
+        module load netcdf-hdf5parallel/4.2.0
+        export PAR_NC_DIR=$NETCDF_DIR
+        export PAR_NC_LIBS="-L/opt/cray/netcdf-hdf5parallel/4.2.0/pgi/119/lib -lnetcdf"
+        module unload netcdf
 #endof Parallel NetCDF 4 
-
         # use the two lines below for openmpi
-        #export CC=mpicc
-        #export FC=mpif90
-        export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DDART_DO_VERSIONING" 
-        export CFLAGS="-fPIC -g -O0" 
-        #./configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
-#        ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/titan.$TARGET \
-#        --enable-dependency-tracking \
-#        --with-cray-pmi=/opt/cray/pmi/default \
-#        --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
-#        --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
-#        --with-dataspaces=$DATASPACES_DIR 
-        #--with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
-        #--with-hdf5=/sw/xt5/hdf5/1.8.2/cnl2.1_gnu4.2.0 \
-        #--with-nc4par=/opt/cray/netcdf-hdf5parallel/4.0.1.3/netcdf-hdf5parallel-$TARGET \
-        #--with-phdf5=/opt/cray/hdf5-parallel/1.8.4.1/hdf5-parallel-$TARGET \
-        #--with-dimes=/ccs/proj/e2e/pnorbert/spaces/$TARGET
-        #--with-nssi=/ccs/proj/e2e/pnorbert/nssi/xt5/$TARGET \
-        #--with-datatap=/ccs/home/zf2/work/pe.$TARGET \
-        #--with-datatap=/ccs/proj/e2e/pnorbert/datatap/xt5/$TARGET \
-    
+        export CRAY_UGNI_DIR="/opt/cray/ugni/4.0-1.0401.5928.9.5.gem"
+        export CRAY_PMI_DIR="/opt/cray/pmi/4.0.1-1.0000.9421.73.3.gem"
+        export LUSTRE_DIR="/usr/lib64"
+        export BUILD_WRITE=ON
+        export BUILD_FORTRAN=ON
+        export CC=cc
+        export FC=ftn
+        export CXX=CC
+        export CFLAGS="-g -fPIC -O0"
+        export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DDART_DO_VERSIONING"
+        export skel_timing=ON
+        export INSTALL_PREFIX="/ccs/home/jya/ADIOS/titan.$TARGET" 
     fi
     
 
+elif [ `hostname | cut -c 1-4` == "eos-" ]; then
+
+      #################
+      # EOS Cray XC30 #
+      #################
+      TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+      echo "Configure on EOS (Cray XC30) for $TARGET env."
+      export CC=cc
+      #export CFLAGS="-Wall -g" 
+      export FC=ftn
+      export CXX=CC
+      source /opt/modules/default/etc/modules.sh
+      module unload szip
+      module unload hdf5
+      module unload netcdf
+      module unload netcdf-hdf5parallel
+      module unload hdf5-parallel
+      module unload PrgEnv-gnu
+      module unload PrgEnv-pgi
+      module unload PrgEnv-intel
+      module unload PrgEnv-cray
+      module unload papi
+      module unload pmi
+      module load PrgEnv-$TARGET
+      if [ "$TARGET" == "pgi" ]; then
+          # NSSI needs -pgcpplibs flag 
+          export LDFLAGS="-pgcpplibs"
+          unset EXTRA_LIBS 
+      elif [ "$TARGET" == "gnu" ]; then
+          # NSSI needs libstdc++
+          unset LDFLAGS 
+          export EXTRA_LIBS="/opt/gcc/4.8.1/snos/lib64/libstdc++.a"
+          module swap gcc gcc/4.8.1
+      else
+          unset LDFLAGS 
+          unset EXTRA_LIBS 
+      fi
+      module load mxml
+      module load pmi
+      export CFLAGS="-g -fPIC"
+      export INSTALL_PREFIX="/ccs/home/jya/ADIOS/eos.$TARGET"
+
 
 elif [ `hostname | cut -c 1-7` == "chester" ]; then
 
@@ -961,9 +947,13 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     export CFLAGS="-g -fPIC"
     export MXML_DIR=/opt/mxml
     export SEQ_HDF5_DIR=/opt/hdf5
+    export SEQ_HDF5_LIBS="-L/opt/hdf5/lib -lhdf5_hl -lhdf5 -lm"
     export PAR_HDF5_DIR=/opt/phdf5
+    export PAR_HDF5_LIBS="-L/opt/phdf5/lib -lhdf5_hl -lhdf5 -lm"
     export SEQ_NC_DIR=/opt/netcdf3
+    export SEQ_NC_LIBS="-L/opt/netcdf3/lib -lnetcdf"
     export PAR_NC_DIR=/opt/nc4par
+    export PAR_NC_LIBS="-L/opt/nc4par/lib -lnetcdf"
 
 else
     echo "Could not determine what machine is this."
diff --git a/config.h.cmake b/config.h.cmake
index f6f7a95..01436a6 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -19,9 +19,27 @@
 /* Define to 1 if your Fortran compiler doesn't accept -c and -o together. */
 #cmakedefine FC_NO_MINUS_C_MINUS_O 1
 
+/* Define if you have ALACRITY. */
+#cmakedefine HAVE_ALACRITY 1
+
+/* Define if you have APLOD. */
+#cmakedefine HAVE_APLOD 1
+
+/* Define to 1 if you have the <aplod.h> header file. */
+#cmakedefine HAVE_APLOD_H 1
+
 /* Define to 1 if you have the <Attributes.h> header file. */
 #cmakedefine HAVE_ATTRIBUTES_H 1
 
+/* Define if you want to enable BGQ method */
+#cmakedefine HAVE_BGQ 1
+
+/* Define if you have BZIP2. */
+#cmakedefine HAVE_BZIP2 1
+
+/* Define to 1 if you have the <bzlib.h> header file. */
+#cmakedefine HAVE_BZLIB_H 1
+
 /* Define to 1 if you have the `clock_gettime' function. */
 #cmakedefine HAVE_CLOCK_GETTIME 1
 
@@ -35,22 +53,22 @@
 #cmakedefine HAVE_CRAY_UGNI 1
 
 /* Define if you have the DATASPACES. */
-#cmakedefine HAVE_DATASPACES 1
+#cmakedefine HAVE_DATASPACES ${HAVE_DATASPACES}
 
 /* Define to 1 if you have the <dataspaces.h> header file. */
-#cmakedefine HAVE_DATASPACES_H 1
+#cmakedefine HAVE_DATASPACES_H ${HAVE_DATASPACES_H}
 
 /* Define if you have the DCMF. */
-#undef HAVE_DCMF
+#cmakedefine HAVE_DCMF
 
 /* Define to 1 if you have the <dcmf.h> header file. */
-#undef HAVE_DCMF_H
+#cmakedefine HAVE_DCMF_H
 
 /* Define if you have the DIMES. */
-#cmakedefine HAVE_DIMES 1
+#define HAVE_DIMES ${HAVE_DIMES}
 
 /* Define to 1 if you have the <dimes_interface.h> header file. */
-#undef HAVE_DIMES_INTERFACE_H
+#define HAVE_DIMES_INTERFACE_H ${HAVE_DIMES_INTERFACE_H}
 
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #cmakedefine HAVE_DLFCN_H 1
@@ -64,6 +82,9 @@
 /* Define to 1 if you have the `fdatasync' function. */
 #cmakedefine HAVE_FDATASYNC 1
 
+/* Flexpath is enabled */
+#define HAVE_FLEXPATH ${HAVE_FLEXPATH}
+
 /* Define to 1 if you have the `gettimeofday' function. */
 #cmakedefine HAVE_GETTIMEOFDAY 1
 
@@ -84,6 +105,12 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #cmakedefine HAVE_INTTYPES_H 1
 
+/* Define if you have ISOBAR. */
+#cmakedefine HAVE_ISOBAR 1
+
+/* Define to 1 if you have the <isobar.h> header file. */
+#cmakedefine HAVE_ISOBAR_H 1
+
 /* Define to 1 if you have the `rt' library (-lrt). */
 #cmakedefine HAVE_LIBRT 1
 
@@ -108,6 +135,9 @@
 /* Define to 1 if you have the <netcdf.h> header file. */
 #cmakedefine HAVE_NC4PAR_H 1
 
+/* Define if you have libtimer */
+#cmakedefine HAVE_NCSU_TIMER
+
 /* Define if you have NC4PAR. */
 #cmakedefine HAVE_NC4PAR 1
 
@@ -118,7 +148,7 @@
 #cmakedefine HAVE_NETCDF_H 1
 
 /* Define if you have NSSI. */
-#cmakedefine HAVE_NSSI 1
+#define HAVE_NSSI ${HAVE_NSSI}
 
 /* Define to 1 if you have the <p3nal_utcp.h> header file. */
 #cmakedefine HAVE_P3NAL_UTCP_H 1
@@ -130,10 +160,10 @@
 #cmakedefine HAVE_PABLO 1
 
 /* Define if you have PHDF5. */
-#cmakedefine HAVE_PHDF5 1
+#define HAVE_PHDF5 ${HAVE_PHDF5}
 
 /* Define to 1 if you have the <hdf5.h> header file. */
-#cmakedefine HAVE_PHDF5_H 1
+#define HAVE_PHDF5_H ${HAVE_PHDF5_H}
 
 /* Define if you have the Portals. */
 #cmakedefine HAVE_PORTALS 1
@@ -209,12 +239,23 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #cmakedefine HAVE_SYS_TYPES_H 1
 
+/* Define if you have ZLIB. */
+#cmakedefine HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#cmakedefine HAVE_ZLIB_H 1
+
+/* Define if you have SZIP. */
+#cmakedefine HAVE_SZIP 1
+
+/* Define to 1 if you have the <szlib.h> header file. */
+#cmakedefine HAVE_SZLIB_H 1
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #cmakedefine HAVE_UNISTD_H 1
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
-#undef LT_OBJDIR
+/* Define to the sub-directory in which libtool stores uninstalled libraries. */
+#cmakedefine LT_OBJDIR 1
 
 /* Datatap is disabled */
 #cmakedefine NO_DATATAP 1
@@ -247,6 +288,9 @@
 /* Skel timing is enabled */
 #cmakedefine SKEL_TIMING 1
 
+/* research_transports is enabled */
+#define RESEARCH_TRANSPORTS ${RESEARCH_TRANSPORTS}
+
 /* Define to 1 if you have the ANSI C header files. */
 #cmakedefine STDC_HEADERS 1
 
diff --git a/config.h.in b/config.h.in
index 09079a7..4a4585e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -17,9 +17,27 @@
 /* Define to 1 if your Fortran compiler doesn't accept -c and -o together. */
 #undef FC_NO_MINUS_C_MINUS_O
 
+/* Define if you have ALACRITY. */
+#undef HAVE_ALACRITY
+
+/* Define if you have APLOD. */
+#undef HAVE_APLOD
+
+/* Define to 1 if you have the <aplod.h> header file. */
+#undef HAVE_APLOD_H
+
 /* Define to 1 if you have the <Attributes.h> header file. */
 #undef HAVE_ATTRIBUTES_H
 
+/* Define if you want to enable BGQ method */
+#undef HAVE_BGQ
+
+/* Define if you have BZIP2. */
+#undef HAVE_BZIP2
+
+/* Define to 1 if you have the <bzlib.h> header file. */
+#undef HAVE_BZLIB_H
+
 /* Define to 1 if you have the `clock_gettime' function. */
 #undef HAVE_CLOCK_GETTIME
 
@@ -83,6 +101,12 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define if you have ISOBAR. */
+#undef HAVE_ISOBAR
+
+/* Define to 1 if you have the <isobar.h> header file. */
+#undef HAVE_ISOBAR_H
+
 /* Define to 1 if you have the `rt' library (-lrt). */
 #undef HAVE_LIBRT
 
@@ -107,6 +131,9 @@
 /* Define if you have NC4PAR. */
 #undef HAVE_NC4PAR
 
+/* Define if you have libtimer */
+#undef HAVE_NCSU_TIMER
+
 /* Define if you have NETCDF. */
 #undef HAVE_NETCDF
 
@@ -200,9 +227,24 @@
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define if you have SZIP. */
+#undef HAVE_SZIP
+
+/* Define to 1 if you have the <szlib.h> header file. */
+#undef HAVE_SZLIB_H
+
+/* Define to 1 if you have the <timer.h> header file. */
+#undef HAVE_TIMER_H
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
+/* Define if you have ZLIB. */
+#undef HAVE_ZLIB
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #undef LT_OBJDIR
@@ -258,6 +300,3 @@
 
 /* Minor version number */
 #undef VERSION_MINOR
-
-/* svn revision number */
-#undef VERSION_SVNREV
diff --git a/config/ac_alacrity.m4 b/config/ac_alacrity.m4
new file mode 100755
index 0000000..fbce7de
--- /dev/null
+++ b/config/ac_alacrity.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_ALACRITY
+#
+#
+#
+dnl @synopsis AC_ALACRITY
+dnl
+dnl This macro test if ALACRITY is to be used.
+dnl Use in C code:
+dnl     #ifdef ALACRITY
+dnl     #include "alacrity.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author David A. Boyuka II
+dnl
+AC_DEFUN([AC_ALACRITY],[
+
+AC_MSG_NOTICE([=== checking for ALACRITY ===])
+
+AM_CONDITIONAL(HAVE_ALACRITY,true)
+
+AC_ARG_WITH([alacrity],
+        [  --with-alacrity=DIR      Location of ALACRITY library],
+        [ALACRITY_LDFLAGS="-L$withval/lib";
+         ALACRITY_LIBS="-lalacrity -lridcompress";
+         ALACRITY_CPPFLAGS="-I$withval/include";],
+        [with_alacrity=no])
+
+if test "x$with_alacrity" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_ALACRITY,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $ALACRITY_LIBS"
+    LDFLAGS="$LDFLAGS $ALACRITY_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ALACRITY_CPPFLAGS"
+
+    dnl if test -z "${HAVE_ALACRITY_TRUE}"; then
+    dnl        AC_CHECK_HEADERS(alacrity.h,
+    dnl                ,
+    dnl                [AM_CONDITIONAL(HAVE_ALACRITY,false)])
+    dnl fi
+
+    # Check for the ALACRITY library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [ALACRITY_LIBS="-lalacrity"],
+    dnl        [AM_CONDITIONAL(HAVE_ALACRITY,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(ALACRITY_LIBS)
+    AC_SUBST(ALACRITY_LDFLAGS)
+    AC_SUBST(ALACRITY_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ALACRITY_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_ALACRITY,1,[Define if you have ALACRITY.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_ALACRITY
diff --git a/config/ac_aplod.m4 b/config/ac_aplod.m4
new file mode 100755
index 0000000..0de6b7a
--- /dev/null
+++ b/config/ac_aplod.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_APLOD
+#
+#
+#
+dnl @synopsis AC_APLOD
+dnl
+dnl This macro test if APLOD is to be used.
+dnl Use in C code:
+dnl     #ifdef APLOD
+dnl     #include "aplod.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_APLOD],[
+
+AC_MSG_NOTICE([=== checking for APLOD ===])
+
+AM_CONDITIONAL(HAVE_APLOD,true)
+
+AC_ARG_WITH(aplod,
+        [  --with-aplod=DIR      Location of APLOD library],
+        [APLOD_LDFLAGS="-L$withval/lib";
+         APLOD_LIBS="-laplod -lz";
+         APLOD_CPPFLAGS="-I$withval/include";],
+        [with_aplod=no])
+
+if test "x$with_aplod" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_APLOD,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -laplod -lz"
+    LDFLAGS="$LDFLAGS $APLOD_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $APLOD_CPPFLAGS"
+
+    if test -z "${HAVE_APLOD_TRUE}"; then
+           AC_CHECK_HEADERS(aplod.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_APLOD,false)])
+    fi
+
+    # Check for the APLOD library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [APLOD_LIBS="-laplod -lz"],
+    dnl        [AM_CONDITIONAL(HAVE_APLOD,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(APLOD_LIBS)
+    AC_SUBST(APLOD_LDFLAGS)
+    AC_SUBST(APLOD_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_APLOD_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_APLOD,1,[Define if you have APLOD.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_APLOD
diff --git a/config/ac_bgq.m4 b/config/ac_bgq.m4
new file mode 100644
index 0000000..0bdac92
--- /dev/null
+++ b/config/ac_bgq.m4
@@ -0,0 +1,24 @@
+
+AC_DEFUN([AC_BGQ], [
+
+
+AC_MSG_NOTICE([=== checking for BGQ ===])
+
+temptest=enable
+
+AC_ARG_WITH(bgq, 
+	[  --with-bgq 	Whether to enable BGQ method or not], 
+	[ ], [with_bgq=no])
+
+if test "x$with_bgq" = "xno"; then
+        echo "no bgq"
+	AM_CONDITIONAL(HAVE_BGQ, false)
+        AC_DEFINE(HAVE_BGQ,0,[Define if you want to enable BGQ method])
+elif test x"$with_bgq" != xyes -o x"$with_bgq" != xcheck; then
+dnl        AC_CHECK_HEADERS(/bgsys/drivers/ppcfloor/spi/include/kernel/location.h /bgsys/drivers/ppcfloor/spi/include/kernel/process.h /bgsys/drivers/ppcfloor/firmware/include/personality.h,
+dnl                        ,
+dnl                        [AM_CONDITIONAL(HAVE_BGQ,false)])
+	AM_CONDITIONAL(HAVE_BGQ, true)
+        AC_DEFINE(HAVE_BGQ,1,[Define if you want to enable BGQ method])
+fi
+]) dnl AC_BGQ
diff --git a/config/ac_bzip2.m4 b/config/ac_bzip2.m4
new file mode 100644
index 0000000..10f5f24
--- /dev/null
+++ b/config/ac_bzip2.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_BZIP2
+#
+#
+#
+dnl @synopsis AC_BZIP2
+dnl
+dnl This macro test if BZIP2 is to be used.
+dnl Use in C code:
+dnl     #ifdef BZIP2
+dnl     #include "bzlib.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_BZIP2],[
+
+AC_MSG_NOTICE([=== checking for BZIP2 ===])
+
+AM_CONDITIONAL(HAVE_BZIP2,true)
+
+AC_ARG_WITH(bzip2,
+        [  --with-bzip2=DIR      Location of BZIP2 library],
+        [BZIP2_LDFLAGS="-L$withval/lib";
+         BZIP2_LIBS="-lbz2";
+         BZIP2_CPPFLAGS="-I$withval/include";],
+        [with_bzip2=no])
+
+if test "x$with_bzip2" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_BZIP2,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lbz2"
+    LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $BZIP2_CPPFLAGS"
+
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+           AC_CHECK_HEADERS(bzlib.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_BZIP2,false)])
+    fi
+
+    # Check for the BZIP2 library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [BZIP2_LIBS="-lbz2"],
+    dnl        [AM_CONDITIONAL(HAVE_BZIP2,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(BZIP2_LIBS)
+    AC_SUBST(BZIP2_LDFLAGS)
+    AC_SUBST(BZIP2_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_BZIP2,1,[Define if you have BZIP2.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_BZIP2
diff --git a/config/ac_dataspaces.m4 b/config/ac_dataspaces.m4
index ec6dd3d..48351b0 100644
--- a/config/ac_dataspaces.m4
+++ b/config/ac_dataspaces.m4
@@ -84,17 +84,17 @@ else
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_infiniband_lib_ok}" == "xyes"; then 
-        dnl LIBS="$LIBS -ldart -ldataspaces"
-        LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    elif test "x${ac_portals_lib_ok}" == "xyes"; then 
-        LIBS="$LIBS -ldart2 -lspaces"
-    elif test "x${ac_dmcf_lib_ok}" == "xyes"; then
-        LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    else
-        LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    fi
-    dnl LIBS="$LIBS -ldspaces -ldscommon -ldart"
+    dnl if test "x${ac_infiniband_lib_ok}" == "xyes"; then 
+    dnl     dnl LIBS="$LIBS -ldart -ldataspaces"
+    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
+    dnl elif test "x${ac_portals_lib_ok}" == "xyes"; then 
+    dnl     LIBS="$LIBS -ldart2 -lspaces"
+    dnl elif test "x${ac_dmcf_lib_ok}" == "xyes"; then
+    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
+    dnl else
+    dnl     LIBS="$LIBS -ldspaces -ldscommon -ldart"
+    dnl fi
+    LIBS="$LIBS -ldspaces -ldscommon -ldart"
     LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $DATASPACES_CPPFLAGS"
     
@@ -109,7 +109,7 @@ else
         if test "x${ac_portals_lib_ok}" == "xyes"; then 
             AC_TRY_COMPILE([#include "dataspaces.h"],
                     [int err; err = dspaces_init(1,1);],
-                    [DATASPACES_LIBS="-ldart2 -lspaces"],
+                    [DATASPACES_LIBS="-ldspaces -ldscommon -ldart"],
                     [AM_CONDITIONAL(HAVE_DATASPACES,false)])
         elif test "x${ac_infiniband_lib_ok}" == "xyes"; then 
             AC_TRY_COMPILE([#include "dataspaces.h"],
diff --git a/config/ac_flexpath.m4 b/config/ac_flexpath.m4
index f3c72d7..a358e1a 100644
--- a/config/ac_flexpath.m4
+++ b/config/ac_flexpath.m4
@@ -39,7 +39,6 @@ if test "x$ac_flexpath_ok" != "xno"; then
     CERCS_REQUIRE_PACKAGE(evpath, evpath.h, libevpath.a)
     CERCS_REQUIRE_PACKAGE(ffs, ffs.h,libffs.a)
     CERCS_REQUIRE_PACKAGE(atl, atl.h,libatl.a)
-    CERCS_REQUIRE_PACKAGE(gen_thread, gen_thread.h,libgen_thread.a)
     CERCS_REQUIRE_PACKAGE(dill, dill.h, libdill.a)
     CERCS_REQUIRE_PACKAGE(cercs_env, cercs_env.h, libcercs_env.a)
 
@@ -80,15 +79,6 @@ if test "x$ac_flexpath_ok" != "xno"; then
 	ac_flexpath_ok=no
 	echo "FLEXPATH couldn't find dill -  Not building flexpath"
     fi
-    if test -n "$cercs_cv_gen_thread_link_dir" -a -n "$cercs_cv_gen_thread_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_gen_thread_link_dir"
-	FP_LIBS="$FP_LIBS -lgen_thread"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_gen_thread_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_gen_thread_include_arg"
-    else 
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find gen_thread -  Not building flexpath"
-    fi
     if test -n "$cercs_cv_cercs_env_link_dir" -a -n "$cercs_cv_cercs_env_include_arg"; then
 	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_cercs_env_link_dir"
 	FP_LIBS="$FP_LIBS -lcercs_env"
diff --git a/config/ac_isobar.m4 b/config/ac_isobar.m4
new file mode 100755
index 0000000..3e19c8c
--- /dev/null
+++ b/config/ac_isobar.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_ISOBAR
+#
+#
+#
+dnl @synopsis AC_ISOBAR
+dnl
+dnl This macro test if ISOBAR is to be used.
+dnl Use in C code:
+dnl     #ifdef ISOBAR
+dnl     #include "isobar.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_ISOBAR],[
+
+AC_MSG_NOTICE([=== checking for ISOBAR ===])
+
+AM_CONDITIONAL(HAVE_ISOBAR,true)
+
+AC_ARG_WITH(isobar,
+        [  --with-isobar=DIR      Location of ISOBAR library],
+        [ISOBAR_LDFLAGS="-L$withval/lib";
+         ISOBAR_LIBS="-lisobar -lz";
+         ISOBAR_CPPFLAGS="-I$withval/include";],
+        [with_isobar=no])
+
+if test "x$with_isobar" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_ISOBAR,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lisobar -lz"
+    LDFLAGS="$LDFLAGS $ISOBAR_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ISOBAR_CPPFLAGS"
+
+    if test -z "${HAVE_ISOBAR_TRUE}"; then
+           AC_CHECK_HEADERS(isobar.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_ISOBAR,false)])
+    fi
+
+    # Check for the ISOBAR library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [ISOBAR_LIBS="-lisobar -lz"],
+    dnl        [AM_CONDITIONAL(HAVE_ISOBAR,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(ISOBAR_LIBS)
+    AC_SUBST(ISOBAR_LDFLAGS)
+    AC_SUBST(ISOBAR_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ISOBAR_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_ISOBAR,1,[Define if you have ISOBAR.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_ISOBAR
diff --git a/config/ac_mxml.m4 b/config/ac_mxml.m4
index 1884193..7290f18 100644
--- a/config/ac_mxml.m4
+++ b/config/ac_mxml.m4
@@ -1,55 +1,94 @@
-#
-#
-# AC_PROG_MXML
-#
-# Test for Mini-XML
-# and set $MXML to the correct value.
-#
-#
-dnl @synopsis AC_PROG_MXML
+dnl
+dnl
+dnl AC_PROG_MXML
+dnl
+dnl Test for Mini-XML
+dnl and set $MXML to the correct value.
+dnl
+dnl
+dnl @synopsis AC_MXML
 dnl
 dnl This macro test if mini-XML is installed. If mini-XML
 dnl is installed, it set $MXML to the right value
 dnl
-dnl @version 1.0
+dnl @version 2.0
 dnl @author Jay Lofstead lofstead at cc.gatech.edu
+dnl @author Norbert Podhorszki pnorbert at ornl.gov
 dnl
-AC_DEFUN([AC_PROG_MXML],[
+AC_DEFUN([AC_MXML],[
 
 AM_CONDITIONAL(HAVE_MXML,true)
+ac_with_mxml=no
 
+dnl By default assume mxml is installed in system location
 AC_ARG_WITH(mxml,
         [  --with-mxml=DIR      Location of Mini-XML library],
-        [MXML_LDFLAGS="-L$withval/lib";
-         MXML_CPPFLAGS="-I$withval/include";])
-
-save_CPPFLAGS="$CPPFLAGS"
-save_LIBS="$LIBS"
-save_LDFLAGS="$LDFLAGS"
-LIBS="$LIBS -lmxml"
-if test -n "$MXML_LDFLAGS"; then
-    LDFLAGS="$LDFLAGS $MXML_LDFLAGS"
-elif test -n "$MXML_LIB"; then
-    LDFLAGS="$LDFLAGS $MXML_LIB"
-    MXML_LDFLAGS="$MXML_LIB"
+        [:])
+
+dnl If --without-mxml was given give an error
+if test "x$with_mxml" == "xno"; then
+
+    AM_CONDITIONAL(HAVE_MXML,false)
+
+elif test "x$with_mxml" == "xyes" -o "x$with_mxml" == "x"; then
+
+    dnl If nothing was given, then look in the system libs
+    if test -n "$MXML_LIB"; then
+         MXML_LDFLAGS="$MXML_LIB"
+    else
+       dnl If not in the environment, then look in the system libs
+         MXML_LDFLAGS=""
+    fi
+
+    if test -n "$MXML_INC"; then
+        MXML_CPPFLAGS="$MXML_INC"
+    else
+        MXML_CPPFLAGS=""
+    fi
+    ac_with_mxml=yes
+
+else
+
+    dnl Otherwise, set up the flags
+    MXML_DIR=$with_mxml
+    MXML_CPPFLAGS="-I${MXML_DIR}/include"
+    if test -d "${MXML_DIR}/lib64"; then
+        MXML_LDFLAGS="-L${MXML_DIR}/lib64";
+    else
+        MXML_LDFLAGS="-L${MXML_DIR}/lib";
+    fi
+    ac_with_mxml=yes
+
 fi
-if test -n "$MXML_CPPFLAGS"; then
+
+
+if test "x$ac_with_mxml" == "xyes"; then
+
+    AC_ARG_WITH(mxml-libs,
+            [  --with-mxml-libs=<linker flags for Mini-XML library>],
+            [MXML_LIBS=$withval])
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+
     CPPFLAGS="$CPPFLAGS $MXML_CPPFLAGS"
-elif test -n "$MXML_INC"; then
-    CPPFLAGS="$CPPFLAGS $MXML_INC"
-    MXML_CPPFLAGS="$MXML_INC"
-fi 
-
-if test -z "${HAVE_MXML_TRUE}"; then
-        AC_CHECK_HEADERS(mxml.h,
-                ,
-                [AM_CONDITIONAL(HAVE_MXML,false)])
-fi
+    LDFLAGS="$LDFLAGS $MXML_LDFLAGS"
+
+    if test -z "$MXML_LIBS"; then
+        MXML_LIBS="-lmxml"
+    fi
+    LIBS="$LIBS ${MXML_LIBS}"
 
-if test -z "${HAVE_MXML_TRUE}"; then
-    # Check for the Mini-XML library and headers
-    AC_MSG_CHECKING([if mxml code can be linked])
-    AC_TRY_LINK([#include "mxml.h"],
+
+    AC_CHECK_HEADERS(mxml.h,
+        ,
+        [AM_CONDITIONAL(HAVE_MXML,false)])
+
+    if test -z "${HAVE_MXML_TRUE}"; then
+        dnl Check for the Mini-XML library and headers
+        AC_MSG_CHECKING([if mxml code can be linked])
+        AC_TRY_LINK([#include "mxml.h"],
         [mxml_node_t * n; 
          char *buffer;
          char *value;
@@ -65,14 +104,15 @@ if test -z "${HAVE_MXML_TRUE}"; then
          AC_MSG_RESULT(no)
         ])
 
-    dnl If Linking above failed, one reason might be that mxml uses pthreads and
-    dnl the compiler does not use it by default. Try getting phtreads
-    if test -z "${HAVE_MXML_FALSE}"; then
-        # Check for the Mini-XML library and headers
-        AC_REQUIRE([ACX_PTHREAD])
-        LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS $PTHREAD_LIBS"
-        AC_MSG_CHECKING([if mxml code can be linked using pthreads])
-        AC_TRY_LINK([#include "mxml.h"],
+        dnl If Linking above failed, one reason might be that mxml uses pthreads and
+        dnl the compiler does not use it by default. Try getting phtreads
+        if test -z "${HAVE_MXML_FALSE}"; then
+            dnl Check for the Mini-XML library and headers
+            AC_REQUIRE([ACX_PTHREAD])
+            LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
+            LIBS="$LIBS $PTHREAD_LIBS"
+            AC_MSG_CHECKING([if mxml code can be linked using pthreads])
+            AC_TRY_LINK([#include "mxml.h"],
             [mxml_node_t * n; 
              char *buffer;
              char *value;
@@ -89,24 +129,26 @@ if test -z "${HAVE_MXML_TRUE}"; then
             [AM_CONDITIONAL(HAVE_MXML,false)
              AC_MSG_RESULT(no)
             ])
+        fi
     fi
-fi
 
 
-LIBS="$save_LIBS"
-LDFLAGS="$save_LDFLAGS"
-CPPFLAGS="$save_CPPFLAGS"
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
 
-AC_SUBST(MXML_LIBS)
-AC_SUBST(MXML_LDFLAGS)
-AC_SUBST(MXML_CPPFLAGS)
+    AC_SUBST(MXML_LIBS)
+    AC_SUBST(MXML_LDFLAGS)
+    AC_SUBST(MXML_CPPFLAGS)
 
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test -z "${HAVE_MXML_TRUE}"; then
+    dnl Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_MXML_TRUE}"; then
         ifelse([$1],,[AC_DEFINE(HAVE_MXML,1,[Define if you have the MXML.])],[$1])
         :
-else
+    else
         $2
         :
+    fi
+
 fi
 ])dnl AC_MXML
diff --git a/config/ac_nc4par.m4 b/config/ac_nc4par.m4
index 6d0232e..1de4b44 100644
--- a/config/ac_nc4par.m4
+++ b/config/ac_nc4par.m4
@@ -12,9 +12,10 @@ AM_CONDITIONAL(HAVE_NC4PAR,true)
 
 AC_ARG_WITH(nc4par,
             [  --with-nc4par=<location of NetCDF 4 Parallel installation>],
-            [NC4PAR_DIR=$withval], [with_nc4par=check])
+            [NC4PAR_DIR=$withval], [with_nc4par=no])
 
 dnl If --without-nc4par was given set HAVE_NC4PAR to false and do nothing more
+dnl Or if nothing was given, by default we don't try to find it anymore
 if test "x$with_nc4par" == "xno"; then
 
    AM_CONDITIONAL(HAVE_NC4PAR,false)
diff --git a/config/ac_ncsu_timer.m4 b/config/ac_ncsu_timer.m4
new file mode 100644
index 0000000..1c5e928
--- /dev/null
+++ b/config/ac_ncsu_timer.m4
@@ -0,0 +1,60 @@
+AC_DEFUN([AX_NCSU_LIBTIMER], [
+
+AM_CONDITIONAL(HAVE_NCSU_TIMER,false)
+
+dnl Enable the --with-timer=path configure argument
+AC_ARG_WITH(
+  [timer],
+  [AS_HELP_STRING(
+    [--with-timer=DIR],
+    [Location of the timer library]
+  ),[],
+  [with_timer=no]]dnl
+)
+
+dnl If the timer lib was specified, verify that it exists and can compile
+if test "x$with_timer" != xno -a "x$with_timer" != x; then
+    AM_CONDITIONAL(HAVE_NCSU_TIMER,true)
+
+    TIMER_CPPFLAGS="-I$with_timer/include"
+    TIMER_LDFLAGS="-L$with_timer/lib"
+    TIMER_LIBS="-ltimer"
+
+    saveLIB="$LIB"
+    saveLDFLAGS="$LDFLAGS"
+    saveCPPFLAGS="$CPPFLAGS"
+    LIB="$LIB $TIMER_LIBS"
+    LDFLAGS="$LDFLAGS $TIMER_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $TIMER_CPPFLAGS"
+
+    AC_CHECK_HEADERS(
+      [timer.h],
+      [],
+      [AC_MSG_FAILURE(
+        [Cannot find timer.h from the timer lib. Make sure it has been properly installed at the path specified ($with_timer).]dnl
+      )]dnl
+    )
+
+    AC_CHECK_LIB(
+      [timer],
+      [timer_init],
+      [AC_DEFINE(
+        [HAVE_NCSU_TIMER],
+        [1],
+        [Define if you have libtimer]
+      )],
+      [AC_MSG_FAILURE(
+        [Cannot successfully link with the timer lib. Make sure it has been properly installed at the path specified ($with_timer).]dnl
+      )]dnl
+    )
+
+    LIBS="$saveLIBS"
+    LDFLAGS="$saveLDFLAGS"
+    CPPFLAGS="$saveCPPFLAGS"
+
+    AC_SUBST(TIMER_CPPFLAGS)
+    AC_SUBST(TIMER_LDFLAGS)
+    AC_SUBST(TIMER_LIBS)
+fi
+
+]) dnl End of DEFUN
diff --git a/config/ac_phdf5.m4 b/config/ac_phdf5.m4
index 01d06d2..6b86d69 100644
--- a/config/ac_phdf5.m4
+++ b/config/ac_phdf5.m4
@@ -12,7 +12,7 @@ AM_CONDITIONAL(HAVE_PHDF5,true)
 
 AC_ARG_WITH([phdf5],
             [  --with-phdf5=<location of PHDF5 installation>],
-            [PHDF5_DIR=$withval], [with_phdf5=check])
+            [PHDF5_DIR=$withval], [with_phdf5=no])
 
 dnl allow args --with-phdf5 incdir and --with-phdf5-libdir
 
@@ -32,6 +32,7 @@ AC_ARG_WITH(phdf5-libs,
     with_phdf5=detailed])
 
 dnl If --without-phdf5 was given set HAVE_PHDF5 to false and do nothing more
+dnl Or if nothing was given, by default we don't try to find it anymore
 if test "x$with_phdf5" == "xno"; then
 
    AM_CONDITIONAL(HAVE_PHDF5,false)
diff --git a/config/ac_szip.m4 b/config/ac_szip.m4
new file mode 100644
index 0000000..14426bf
--- /dev/null
+++ b/config/ac_szip.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_SZIP
+#
+#
+#
+dnl @synopsis AC_SZIP
+dnl
+dnl This macro test if SZIP is to be used.
+dnl Use in C code:
+dnl     #ifdef SZIP
+dnl     #include "szlib.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_SZIP],[
+
+AC_MSG_NOTICE([=== checking for SZIP ===])
+
+AM_CONDITIONAL(HAVE_SZIP,true)
+
+AC_ARG_WITH(szip,
+        [  --with-szip=DIR      Location of SZIP library],
+        [SZIP_LDFLAGS="-L$withval/lib";
+         SZIP_LIBS="-lsz";
+         SZIP_CPPFLAGS="-I$withval/include";],
+        [with_szip=no])
+
+if test "x$with_szip" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_SZIP,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lsz"
+    LDFLAGS="$LDFLAGS $SZIP_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $SZIP_CPPFLAGS"
+
+    if test -z "${HAVE_SZIP_TRUE}"; then
+           AC_CHECK_HEADERS(szlib.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_SZIP,false)])
+    fi
+
+    # Check for the SZIP library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [SZIP_LIBS="-lsz"],
+    dnl        [AM_CONDITIONAL(HAVE_SZIP,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(SZIP_LIBS)
+    AC_SUBST(SZIP_LDFLAGS)
+    AC_SUBST(SZIP_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_SZIP_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_SZIP,1,[Define if you have SZIP.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_SZIP
diff --git a/config/ac_zlib.m4 b/config/ac_zlib.m4
new file mode 100644
index 0000000..5d6544b
--- /dev/null
+++ b/config/ac_zlib.m4
@@ -0,0 +1,73 @@
+#
+#
+# AC_ZLIB
+#
+#
+#
+dnl @synopsis AC_ZLIB
+dnl
+dnl This macro test if ZLIB is to be used.
+dnl Use in C code:
+dnl     #ifdef ZLIB
+dnl     #include "zlib.h"
+dnl     #endif
+dnl
+dnl @version 1.0
+dnl @author Zhenhuan (Steve) Gong
+dnl
+AC_DEFUN([AC_ZLIB],[
+
+AC_MSG_NOTICE([=== checking for ZLIB ===])
+
+AM_CONDITIONAL(HAVE_ZLIB,true)
+
+AC_ARG_WITH(zlib,
+        [  --with-zlib=DIR      Location of ZLIB library],
+        [ZLIB_LDFLAGS="-L$withval/lib -L$withval/lib64";
+         ZLIB_LIBS="-lz";
+         ZLIB_CPPFLAGS="-I$withval/include";],
+        [with_zlib=no])
+
+if test "x$with_zlib" == "xno"; then
+
+   AM_CONDITIONAL(HAVE_ZLIB,false)
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $ZLIB_LIBS"
+    LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
+
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+           AC_CHECK_HEADERS(zlib.h,
+                   ,
+                   [AM_CONDITIONAL(HAVE_ZLIB,false)])
+    fi
+
+    # Check for the ZLIB library and headers
+    dnl AC_TRY_COMPILE([struct obd_uuid {char uuid[40];};int fd, num_ost;struct obd_uuid uuids[1024];],
+    dnl        [llapi_lov_get_uuids(fd, uuids, &num_ost);],
+    dnl        [ZLIB_LIBS="-lz"],
+    dnl        [AM_CONDITIONAL(HAVE_ZLIB,false)])
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+    AC_SUBST(ZLIB_LIBS)
+    AC_SUBST(ZLIB_LDFLAGS)
+    AC_SUBST(ZLIB_CPPFLAGS)
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+            ifelse([$1],,[AC_DEFINE(HAVE_ZLIB,1,[Define if you have ZLIB.])],[$1])
+            :
+    else
+            $2
+            :
+    fi
+fi
+])dnl AC_ZLIB
diff --git a/configure b/configure
index 1efd45f..7f5c2c2 100755
--- a/configure
+++ b/configure
@@ -813,8 +813,6 @@ ADIOSLIB_CPPFLAGS
 MACRODEFFLAG
 USE_PARALLEL_COMPILER_FALSE
 USE_PARALLEL_COMPILER_TRUE
-BUILD_WRITE_FALSE
-BUILD_WRITE_TRUE
 HAVE_DATATAP_FALSE
 HAVE_DATATAP_TRUE
 SKEL_TIMING
@@ -823,6 +821,43 @@ SKEL_TIMING_FALSE
 SKEL_TIMING_TRUE
 RESEARCH_TRANSPORTS_FALSE
 RESEARCH_TRANSPORTS_TRUE
+HAVE_BGQ_FALSE
+HAVE_BGQ_TRUE
+TIMER_LIBS
+TIMER_LDFLAGS
+TIMER_CPPFLAGS
+HAVE_NCSU_TIMER_FALSE
+HAVE_NCSU_TIMER_TRUE
+ALACRITY_CPPFLAGS
+ALACRITY_LDFLAGS
+ALACRITY_LIBS
+HAVE_ALACRITY_FALSE
+HAVE_ALACRITY_TRUE
+APLOD_CPPFLAGS
+APLOD_LDFLAGS
+APLOD_LIBS
+HAVE_APLOD_FALSE
+HAVE_APLOD_TRUE
+ISOBAR_CPPFLAGS
+ISOBAR_LDFLAGS
+ISOBAR_LIBS
+HAVE_ISOBAR_FALSE
+HAVE_ISOBAR_TRUE
+SZIP_CPPFLAGS
+SZIP_LDFLAGS
+SZIP_LIBS
+HAVE_SZIP_FALSE
+HAVE_SZIP_TRUE
+BZIP2_CPPFLAGS
+BZIP2_LDFLAGS
+BZIP2_LIBS
+HAVE_BZIP2_FALSE
+HAVE_BZIP2_TRUE
+ZLIB_CPPFLAGS
+ZLIB_LDFLAGS
+ZLIB_LIBS
+HAVE_ZLIB_FALSE
+HAVE_ZLIB_TRUE
 HAVE_FLEXPATH_FALSE
 HAVE_FLEXPATH_TRUE
 FP_LDFLAGS
@@ -928,6 +963,8 @@ PTHREAD_LIBS
 PTHREAD_CC
 HAVE_MXML_FALSE
 HAVE_MXML_TRUE
+BUILD_WRITE_FALSE
+BUILD_WRITE_TRUE
 CXXCPP
 OTOOL64
 OTOOL
@@ -1067,7 +1104,9 @@ with_pic
 enable_fast_install
 with_gnu_ld
 enable_libtool_lock
+enable_write
 with_mxml
+with_mxml_libs
 with_dcmf
 with_infiniband
 with_portals
@@ -1117,9 +1156,16 @@ with_evpath
 with_atl
 with_dill
 with_cercs_env
+with_zlib
+with_bzip2
+with_szip
+with_isobar
+with_aplod
+with_alacrity
+with_timer
+with_bgq
 enable_research_transports
 enable_skel_timing
-enable_write
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1777,13 +1823,13 @@ Optional Features:
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-write         disable building the write methods in ADIOS.
   --enable-research-transports
                           Enable building the various research transports.
                           Default is not to build these as they are not part
                           of the base distribution.
   --enable-skel-timing    Include the skel timing mechanism. By default this
                           is not included
-  --disable-write         disable building the write methods in ADIOS.
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1793,6 +1839,7 @@ Optional Packages:
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-mxml=DIR      Location of Mini-XML library
+  --with-mxml-libs=<linker flags for Mini-XML library>
   --with-dcmf=DIR      Location of IBM DCMF
   --with-infiniband=DIR      Location of Infiniband
   --with-portals=DIR      Location of Portals (yes/no/path_to_portals)
@@ -1844,6 +1891,15 @@ Optional Packages:
   --with-atl=DIR	Where to find atl package
   --with-dill=DIR	Where to find dill package
   --with-cercs_env=DIR	Where to find cercs_env package
+  --with-zlib=DIR      Location of ZLIB library
+  --with-bzip2=DIR      Location of BZIP2 library
+  --with-szip=DIR      Location of SZIP library
+  --with-isobar=DIR      Location of ISOBAR library
+  --with-aplod=DIR      Location of APLOD library
+  --with-alacrity=DIR      Location of ALACRITY library
+  --with-timer=DIR        Location of the timer library,,
+  with_timer=no
+  --with-bgq 	Whether to enable BGQ method or not
 
 Some influential environment variables:
   CC          C compiler command
@@ -2788,7 +2844,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=adios
- VERSION=1.5.0
+ VERSION=1.6.0
 
 
 cat >>confdefs.h <<_ACEOF
@@ -6196,8 +6252,8 @@ CC="$acx_mpi_save_CC"
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 if test x = x"$MPILIBS"; then
-        { { $as_echo "$as_me:$LINENO: error: couldn't find mpi library for C" >&5
-$as_echo "$as_me: error: couldn't find mpi library for C" >&2;}
+        { { $as_echo "$as_me:$LINENO: error: could not find mpi library for C" >&5
+$as_echo "$as_me: error: could not find mpi library for C" >&2;}
    { (exit 1); exit 1; }; }
         :
 else
@@ -6577,8 +6633,8 @@ CXX="$acx_mpi_save_CXX"
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 if test x = x"$MPILIBS"; then
-        { { $as_echo "$as_me:$LINENO: error: couldn't find mpi library for C++" >&5
-$as_echo "$as_me: error: couldn't find mpi library for C++" >&2;}
+        { { $as_echo "$as_me:$LINENO: error: could not find mpi library for C++" >&5
+$as_echo "$as_me: error: could not find mpi library for C++" >&2;}
    { (exit 1); exit 1; }; }
         :
 else
@@ -8167,8 +8223,8 @@ FC="$acx_mpi_save_FC"
 
 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 if test x = x"$MPILIBS"; then
-        { { $as_echo "$as_me:$LINENO: error: couldn't find mpi library for Fortran" >&5
-$as_echo "$as_me: error: couldn't find mpi library for Fortran" >&2;}
+        { { $as_echo "$as_me:$LINENO: error: could not find mpi library for Fortran" >&5
+$as_echo "$as_me: error: could not find mpi library for Fortran" >&2;}
    { (exit 1); exit 1; }; }
         :
 else
@@ -8757,13 +8813,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:8760: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:8816: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8763: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:8819: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:8766: output\"" >&5)
+  (eval echo "\"\$as_me:8822: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -9968,7 +10024,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 9971 "configure"' > conftest.$ac_ext
+  echo '#line 10027 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -12645,11 +12701,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12648: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:12704: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12652: \$? = $ac_status" >&5
+   echo "$as_me:12708: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -12984,11 +13040,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:12987: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13043: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:12991: \$? = $ac_status" >&5
+   echo "$as_me:13047: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13089,11 +13145,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13092: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13148: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13096: \$? = $ac_status" >&5
+   echo "$as_me:13152: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13144,11 +13200,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13147: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13203: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13151: \$? = $ac_status" >&5
+   echo "$as_me:13207: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -16027,7 +16083,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16030 "configure"
+#line 16086 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16123,7 +16179,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 16126 "configure"
+#line 16182 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -18159,11 +18215,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:18162: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18218: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:18166: \$? = $ac_status" >&5
+   echo "$as_me:18222: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -18258,11 +18314,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:18261: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18317: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18265: \$? = $ac_status" >&5
+   echo "$as_me:18321: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -18310,11 +18366,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:18313: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:18369: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:18317: \$? = $ac_status" >&5
+   echo "$as_me:18373: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -19862,11 +19918,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19865: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:19921: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:19869: \$? = $ac_status" >&5
+   echo "$as_me:19925: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -19961,11 +20017,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:19964: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20020: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:19968: \$? = $ac_status" >&5
+   echo "$as_me:20024: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -20013,11 +20069,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:20016: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:20072: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:20020: \$? = $ac_status" >&5
+   echo "$as_me:20076: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -22217,6 +22273,21 @@ fi
 done
 
 
+# Check whether --enable-write was given.
+if test "${enable_write+set}" = set; then
+  enableval=$enable_write;
+fi
+
+ if test "x$enable_write" != "xno"; then
+  BUILD_WRITE_TRUE=
+  BUILD_WRITE_FALSE='#'
+else
+  BUILD_WRITE_TRUE='#'
+  BUILD_WRITE_FALSE=
+fi
+
+
+
 
 
 ac_ext=c
@@ -22711,33 +22782,77 @@ else
   HAVE_MXML_FALSE=
 fi
 
+ac_with_mxml=no
 
 
 # Check whether --with-mxml was given.
 if test "${with_mxml+set}" = set; then
-  withval=$with_mxml; MXML_LDFLAGS="-L$withval/lib";
-         MXML_CPPFLAGS="-I$withval/include";
+  withval=$with_mxml; :
 fi
 
 
-save_CPPFLAGS="$CPPFLAGS"
-save_LIBS="$LIBS"
-save_LDFLAGS="$LDFLAGS"
-LIBS="$LIBS -lmxml"
-if test -n "$MXML_LDFLAGS"; then
-    LDFLAGS="$LDFLAGS $MXML_LDFLAGS"
-elif test -n "$MXML_LIB"; then
-    LDFLAGS="$LDFLAGS $MXML_LIB"
-    MXML_LDFLAGS="$MXML_LIB"
+if test "x$with_mxml" == "xno"; then
+
+     if false; then
+  HAVE_MXML_TRUE=
+  HAVE_MXML_FALSE='#'
+else
+  HAVE_MXML_TRUE='#'
+  HAVE_MXML_FALSE=
 fi
-if test -n "$MXML_CPPFLAGS"; then
-    CPPFLAGS="$CPPFLAGS $MXML_CPPFLAGS"
-elif test -n "$MXML_INC"; then
-    CPPFLAGS="$CPPFLAGS $MXML_INC"
-    MXML_CPPFLAGS="$MXML_INC"
+
+
+elif test "x$with_mxml" == "xyes" -o "x$with_mxml" == "x"; then
+
+        if test -n "$MXML_LIB"; then
+         MXML_LDFLAGS="$MXML_LIB"
+    else
+                MXML_LDFLAGS=""
+    fi
+
+    if test -n "$MXML_INC"; then
+        MXML_CPPFLAGS="$MXML_INC"
+    else
+        MXML_CPPFLAGS=""
+    fi
+    ac_with_mxml=yes
+
+else
+
+        MXML_DIR=$with_mxml
+    MXML_CPPFLAGS="-I${MXML_DIR}/include"
+    if test -d "${MXML_DIR}/lib64"; then
+        MXML_LDFLAGS="-L${MXML_DIR}/lib64";
+    else
+        MXML_LDFLAGS="-L${MXML_DIR}/lib";
+    fi
+    ac_with_mxml=yes
+
 fi
 
-if test -z "${HAVE_MXML_TRUE}"; then
+
+if test "x$ac_with_mxml" == "xyes"; then
+
+
+# Check whether --with-mxml-libs was given.
+if test "${with_mxml_libs+set}" = set; then
+  withval=$with_mxml_libs; MXML_LIBS=$withval
+fi
+
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+
+    CPPFLAGS="$CPPFLAGS $MXML_CPPFLAGS"
+    LDFLAGS="$LDFLAGS $MXML_LDFLAGS"
+
+    if test -z "$MXML_LIBS"; then
+        MXML_LIBS="-lmxml"
+    fi
+    LIBS="$LIBS ${MXML_LIBS}"
+
+
 
 for ac_header in mxml.h
 do
@@ -22893,13 +23008,11 @@ fi
 
 done
 
-fi
 
-if test -z "${HAVE_MXML_TRUE}"; then
-    # Check for the Mini-XML library and headers
-    { $as_echo "$as_me:$LINENO: checking if mxml code can be linked" >&5
+    if test -z "${HAVE_MXML_TRUE}"; then
+                { $as_echo "$as_me:$LINENO: checking if mxml code can be linked" >&5
 $as_echo_n "checking if mxml code can be linked... " >&6; }
-    cat >conftest.$ac_ext <<_ACEOF
+        cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -22975,13 +23088,13 @@ rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
-            if test -z "${HAVE_MXML_FALSE}"; then
-        # Check for the Mini-XML library and headers
+                        if test -z "${HAVE_MXML_FALSE}"; then
 
-        LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS $PTHREAD_LIBS"
-        { $as_echo "$as_me:$LINENO: checking if mxml code can be linked using pthreads" >&5
+            LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
+            LIBS="$LIBS $PTHREAD_LIBS"
+            { $as_echo "$as_me:$LINENO: checking if mxml code can be linked using pthreads" >&5
 $as_echo_n "checking if mxml code can be linked using pthreads... " >&6; }
-        cat >conftest.$ac_ext <<_ACEOF
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -23065,31 +23178,38 @@ fi
 rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
+        fi
     fi
-fi
 
 
-LIBS="$save_LIBS"
-LDFLAGS="$save_LDFLAGS"
-CPPFLAGS="$save_CPPFLAGS"
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
 
 
 
 
 
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test -z "${HAVE_MXML_TRUE}"; then
+        if test -z "${HAVE_MXML_TRUE}"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_MXML 1
 _ACEOF
 
         :
-else
+    else
 
         :
+    fi
+
 fi
 
+if test -z "${HAVE_MXML_FALSE}" -a -z "${BUILD_WRITE_TRUE}"; then
+    { { $as_echo "$as_me:$LINENO: error: The ADIOS libraries for writing cannot be built without the MXML library. Either specify where the MXML library is found, or use --disable-write to build ADIOS for reading only." >&5
+$as_echo "$as_me: error: The ADIOS libraries for writing cannot be built without the MXML library. Either specify where the MXML library is found, or use --disable-write to build ADIOS for reading only." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
 
 ac_dcmf_lib_ok=no
 
@@ -25843,7 +25963,7 @@ fi
 if test "${with_phdf5+set}" = set; then
   withval=$with_phdf5; PHDF5_DIR=$withval
 else
-  with_phdf5=check
+  with_phdf5=no
 fi
 
 
@@ -26593,7 +26713,7 @@ fi
 if test "${with_nc4par+set}" = set; then
   withval=$with_nc4par; NC4PAR_DIR=$withval
 else
-  with_nc4par=check
+  with_nc4par=no
 fi
 
 
@@ -27875,16 +27995,8 @@ fi
     save_CPPFLAGS="$CPPFLAGS"
     save_LIBS="$LIBS"
     save_LDFLAGS="$LDFLAGS"
-    if test "x${ac_infiniband_lib_ok}" == "xyes"; then
-                LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    elif test "x${ac_portals_lib_ok}" == "xyes"; then
-        LIBS="$LIBS -ldart2 -lspaces"
-    elif test "x${ac_dmcf_lib_ok}" == "xyes"; then
-        LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    else
-        LIBS="$LIBS -ldspaces -ldscommon -ldart"
-    fi
-        LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
+                                            LIBS="$LIBS -ldspaces -ldscommon -ldart"
+    LDFLAGS="$LDFLAGS $DATASPACES_LDFLAGS"
     CPPFLAGS="$CPPFLAGS $DATASPACES_CPPFLAGS"
 
     if test -z "${HAVE_DATASPACES_TRUE}"; then
@@ -28089,7 +28201,7 @@ $as_echo "$ac_try_echo") >&5
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  DATASPACES_LIBS="-ldart2 -lspaces"
+  DATASPACES_LIBS="-ldspaces -ldscommon -ldart"
 else
   $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
@@ -29324,11 +29436,11 @@ fi
 
 search_list="$datatap_dir/thin_ib.h $datatap_dir/lib/thin_ib.h $datatap_dir/include/thin_ib.h $search_list /usr/include/thin_ib.h /usr/local/include/thin_ib.h /opt/ibpbio/include/thin_ib.h /opt/misc/include/thin_ib.h /opt/misc/include/$cercs_cv_archive/thin_ib.h"
 tmp_search_results=""
-echo "configure:29327: searching for $search_list " >&5
+echo "configure:29439: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29331: first found $tmp_search_results " >&5
+	echo "configure:29443: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29416,11 +29528,11 @@ fi
 
 search_list="$datatap_dir/libibclient.la $datatap_dir/lib/libibclient.la $datatap_dir/include/libibclient.la $search_list /usr/lib/libibclient.la /usr/local/lib/libibclient.la /opt/ibpbio/lib/libibclient.la /opt/misc/lib/libibclient.la /opt/misc/lib/$cercs_cv_archive/libibclient.la"
 tmp_search_results=""
-echo "configure:29419: searching for $search_list " >&5
+echo "configure:29531: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29423: first found $tmp_search_results " >&5
+	echo "configure:29535: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29489,11 +29601,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:29492: searching for $search_list " >&5
+echo "configure:29604: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29496: first found $tmp_search_results " >&5
+	echo "configure:29608: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29531,11 +29643,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:29534: searching for $search_list " >&5
+echo "configure:29646: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29538: first found $tmp_search_results " >&5
+	echo "configure:29650: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29659,11 +29771,11 @@ fi
 
 search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
 tmp_search_results=""
-echo "configure:29662: searching for $search_list " >&5
+echo "configure:29774: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29666: first found $tmp_search_results " >&5
+	echo "configure:29778: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29751,11 +29863,11 @@ fi
 
 search_list="$datatap_dir/libffs.la $datatap_dir/lib/libffs.la $datatap_dir/include/libffs.la $search_list /usr/lib/libffs.la /usr/local/lib/libffs.la /opt/ffs/lib/libffs.la /opt/misc/lib/libffs.la /opt/misc/lib/$cercs_cv_archive/libffs.la"
 tmp_search_results=""
-echo "configure:29754: searching for $search_list " >&5
+echo "configure:29866: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29758: first found $tmp_search_results " >&5
+	echo "configure:29870: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29824,11 +29936,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:29827: searching for $search_list " >&5
+echo "configure:29939: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29831: first found $tmp_search_results " >&5
+	echo "configure:29943: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29866,11 +29978,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:29869: searching for $search_list " >&5
+echo "configure:29981: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:29873: first found $tmp_search_results " >&5
+	echo "configure:29985: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -29994,11 +30106,11 @@ fi
 
 search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list /usr/include/gen_thread.h /usr/local/include/gen_thread.h /opt/gen_thread/include/gen_thread.h /opt/misc/include/gen_thread.h /opt/misc/include/$cercs_cv_archive/gen_thread.h"
 tmp_search_results=""
-echo "configure:29997: searching for $search_list " >&5
+echo "configure:30109: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30001: first found $tmp_search_results " >&5
+	echo "configure:30113: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30086,11 +30198,11 @@ fi
 
 search_list="$datatap_dir/libgen_thread.la $datatap_dir/lib/libgen_thread.la $datatap_dir/include/libgen_thread.la $search_list /usr/lib/libgen_thread.la /usr/local/lib/libgen_thread.la /opt/gen_thread/lib/libgen_thread.la /opt/misc/lib/libgen_thread.la /opt/misc/lib/$cercs_cv_archive/libgen_thread.la"
 tmp_search_results=""
-echo "configure:30089: searching for $search_list " >&5
+echo "configure:30201: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30093: first found $tmp_search_results " >&5
+	echo "configure:30205: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30159,11 +30271,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:30162: searching for $search_list " >&5
+echo "configure:30274: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30166: first found $tmp_search_results " >&5
+	echo "configure:30278: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30201,11 +30313,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:30204: searching for $search_list " >&5
+echo "configure:30316: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30208: first found $tmp_search_results " >&5
+	echo "configure:30320: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30352,11 +30464,11 @@ fi
 
 search_list="$datatap_dir/thin_portal.h $datatap_dir/lib/thin_portal.h $datatap_dir/include/thin_portal.h $search_list /usr/include/thin_portal.h /usr/local/include/thin_portal.h /opt/ptlpbio/include/thin_portal.h /opt/misc/include/thin_portal.h /opt/misc/include/$cercs_cv_archive/thin_portal.h"
 tmp_search_results=""
-echo "configure:30355: searching for $search_list " >&5
+echo "configure:30467: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30359: first found $tmp_search_results " >&5
+	echo "configure:30471: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30444,11 +30556,11 @@ fi
 
 search_list="$datatap_dir/libptlclient.a $datatap_dir/lib/libptlclient.a $datatap_dir/include/libptlclient.a $search_list /usr/lib/libptlclient.a /usr/local/lib/libptlclient.a /opt/ptlpbio/lib/libptlclient.a /opt/misc/lib/libptlclient.a /opt/misc/lib/$cercs_cv_archive/libptlclient.a"
 tmp_search_results=""
-echo "configure:30447: searching for $search_list " >&5
+echo "configure:30559: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30451: first found $tmp_search_results " >&5
+	echo "configure:30563: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30517,11 +30629,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:30520: searching for $search_list " >&5
+echo "configure:30632: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30524: first found $tmp_search_results " >&5
+	echo "configure:30636: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30559,11 +30671,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:30562: searching for $search_list " >&5
+echo "configure:30674: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30566: first found $tmp_search_results " >&5
+	echo "configure:30678: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30719,11 +30831,11 @@ fi
 
 search_list="$datatap_dir/thin_ib.h $datatap_dir/lib/thin_ib.h $datatap_dir/include/thin_ib.h $search_list /usr/include/thin_ib.h /usr/local/include/thin_ib.h /opt/ibpbio/include/thin_ib.h /opt/misc/include/thin_ib.h /opt/misc/include/$cercs_cv_archive/thin_ib.h"
 tmp_search_results=""
-echo "configure:30722: searching for $search_list " >&5
+echo "configure:30834: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30726: first found $tmp_search_results " >&5
+	echo "configure:30838: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30811,11 +30923,11 @@ fi
 
 search_list="$datatap_dir/libibclient.la $datatap_dir/lib/libibclient.la $datatap_dir/include/libibclient.la $search_list /usr/lib/libibclient.la /usr/local/lib/libibclient.la /opt/ibpbio/lib/libibclient.la /opt/misc/lib/libibclient.la /opt/misc/lib/$cercs_cv_archive/libibclient.la"
 tmp_search_results=""
-echo "configure:30814: searching for $search_list " >&5
+echo "configure:30926: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30818: first found $tmp_search_results " >&5
+	echo "configure:30930: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30884,11 +30996,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:30887: searching for $search_list " >&5
+echo "configure:30999: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30891: first found $tmp_search_results " >&5
+	echo "configure:31003: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -30926,11 +31038,11 @@ else
 
 search_list="$PWD/../ibpbio $PWD/../../ibpbio $PWD/../../../ibpbio"
 tmp_search_results=""
-echo "configure:30929: searching for $search_list " >&5
+echo "configure:31041: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:30933: first found $tmp_search_results " >&5
+	echo "configure:31045: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31054,11 +31166,11 @@ fi
 
 search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
 tmp_search_results=""
-echo "configure:31057: searching for $search_list " >&5
+echo "configure:31169: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31061: first found $tmp_search_results " >&5
+	echo "configure:31173: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31146,11 +31258,11 @@ fi
 
 search_list="$datatap_dir/libffs.la $datatap_dir/lib/libffs.la $datatap_dir/include/libffs.la $search_list /usr/lib/libffs.la /usr/local/lib/libffs.la /opt/ffs/lib/libffs.la /opt/misc/lib/libffs.la /opt/misc/lib/$cercs_cv_archive/libffs.la"
 tmp_search_results=""
-echo "configure:31149: searching for $search_list " >&5
+echo "configure:31261: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31153: first found $tmp_search_results " >&5
+	echo "configure:31265: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31219,11 +31331,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31222: searching for $search_list " >&5
+echo "configure:31334: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31226: first found $tmp_search_results " >&5
+	echo "configure:31338: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31261,11 +31373,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:31264: searching for $search_list " >&5
+echo "configure:31376: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31268: first found $tmp_search_results " >&5
+	echo "configure:31380: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31389,11 +31501,11 @@ fi
 
 search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list /usr/include/gen_thread.h /usr/local/include/gen_thread.h /opt/gen_thread/include/gen_thread.h /opt/misc/include/gen_thread.h /opt/misc/include/$cercs_cv_archive/gen_thread.h"
 tmp_search_results=""
-echo "configure:31392: searching for $search_list " >&5
+echo "configure:31504: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31396: first found $tmp_search_results " >&5
+	echo "configure:31508: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31481,11 +31593,11 @@ fi
 
 search_list="$datatap_dir/libgen_thread.la $datatap_dir/lib/libgen_thread.la $datatap_dir/include/libgen_thread.la $search_list /usr/lib/libgen_thread.la /usr/local/lib/libgen_thread.la /opt/gen_thread/lib/libgen_thread.la /opt/misc/lib/libgen_thread.la /opt/misc/lib/$cercs_cv_archive/libgen_thread.la"
 tmp_search_results=""
-echo "configure:31484: searching for $search_list " >&5
+echo "configure:31596: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31488: first found $tmp_search_results " >&5
+	echo "configure:31600: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31554,11 +31666,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31557: searching for $search_list " >&5
+echo "configure:31669: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31561: first found $tmp_search_results " >&5
+	echo "configure:31673: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31596,11 +31708,11 @@ else
 
 search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
 tmp_search_results=""
-echo "configure:31599: searching for $search_list " >&5
+echo "configure:31711: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31603: first found $tmp_search_results " >&5
+	echo "configure:31715: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31747,11 +31859,11 @@ fi
 
 search_list="$datatap_dir/thin_portal.h $datatap_dir/lib/thin_portal.h $datatap_dir/include/thin_portal.h $search_list /usr/include/thin_portal.h /usr/local/include/thin_portal.h /opt/ptlpbio/include/thin_portal.h /opt/misc/include/thin_portal.h /opt/misc/include/$cercs_cv_archive/thin_portal.h"
 tmp_search_results=""
-echo "configure:31750: searching for $search_list " >&5
+echo "configure:31862: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31754: first found $tmp_search_results " >&5
+	echo "configure:31866: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31839,11 +31951,11 @@ fi
 
 search_list="$datatap_dir/libptlclient.a $datatap_dir/lib/libptlclient.a $datatap_dir/include/libptlclient.a $search_list /usr/lib/libptlclient.a /usr/local/lib/libptlclient.a /opt/ptlpbio/lib/libptlclient.a /opt/misc/lib/libptlclient.a /opt/misc/lib/$cercs_cv_archive/libptlclient.a"
 tmp_search_results=""
-echo "configure:31842: searching for $search_list " >&5
+echo "configure:31954: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31846: first found $tmp_search_results " >&5
+	echo "configure:31958: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31912,11 +32024,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:31915: searching for $search_list " >&5
+echo "configure:32027: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31919: first found $tmp_search_results " >&5
+	echo "configure:32031: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -31954,11 +32066,11 @@ else
 
 search_list="$PWD/../ptlpbio $PWD/../../ptlpbio $PWD/../../../ptlpbio"
 tmp_search_results=""
-echo "configure:31957: searching for $search_list " >&5
+echo "configure:32069: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:31961: first found $tmp_search_results " >&5
+	echo "configure:32073: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32163,11 +32275,11 @@ fi
 
 search_list="$datatap_dir/evpath.h $datatap_dir/lib/evpath.h $datatap_dir/include/evpath.h $search_list /usr/include/evpath.h /usr/local/include/evpath.h /opt/evpath/include/evpath.h /opt/misc/include/evpath.h /opt/misc/include/$cercs_cv_archive/evpath.h"
 tmp_search_results=""
-echo "configure:32166: searching for $search_list " >&5
+echo "configure:32278: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32170: first found $tmp_search_results " >&5
+	echo "configure:32282: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32255,11 +32367,11 @@ fi
 
 search_list="$datatap_dir/libevpath.a $datatap_dir/lib/libevpath.a $datatap_dir/include/libevpath.a $search_list /usr/lib/libevpath.a /usr/local/lib/libevpath.a /opt/evpath/lib/libevpath.a /opt/misc/lib/libevpath.a /opt/misc/lib/$cercs_cv_archive/libevpath.a"
 tmp_search_results=""
-echo "configure:32258: searching for $search_list " >&5
+echo "configure:32370: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32262: first found $tmp_search_results " >&5
+	echo "configure:32374: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32328,11 +32440,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:32331: searching for $search_list " >&5
+echo "configure:32443: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32335: first found $tmp_search_results " >&5
+	echo "configure:32447: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32370,11 +32482,11 @@ else
 
 search_list="$PWD/../evpath $PWD/../../evpath $PWD/../../../evpath"
 tmp_search_results=""
-echo "configure:32373: searching for $search_list " >&5
+echo "configure:32485: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32377: first found $tmp_search_results " >&5
+	echo "configure:32489: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32498,11 +32610,11 @@ fi
 
 search_list="$datatap_dir/ffs.h $datatap_dir/lib/ffs.h $datatap_dir/include/ffs.h $search_list /usr/include/ffs.h /usr/local/include/ffs.h /opt/ffs/include/ffs.h /opt/misc/include/ffs.h /opt/misc/include/$cercs_cv_archive/ffs.h"
 tmp_search_results=""
-echo "configure:32501: searching for $search_list " >&5
+echo "configure:32613: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32505: first found $tmp_search_results " >&5
+	echo "configure:32617: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32590,11 +32702,11 @@ fi
 
 search_list="$datatap_dir/libffs.a $datatap_dir/lib/libffs.a $datatap_dir/include/libffs.a $search_list /usr/lib/libffs.a /usr/local/lib/libffs.a /opt/ffs/lib/libffs.a /opt/misc/lib/libffs.a /opt/misc/lib/$cercs_cv_archive/libffs.a"
 tmp_search_results=""
-echo "configure:32593: searching for $search_list " >&5
+echo "configure:32705: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32597: first found $tmp_search_results " >&5
+	echo "configure:32709: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32663,11 +32775,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32666: searching for $search_list " >&5
+echo "configure:32778: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32670: first found $tmp_search_results " >&5
+	echo "configure:32782: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32705,11 +32817,11 @@ else
 
 search_list="$PWD/../ffs $PWD/../../ffs $PWD/../../../ffs"
 tmp_search_results=""
-echo "configure:32708: searching for $search_list " >&5
+echo "configure:32820: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32712: first found $tmp_search_results " >&5
+	echo "configure:32824: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32833,11 +32945,11 @@ fi
 
 search_list="$datatap_dir/atl.h $datatap_dir/lib/atl.h $datatap_dir/include/atl.h $search_list /usr/include/atl.h /usr/local/include/atl.h /opt/atl/include/atl.h /opt/misc/include/atl.h /opt/misc/include/$cercs_cv_archive/atl.h"
 tmp_search_results=""
-echo "configure:32836: searching for $search_list " >&5
+echo "configure:32948: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32840: first found $tmp_search_results " >&5
+	echo "configure:32952: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32925,11 +33037,11 @@ fi
 
 search_list="$datatap_dir/libatl.a $datatap_dir/lib/libatl.a $datatap_dir/include/libatl.a $search_list /usr/lib/libatl.a /usr/local/lib/libatl.a /opt/atl/lib/libatl.a /opt/misc/lib/libatl.a /opt/misc/lib/$cercs_cv_archive/libatl.a"
 tmp_search_results=""
-echo "configure:32928: searching for $search_list " >&5
+echo "configure:33040: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:32932: first found $tmp_search_results " >&5
+	echo "configure:33044: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -32998,11 +33110,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:33001: searching for $search_list " >&5
+echo "configure:33113: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33005: first found $tmp_search_results " >&5
+	echo "configure:33117: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33040,11 +33152,11 @@ else
 
 search_list="$PWD/../atl $PWD/../../atl $PWD/../../../atl"
 tmp_search_results=""
-echo "configure:33043: searching for $search_list " >&5
+echo "configure:33155: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33047: first found $tmp_search_results " >&5
+	echo "configure:33159: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33096,22 +33208,22 @@ if test -z "$with_local_specified"; then
 
 
 
-# Check whether --with-gen_thread was given.
-if test "${with_gen_thread+set}" = set; then
-  withval=$with_gen_thread;
+# Check whether --with-dill was given.
+if test "${with_dill+set}" = set; then
+  withval=$with_dill;
 fi
 
 
-if test -n "$with_gen_thread"; then
-unset cercs_cv_gen_thread_include_arg
-unset cercs_cv_gen_thread_link_arg
-if test `echo $with_gen_thread | sed 's/\(.\).*/\1/g'` != "/"; then
-with_gen_thread=`pwd`/$with_gen_thread
+if test -n "$with_dill"; then
+unset cercs_cv_dill_include_arg
+unset cercs_cv_dill_link_arg
+if test `echo $with_dill | sed 's/\(.\).*/\1/g'` != "/"; then
+with_dill=`pwd`/$with_dill
 fi
 fi
-{ $as_echo "$as_me:$LINENO: checking needed include args for gen_thread package" >&5
-$as_echo_n "checking needed include args for gen_thread package... " >&6; }
-if test "${cercs_cv_gen_thread_include_arg+set}" = set; then
+{ $as_echo "$as_me:$LINENO: checking needed include args for dill package" >&5
+$as_echo_n "checking needed include args for dill package... " >&6; }
+if test "${cercs_cv_dill_include_arg+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
 
@@ -33119,60 +33231,60 @@ else
 
 
 cercs_tmp=""
-search_list="./gen_thread.h"
+search_list="./dill.h"
 CHAOS_HOMEDIR=""
 if test -n "$CSH"; then
 CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
 fi
-if test -n "$with_gen_thread"; then
-if test `echo $with_gen_thread | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_gen_thread" | csh -sf 2>/dev/null` || EXPANDED=""
+if test -n "$with_dill"; then
+if test `echo $with_dill | cut -c1` = "~"; then
+EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
 else
-EXPANDED=$with_gen_thread
+EXPANDED=$with_dill
 fi
 
 echo "Datatap = $datatap_dir"
 
-search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list $EXPANDED/gen_thread.h $EXPANDED/include/gen_thread.h $EXPANDED/share/gen_thread.h $EXPANDED/$cercs_cv_archive/gen_thread.h $EXPANDED/$cercs_cv_archive/include/gen_thread.h $EXPANDED/gen_thread/gen_thread.h $EXPANDED/gen_thread/$cercs_cv_archive/gen_thread.h $EXPANDED/gen_thread/include/gen_thread.h $EXPANDED/gen_thread/include/$cercs_cv_archive/gen_thread.h"
+search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list $EXPANDED/dill.h $EXPANDED/include/dill.h $EXPANDED/share/dill.h $EXPANDED/$cercs_cv_archive/dill.h $EXPANDED/$cercs_cv_archive/include/dill.h $EXPANDED/dill/dill.h $EXPANDED/dill/$cercs_cv_archive/dill.h $EXPANDED/dill/include/dill.h $EXPANDED/dill/include/$cercs_cv_archive/dill.h"
 fi
 if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../gen_thread/gen_thread.h `pwd`/../include/gen_thread.h `pwd`/../share/gen_thread.h"
+search_list="$search_list `pwd`/../dill/dill.h `pwd`/../include/dill.h `pwd`/../share/dill.h"
 if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/gen_thread/gen_thread.h $HOME/$cercs_cv_archive/include/gen_thread.h $HOME/include/gen_thread.h"
+search_list="$search_list $HOME/dill/dill.h $HOME/$cercs_cv_archive/include/dill.h $HOME/include/dill.h"
 fi
 fi
 if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/gen_thread/include/gen_thread.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/gen_thread.h $CHAOS_HOMEDIR/gen_thread/$cercs_cv_archive/include/gen_thread.h $CHAOS_HOMEDIR/gen_thread/include/gen_thread.h $CHAOS_HOMEDIR/include/gen_thread.h"
+search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/include/dill.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/include/dill.h $CHAOS_HOMEDIR/include/dill.h"
 fi
 if test "$libdir" != '${exec_prefix}/lib'; then
 tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/gen_thread.h $search_list"
+search_list="$tmpdir/dill.h $search_list"
 fi
 if test "$exec_prefix" != "NONE"; then
 tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/gen_thread.h $search_list"
+search_list="$tmpdir/lib/dill.h $search_list"
 fi
 if test "$includedir" != '${prefix}/include'; then
 tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/gen_thread.h $search_list"
+search_list="$tmpdir/dill.h $search_list"
 fi
 if test "$prefix" != "NONE"; then
 tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/gen_thread.h $search_list"
+search_list="$tmpdir/include/dill.h $search_list"
 fi
 if test "include" == "lib"; then
   for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/gen_thread.h"
+     search_list="$search_list $tmp_lib_value/dill.h"
   done
 fi
 
-search_list="$datatap_dir/gen_thread.h $datatap_dir/lib/gen_thread.h $datatap_dir/include/gen_thread.h $search_list /usr/include/gen_thread.h /usr/local/include/gen_thread.h /opt/gen_thread/include/gen_thread.h /opt/misc/include/gen_thread.h /opt/misc/include/$cercs_cv_archive/gen_thread.h"
+search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list /usr/include/dill.h /usr/local/include/dill.h /opt/dill/include/dill.h /opt/misc/include/dill.h /opt/misc/include/$cercs_cv_archive/dill.h"
 tmp_search_results=""
-echo "configure:33171: searching for $search_list " >&5
+echo "configure:33283: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33175: first found $tmp_search_results " >&5
+	echo "configure:33287: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33181,19 +33293,19 @@ if test -n "$tmp_search_results"; then
 cercs_tmp=$tmp_search_results
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/gen_thread.h"; then
-cercs_cv_gen_thread_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.gen_thread.h##g"`
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/dill.h"; then
+cercs_cv_dill_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.dill.h##g"`
 fi
 
 fi
 
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_gen_thread_include_arg" >&5
-$as_echo "$cercs_cv_gen_thread_include_arg" >&6; }
-if test -n "$cercs_cv_gen_thread_include_arg"; then
-arg="$cercs_cv_gen_thread_include_arg"
+{ $as_echo "$as_me:$LINENO: result: $cercs_cv_dill_include_arg" >&5
+$as_echo "$cercs_cv_dill_include_arg" >&6; }
+if test -n "$cercs_cv_dill_include_arg"; then
+arg="$cercs_cv_dill_include_arg"
 no_dash_arg=`echo $arg | sed 's/^-//g'`
 if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "gen_thread"` -eq 0; then
+if test `echo $arg | grep -c "dill"` -eq 0; then
 DT_CPPFLAGS="$DT_CPPFLAGS $arg";
 else
 DT_CPPFLAGS="$arg $DT_CPPFLAGS"
@@ -33201,9 +33313,9 @@ fi
 fi
 fi
 
-{ $as_echo "$as_me:$LINENO: checking needed link args for gen_thread package" >&5
-$as_echo_n "checking needed link args for gen_thread package... " >&6; }
-if test "${cercs_cv_gen_thread_link_dir+set}" = set; then
+{ $as_echo "$as_me:$LINENO: checking needed link args for dill package" >&5
+$as_echo_n "checking needed link args for dill package... " >&6; }
+if test "${cercs_cv_dill_link_dir+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
 
@@ -33211,60 +33323,60 @@ else
 
 
 cercs_tmp=""
-search_list="./libgen_thread.a"
+search_list="./libdill.a"
 CHAOS_HOMEDIR=""
 if test -n "$CSH"; then
 CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
 fi
-if test -n "$with_gen_thread"; then
-if test `echo $with_gen_thread | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_gen_thread" | csh -sf 2>/dev/null` || EXPANDED=""
+if test -n "$with_dill"; then
+if test `echo $with_dill | cut -c1` = "~"; then
+EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
 else
-EXPANDED=$with_gen_thread
+EXPANDED=$with_dill
 fi
 
 echo "Datatap = $datatap_dir"
 
-search_list="$datatap_dir/libgen_thread.a $datatap_dir/lib/libgen_thread.a $datatap_dir/include/libgen_thread.a $search_list $EXPANDED/libgen_thread.a $EXPANDED/lib/libgen_thread.a $EXPANDED/share/libgen_thread.a $EXPANDED/$cercs_cv_archive/libgen_thread.a $EXPANDED/$cercs_cv_archive/lib/libgen_thread.a $EXPANDED/gen_thread/libgen_thread.a $EXPANDED/gen_thread/$cercs_cv_archive/libgen_thread.a $EXPANDED/gen_thread/lib/libgen_thread.a $EXPANDED/gen_thread/lib/$cercs_cv_archive/libgen_thread.a"
+search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list $EXPANDED/libdill.a $EXPANDED/lib/libdill.a $EXPANDED/share/libdill.a $EXPANDED/$cercs_cv_archive/libdill.a $EXPANDED/$cercs_cv_archive/lib/libdill.a $EXPANDED/dill/libdill.a $EXPANDED/dill/$cercs_cv_archive/libdill.a $EXPANDED/dill/lib/libdill.a $EXPANDED/dill/lib/$cercs_cv_archive/libdill.a"
 fi
 if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../gen_thread/libgen_thread.a `pwd`/../lib/libgen_thread.a `pwd`/../share/libgen_thread.a"
+search_list="$search_list `pwd`/../dill/libdill.a `pwd`/../lib/libdill.a `pwd`/../share/libdill.a"
 if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/gen_thread/libgen_thread.a $HOME/$cercs_cv_archive/lib/libgen_thread.a $HOME/lib/libgen_thread.a"
+search_list="$search_list $HOME/dill/libdill.a $HOME/$cercs_cv_archive/lib/libdill.a $HOME/lib/libdill.a"
 fi
 fi
 if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/gen_thread/lib/libgen_thread.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libgen_thread.a $CHAOS_HOMEDIR/gen_thread/$cercs_cv_archive/lib/libgen_thread.a $CHAOS_HOMEDIR/gen_thread/lib/libgen_thread.a $CHAOS_HOMEDIR/lib/libgen_thread.a"
+search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/lib/libdill.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/lib/libdill.a $CHAOS_HOMEDIR/lib/libdill.a"
 fi
 if test "$libdir" != '${exec_prefix}/lib'; then
 tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libgen_thread.a $search_list"
+search_list="$tmpdir/libdill.a $search_list"
 fi
 if test "$exec_prefix" != "NONE"; then
 tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libgen_thread.a $search_list"
+search_list="$tmpdir/lib/libdill.a $search_list"
 fi
 if test "$includedir" != '${prefix}/include'; then
 tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libgen_thread.a $search_list"
+search_list="$tmpdir/libdill.a $search_list"
 fi
 if test "$prefix" != "NONE"; then
 tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libgen_thread.a $search_list"
+search_list="$tmpdir/lib/libdill.a $search_list"
 fi
 if test "lib" == "lib"; then
   for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libgen_thread.a"
+     search_list="$search_list $tmp_lib_value/libdill.a"
   done
 fi
 
-search_list="$datatap_dir/libgen_thread.a $datatap_dir/lib/libgen_thread.a $datatap_dir/include/libgen_thread.a $search_list /usr/lib/libgen_thread.a /usr/local/lib/libgen_thread.a /opt/gen_thread/lib/libgen_thread.a /opt/misc/lib/libgen_thread.a /opt/misc/lib/$cercs_cv_archive/libgen_thread.a"
+search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list /usr/lib/libdill.a /usr/local/lib/libdill.a /opt/dill/lib/libdill.a /opt/misc/lib/libdill.a /opt/misc/lib/$cercs_cv_archive/libdill.a"
 tmp_search_results=""
-echo "configure:33263: searching for $search_list " >&5
+echo "configure:33375: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33267: first found $tmp_search_results " >&5
+	echo "configure:33379: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33273,30 +33385,30 @@ if test -n "$tmp_search_results"; then
 cercs_tmp=$tmp_search_results
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libgen_thread.a"; then
-cercs_cv_gen_thread_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libgen_thread.a//g"`
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "libdill.a"; then
+cercs_cv_dill_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libdill.a//g"`
 else
-cercs_cv_gen_thread_link_dir=""
+cercs_cv_dill_link_dir=""
 fi
 
 fi
 
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_gen_thread_link_dir" >&5
-$as_echo "$cercs_cv_gen_thread_link_dir" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cercs_cv_dill_link_dir" >&5
+$as_echo "$cercs_cv_dill_link_dir" >&6; }
 ld_arg="-L"
 new_flags=$LDFLAGS
-cercs_cv_gen_thread_link_arg=`echo $cercs_cv_gen_thread_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_gen_thread_link_arg"; then
-arg=$cercs_cv_gen_thread_link_arg
+cercs_cv_dill_link_arg=`echo $cercs_cv_dill_link_dir | sed "/./ s/^/$ld_arg/1"`
+if test -n "$cercs_cv_dill_link_arg"; then
+arg=$cercs_cv_dill_link_arg
 no_dash_arg=`echo $arg | sed 's/^-//g'`
 if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libgen_thread.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_gen_thread_link_dir/$root.la; then
+root=`echo libdill.a | sed 's/\..*//'`
+if test ! -r $cercs_cv_dill_link_dir/$root.la; then
 if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_gen_thread_link_arg "`echo $cercs_cv_gen_thread_link_dir | sed "/./ s/^/-R/1"`
+arg="$cercs_cv_dill_link_arg "`echo $cercs_cv_dill_link_dir | sed "/./ s/^/-R/1"`
 fi
 fi
-if test `echo $arg | grep -c "gen_thread"` -eq 0; then
+if test `echo $arg | grep -c "dill"` -eq 0; then
 new_flags="$new_flags $arg"
 else
 new_flags="$arg $new_flags"
@@ -33311,126 +33423,6 @@ else
 
 
 
-# Check whether --with-gen_thread was given.
-if test "${with_gen_thread+set}" = set; then
-  withval=$with_gen_thread;
-fi
-
-
-if test -n "$with_gen_thread"; then
-unset cercs_cv_gen_thread_include_arg
-unset cercs_cv_gen_thread_link_arg
-if test `echo $with_gen_thread | sed 's/\(.\).*/\1/g'` != "/"; then
-with_gen_thread=`pwd`/$with_gen_thread
-fi
-fi
-{ $as_echo "$as_me:$LINENO: checking needed include args for gen_thread package" >&5
-$as_echo_n "checking needed include args for gen_thread package... " >&6; }
-if test "${cercs_cv_gen_thread_include_arg+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
-tmp_search_results=""
-echo "configure:33336: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:33340: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/gen_thread.h"; then
-cercs_cv_gen_thread_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.gen_thread.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_gen_thread_include_arg" >&5
-$as_echo "$cercs_cv_gen_thread_include_arg" >&6; }
-if test -n "$cercs_cv_gen_thread_include_arg"; then
-arg="$cercs_cv_gen_thread_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "gen_thread"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:$LINENO: checking needed link args for gen_thread package" >&5
-$as_echo_n "checking needed link args for gen_thread package... " >&6; }
-if test "${cercs_cv_gen_thread_link_dir+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../gen_thread $PWD/../../gen_thread $PWD/../../../gen_thread"
-tmp_search_results=""
-echo "configure:33378: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:33382: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libgen_thread.a"; then
-cercs_cv_gen_thread_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libgen_thread.a//g"`
-else
-cercs_cv_gen_thread_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_gen_thread_link_dir" >&5
-$as_echo "$cercs_cv_gen_thread_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_gen_thread_link_arg=`echo $cercs_cv_gen_thread_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_gen_thread_link_arg"; then
-arg=$cercs_cv_gen_thread_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libgen_thread.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_gen_thread_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_gen_thread_link_arg "`echo $cercs_cv_gen_thread_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "gen_thread"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-fi
-
-
-
-
-if test -z "$with_local_specified"; then
-
-
-
-
 # Check whether --with-dill was given.
 if test "${with_dill+set}" = set; then
   withval=$with_dill;
@@ -33451,228 +33443,13 @@ if test "${cercs_cv_dill_include_arg+set}" = set; then
 else
 
 
-
-
-cercs_tmp=""
-search_list="./dill.h"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_dill"; then
-if test `echo $with_dill | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_dill
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list $EXPANDED/dill.h $EXPANDED/include/dill.h $EXPANDED/share/dill.h $EXPANDED/$cercs_cv_archive/dill.h $EXPANDED/$cercs_cv_archive/include/dill.h $EXPANDED/dill/dill.h $EXPANDED/dill/$cercs_cv_archive/dill.h $EXPANDED/dill/include/dill.h $EXPANDED/dill/include/$cercs_cv_archive/dill.h"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../dill/dill.h `pwd`/../include/dill.h `pwd`/../share/dill.h"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/dill/dill.h $HOME/$cercs_cv_archive/include/dill.h $HOME/include/dill.h"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/include/dill.h $CHAOS_HOMEDIR/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/$cercs_cv_archive/include/dill.h $CHAOS_HOMEDIR/dill/include/dill.h $CHAOS_HOMEDIR/include/dill.h"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/dill.h $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/dill.h $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/dill.h $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/include/dill.h $search_list"
-fi
-if test "include" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/dill.h"
-  done
-fi
-
-search_list="$datatap_dir/dill.h $datatap_dir/lib/dill.h $datatap_dir/include/dill.h $search_list /usr/include/dill.h /usr/local/include/dill.h /opt/dill/include/dill.h /opt/misc/include/dill.h /opt/misc/include/$cercs_cv_archive/dill.h"
+search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:33506: searching for $search_list " >&5
+echo "configure:33448: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33510: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/dill.h"; then
-cercs_cv_dill_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.dill.h##g"`
-fi
-
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_dill_include_arg" >&5
-$as_echo "$cercs_cv_dill_include_arg" >&6; }
-if test -n "$cercs_cv_dill_include_arg"; then
-arg="$cercs_cv_dill_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "dill"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
-else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
-fi
-
-{ $as_echo "$as_me:$LINENO: checking needed link args for dill package" >&5
-$as_echo_n "checking needed link args for dill package... " >&6; }
-if test "${cercs_cv_dill_link_dir+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-
-
-
-
-cercs_tmp=""
-search_list="./libdill.a"
-CHAOS_HOMEDIR=""
-if test -n "$CSH"; then
-CHAOS_HOMEDIR=`echo "echo ~chaos" | csh -sf  2>/dev/null | sed 's%/$%%'` || CHAOS_HOMEDIR=""
-fi
-if test -n "$with_dill"; then
-if test `echo $with_dill | cut -c1` = "~"; then
-EXPANDED=`echo "echo $with_dill" | csh -sf 2>/dev/null` || EXPANDED=""
-else
-EXPANDED=$with_dill
-fi
-
-echo "Datatap = $datatap_dir"
-
-search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list $EXPANDED/libdill.a $EXPANDED/lib/libdill.a $EXPANDED/share/libdill.a $EXPANDED/$cercs_cv_archive/libdill.a $EXPANDED/$cercs_cv_archive/lib/libdill.a $EXPANDED/dill/libdill.a $EXPANDED/dill/$cercs_cv_archive/libdill.a $EXPANDED/dill/lib/libdill.a $EXPANDED/dill/lib/$cercs_cv_archive/libdill.a"
-fi
-if test -z "$with_installed_specified"; then
-search_list="$search_list `pwd`/../dill/libdill.a `pwd`/../lib/libdill.a `pwd`/../share/libdill.a"
-if test "$CHAOS_HOMEDIR" != "$HOME"; then
-search_list="$search_list $HOME/dill/libdill.a $HOME/$cercs_cv_archive/lib/libdill.a $HOME/lib/libdill.a"
-fi
-fi
-if test -n "$CHAOS_HOMEDIR" -a -n "$cercs_cv_archive"; then
-search_list="$search_list $CHAOS_HOMEDIR/$cercs_cv_archive/dill/lib/libdill.a $CHAOS_HOMEDIR/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/$cercs_cv_archive/lib/libdill.a $CHAOS_HOMEDIR/dill/lib/libdill.a $CHAOS_HOMEDIR/lib/libdill.a"
-fi
-if test "$libdir" != '${exec_prefix}/lib'; then
-tmpdir=`echo ${libdir} |  sed 's%/$%%'`
-search_list="$tmpdir/libdill.a $search_list"
-fi
-if test "$exec_prefix" != "NONE"; then
-tmpdir=`echo ${exec_prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libdill.a $search_list"
-fi
-if test "$includedir" != '${prefix}/include'; then
-tmpdir=`echo ${includedir} |  sed 's%/$%%'`
-search_list="$tmpdir/libdill.a $search_list"
-fi
-if test "$prefix" != "NONE"; then
-tmpdir=`echo ${prefix} |  sed 's%/$%%'`
-search_list="$tmpdir/lib/libdill.a $search_list"
-fi
-if test "lib" == "lib"; then
-  for tmp_lib_value in $sys_lib_search_path_spec; do
-     search_list="$search_list $tmp_lib_value/libdill.a"
-  done
-fi
-
-search_list="$datatap_dir/libdill.a $datatap_dir/lib/libdill.a $datatap_dir/include/libdill.a $search_list /usr/lib/libdill.a /usr/local/lib/libdill.a /opt/dill/lib/libdill.a /opt/misc/lib/libdill.a /opt/misc/lib/$cercs_cv_archive/libdill.a"
-tmp_search_results=""
-echo "configure:33598: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:33602: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libdill.a"; then
-cercs_cv_dill_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libdill.a//g"`
-else
-cercs_cv_dill_link_dir=""
-fi
-
-fi
-
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_dill_link_dir" >&5
-$as_echo "$cercs_cv_dill_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_dill_link_arg=`echo $cercs_cv_dill_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_dill_link_arg"; then
-arg=$cercs_cv_dill_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libdill.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_dill_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_dill_link_arg "`echo $cercs_cv_dill_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "dill"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
-fi
-
-
-else
-
-
-
-
-# Check whether --with-dill was given.
-if test "${with_dill+set}" = set; then
-  withval=$with_dill;
-fi
-
-
-if test -n "$with_dill"; then
-unset cercs_cv_dill_include_arg
-unset cercs_cv_dill_link_arg
-if test `echo $with_dill | sed 's/\(.\).*/\1/g'` != "/"; then
-with_dill=`pwd`/$with_dill
-fi
-fi
-{ $as_echo "$as_me:$LINENO: checking needed include args for dill package" >&5
-$as_echo_n "checking needed include args for dill package... " >&6; }
-if test "${cercs_cv_dill_include_arg+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-
-
-search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
-tmp_search_results=""
-echo "configure:33671: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:33675: first found $tmp_search_results " >&5
+	echo "configure:33452: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33710,11 +33487,11 @@ else
 
 search_list="$PWD/../dill $PWD/../../dill $PWD/../../../dill"
 tmp_search_results=""
-echo "configure:33713: searching for $search_list " >&5
+echo "configure:33490: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33717: first found $tmp_search_results " >&5
+	echo "configure:33494: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33838,11 +33615,11 @@ fi
 
 search_list="$datatap_dir/cercs_env.h $datatap_dir/lib/cercs_env.h $datatap_dir/include/cercs_env.h $search_list /usr/include/cercs_env.h /usr/local/include/cercs_env.h /opt/cercs_env/include/cercs_env.h /opt/misc/include/cercs_env.h /opt/misc/include/$cercs_cv_archive/cercs_env.h"
 tmp_search_results=""
-echo "configure:33841: searching for $search_list " >&5
+echo "configure:33618: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33845: first found $tmp_search_results " >&5
+	echo "configure:33622: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33930,11 +33707,126 @@ fi
 
 search_list="$datatap_dir/libcercs_env.a $datatap_dir/lib/libcercs_env.a $datatap_dir/include/libcercs_env.a $search_list /usr/lib/libcercs_env.a /usr/local/lib/libcercs_env.a /opt/cercs_env/lib/libcercs_env.a /opt/misc/lib/libcercs_env.a /opt/misc/lib/$cercs_cv_archive/libcercs_env.a"
 tmp_search_results=""
-echo "configure:33933: searching for $search_list " >&5
+echo "configure:33710: searching for $search_list " >&5
+for tmp_search_value in $search_list; do
+   if test -r $tmp_search_value; then
+	tmp_search_results=$tmp_search_value
+	echo "configure:33714: first found $tmp_search_results " >&5
+	break
+   fi
+done
+
+if test -n "$tmp_search_results"; then
+cercs_tmp=$tmp_search_results
+fi
+
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "libcercs_env.a"; then
+cercs_cv_cercs_env_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libcercs_env.a//g"`
+else
+cercs_cv_cercs_env_link_dir=""
+fi
+
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_link_dir" >&5
+$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
+ld_arg="-L"
+new_flags=$LDFLAGS
+cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
+if test -n "$cercs_cv_cercs_env_link_arg"; then
+arg=$cercs_cv_cercs_env_link_arg
+no_dash_arg=`echo $arg | sed 's/^-//g'`
+if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
+root=`echo libcercs_env.a | sed 's/\..*//'`
+if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
+if eval "test \"\${LIBTOOL+set}\" = set"; then
+arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
+fi
+fi
+if test `echo $arg | grep -c "cercs_env"` -eq 0; then
+new_flags="$new_flags $arg"
+else
+new_flags="$arg $new_flags"
+fi
+fi
+DT_LDFLAGS=$new_flags
+fi
+
+
+else
+
+
+
+
+# Check whether --with-cercs_env was given.
+if test "${with_cercs_env+set}" = set; then
+  withval=$with_cercs_env;
+fi
+
+
+if test -n "$with_cercs_env"; then
+unset cercs_cv_cercs_env_include_arg
+unset cercs_cv_cercs_env_link_arg
+if test `echo $with_cercs_env | sed 's/\(.\).*/\1/g'` != "/"; then
+with_cercs_env=`pwd`/$with_cercs_env
+fi
+fi
+{ $as_echo "$as_me:$LINENO: checking needed include args for cercs_env package" >&5
+$as_echo_n "checking needed include args for cercs_env package... " >&6; }
+if test "${cercs_cv_cercs_env_include_arg+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+
+search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
+tmp_search_results=""
+echo "configure:33783: searching for $search_list " >&5
+for tmp_search_value in $search_list; do
+   if test -r $tmp_search_value; then
+	tmp_search_results=$tmp_search_value
+	echo "configure:33787: first found $tmp_search_results " >&5
+	break
+   fi
+done
+
+if test -n "$tmp_search_results"; then
+cercs_tmp=$tmp_search_results
+fi
+
+if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/cercs_env.h"; then
+cercs_cv_cercs_env_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.cercs_env.h##g"`
+fi
+
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_include_arg" >&5
+$as_echo "$cercs_cv_cercs_env_include_arg" >&6; }
+if test -n "$cercs_cv_cercs_env_include_arg"; then
+arg="$cercs_cv_cercs_env_include_arg"
+no_dash_arg=`echo $arg | sed 's/^-//g'`
+if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
+if test `echo $arg | grep -c "cercs_env"` -eq 0; then
+DT_CPPFLAGS="$DT_CPPFLAGS $arg";
+else
+DT_CPPFLAGS="$arg $DT_CPPFLAGS"
+fi
+fi
+fi
+
+{ $as_echo "$as_me:$LINENO: checking needed link args for cercs_env package" >&5
+$as_echo_n "checking needed link args for cercs_env package... " >&6; }
+if test "${cercs_cv_cercs_env_link_dir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+
+search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
+tmp_search_results=""
+echo "configure:33825: searching for $search_list " >&5
 for tmp_search_value in $search_list; do
    if test -r $tmp_search_value; then
 	tmp_search_results=$tmp_search_value
-	echo "configure:33937: first found $tmp_search_results " >&5
+	echo "configure:33829: first found $tmp_search_results " >&5
 	break
    fi
 done
@@ -33946,209 +33838,1615 @@ fi
 if test -n "$cercs_tmp" -a "$cercs_tmp" != "libcercs_env.a"; then
 cercs_cv_cercs_env_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libcercs_env.a//g"`
 else
-cercs_cv_cercs_env_link_dir=""
-fi
-
-fi
+cercs_cv_cercs_env_link_dir=""
+fi
+
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_link_dir" >&5
+$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
+ld_arg="-L"
+new_flags=$LDFLAGS
+cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
+if test -n "$cercs_cv_cercs_env_link_arg"; then
+arg=$cercs_cv_cercs_env_link_arg
+no_dash_arg=`echo $arg | sed 's/^-//g'`
+if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
+root=`echo libcercs_env.a | sed 's/\..*//'`
+if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
+if eval "test \"\${LIBTOOL+set}\" = set"; then
+arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
+fi
+fi
+if test `echo $arg | grep -c "cercs_env"` -eq 0; then
+new_flags="$new_flags $arg"
+else
+new_flags="$arg $new_flags"
+fi
+fi
+DT_LDFLAGS=$new_flags
+fi
+
+
+fi
+
+
+
+    if test -n "$cercs_cv_evpath_link_dir" -a -n "$cercs_cv_evpath_include_arg";then
+	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
+	FP_LIBS="$FP_LIBS -levpath"
+	FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
+	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
+    else
+	echo "FLEXPATH couldn't find evpath -  Not building flexpath"
+	ac_flexpath_ok=no
+    fi
+    if test -n "$cercs_cv_ffs_link_dir" -a -n "$cercs_cv_ffs_include_arg"; then
+	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_ffs_link_dir"
+	FP_LIBS="$FP_LIBS -lffs"
+	FP_CFLAGS="$FP_CFLAGS $cercs_cv_ffs_include_arg"
+	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_ffs_include_arg"
+    else
+	echo "FLEXPATH couldn't find ffs -  Not building flexpath"
+	ac_flexpath_ok=no
+    fi
+    if test -n "$cercs_cv_atl_link_dir" -a -n "$cercs_cv_atl_include_arg"; then
+	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_atl_link_dir"
+	FP_LIBS="$FP_LIBS -latl"
+	FP_CFLAGS="$FP_CFLAGS $cercs_cv_atl_include_arg"
+	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_atl_include_arg"
+    else
+	ac_flexpath_ok=no
+	echo "FLEXPATH couldn't find atl -  Not building flexpath"
+    fi
+    if test -n "$cercs_cv_dill_link_dir" -a -n "$cercs_cv_dill_include_arg"; then
+	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_dill_link_dir"
+	FP_LIBS="$FP_LIBS -ldill"
+	FP_CFLAGS="$FP_CFLAGS $cercs_cv_dill_include_arg"
+	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_dill_include_arg"
+    else
+	ac_flexpath_ok=no
+	echo "FLEXPATH couldn't find dill -  Not building flexpath"
+    fi
+    if test -n "$cercs_cv_cercs_env_link_dir" -a -n "$cercs_cv_cercs_env_include_arg"; then
+	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_cercs_env_link_dir"
+	FP_LIBS="$FP_LIBS -lcercs_env"
+	FP_CFLAGS="$FP_CFLAGS $cercs_cv_cercs_env_include_arg"
+	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_cercs_env_include_arg"
+    else
+	ac_flexpath_ok=no
+	echo "FLEXPATH couldn't find cercs_env -  Not building flexpath"
+    fi
+
+fi
+
+
+
+
+
+
+if test "x$ac_flexpath_ok" = "xyes"; then
+   HAVE_FLEXPATH=1
+   NO_FLEXPATH=0
+else
+   HAVE_FLEXPATH=0
+   NO_FLEXPATH=1
+fi
+ if test "x$ac_flexpath_ok" = "xyes"; then
+  HAVE_FLEXPATH_TRUE=
+  HAVE_FLEXPATH_FALSE='#'
+else
+  HAVE_FLEXPATH_TRUE='#'
+  HAVE_FLEXPATH_FALSE=
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define NO_FLEXPATH $NO_FLEXPATH
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FLEXPATH $HAVE_FLEXPATH
+_ACEOF
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for ZLIB ===" >&5
+$as_echo "$as_me: === checking for ZLIB ===" >&6;}
+
+ if true; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+
+
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval=$with_zlib; ZLIB_LDFLAGS="-L$withval/lib -L$withval/lib64";
+         ZLIB_LIBS="-lz";
+         ZLIB_CPPFLAGS="-I$withval/include";
+else
+  with_zlib=no
+fi
+
+
+if test "x$with_zlib" == "xno"; then
+
+    if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $ZLIB_LIBS"
+    LDFLAGS="$LDFLAGS $ZLIB_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ZLIB_CPPFLAGS"
+
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+
+for ac_header in zlib.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_ZLIB_TRUE=
+  HAVE_ZLIB_FALSE='#'
+else
+  HAVE_ZLIB_TRUE='#'
+  HAVE_ZLIB_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the ZLIB library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ZLIB_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ZLIB 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for BZIP2 ===" >&5
+$as_echo "$as_me: === checking for BZIP2 ===" >&6;}
+
+ if true; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+
+
+# Check whether --with-bzip2 was given.
+if test "${with_bzip2+set}" = set; then
+  withval=$with_bzip2; BZIP2_LDFLAGS="-L$withval/lib";
+         BZIP2_LIBS="-lbz2";
+         BZIP2_CPPFLAGS="-I$withval/include";
+else
+  with_bzip2=no
+fi
+
+
+if test "x$with_bzip2" == "xno"; then
+
+    if false; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lbz2"
+    LDFLAGS="$LDFLAGS $BZIP2_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $BZIP2_CPPFLAGS"
+
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+
+for ac_header in bzlib.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_BZIP2_TRUE=
+  HAVE_BZIP2_FALSE='#'
+else
+  HAVE_BZIP2_TRUE='#'
+  HAVE_BZIP2_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the BZIP2 library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_BZIP2_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BZIP2 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for SZIP ===" >&5
+$as_echo "$as_me: === checking for SZIP ===" >&6;}
+
+ if true; then
+  HAVE_SZIP_TRUE=
+  HAVE_SZIP_FALSE='#'
+else
+  HAVE_SZIP_TRUE='#'
+  HAVE_SZIP_FALSE=
+fi
+
+
+
+# Check whether --with-szip was given.
+if test "${with_szip+set}" = set; then
+  withval=$with_szip; SZIP_LDFLAGS="-L$withval/lib";
+         SZIP_LIBS="-lsz";
+         SZIP_CPPFLAGS="-I$withval/include";
+else
+  with_szip=no
+fi
+
+
+if test "x$with_szip" == "xno"; then
+
+    if false; then
+  HAVE_SZIP_TRUE=
+  HAVE_SZIP_FALSE='#'
+else
+  HAVE_SZIP_TRUE='#'
+  HAVE_SZIP_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lsz"
+    LDFLAGS="$LDFLAGS $SZIP_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $SZIP_CPPFLAGS"
+
+    if test -z "${HAVE_SZIP_TRUE}"; then
+
+for ac_header in szlib.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_SZIP_TRUE=
+  HAVE_SZIP_FALSE='#'
+else
+  HAVE_SZIP_TRUE='#'
+  HAVE_SZIP_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the SZIP library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_SZIP_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SZIP 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for ISOBAR ===" >&5
+$as_echo "$as_me: === checking for ISOBAR ===" >&6;}
+
+ if true; then
+  HAVE_ISOBAR_TRUE=
+  HAVE_ISOBAR_FALSE='#'
+else
+  HAVE_ISOBAR_TRUE='#'
+  HAVE_ISOBAR_FALSE=
+fi
+
+
+
+# Check whether --with-isobar was given.
+if test "${with_isobar+set}" = set; then
+  withval=$with_isobar; ISOBAR_LDFLAGS="-L$withval/lib";
+         ISOBAR_LIBS="-lisobar -lz";
+         ISOBAR_CPPFLAGS="-I$withval/include";
+else
+  with_isobar=no
+fi
+
+
+if test "x$with_isobar" == "xno"; then
+
+    if false; then
+  HAVE_ISOBAR_TRUE=
+  HAVE_ISOBAR_FALSE='#'
+else
+  HAVE_ISOBAR_TRUE='#'
+  HAVE_ISOBAR_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -lisobar -lz"
+    LDFLAGS="$LDFLAGS $ISOBAR_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ISOBAR_CPPFLAGS"
+
+    if test -z "${HAVE_ISOBAR_TRUE}"; then
+
+for ac_header in isobar.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_ISOBAR_TRUE=
+  HAVE_ISOBAR_FALSE='#'
+else
+  HAVE_ISOBAR_TRUE='#'
+  HAVE_ISOBAR_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the ISOBAR library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ISOBAR_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ISOBAR 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for APLOD ===" >&5
+$as_echo "$as_me: === checking for APLOD ===" >&6;}
+
+ if true; then
+  HAVE_APLOD_TRUE=
+  HAVE_APLOD_FALSE='#'
+else
+  HAVE_APLOD_TRUE='#'
+  HAVE_APLOD_FALSE=
+fi
+
+
+
+# Check whether --with-aplod was given.
+if test "${with_aplod+set}" = set; then
+  withval=$with_aplod; APLOD_LDFLAGS="-L$withval/lib";
+         APLOD_LIBS="-laplod -lz";
+         APLOD_CPPFLAGS="-I$withval/include";
+else
+  with_aplod=no
+fi
+
+
+if test "x$with_aplod" == "xno"; then
+
+    if false; then
+  HAVE_APLOD_TRUE=
+  HAVE_APLOD_FALSE='#'
+else
+  HAVE_APLOD_TRUE='#'
+  HAVE_APLOD_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS -laplod -lz"
+    LDFLAGS="$LDFLAGS $APLOD_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $APLOD_CPPFLAGS"
+
+    if test -z "${HAVE_APLOD_TRUE}"; then
+
+for ac_header in aplod.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   if false; then
+  HAVE_APLOD_TRUE=
+  HAVE_APLOD_FALSE='#'
+else
+  HAVE_APLOD_TRUE='#'
+  HAVE_APLOD_FALSE=
+fi
+
+fi
+
+done
+
+    fi
+
+    # Check for the APLOD library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_APLOD_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_APLOD 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: === checking for ALACRITY ===" >&5
+$as_echo "$as_me: === checking for ALACRITY ===" >&6;}
+
+ if true; then
+  HAVE_ALACRITY_TRUE=
+  HAVE_ALACRITY_FALSE='#'
+else
+  HAVE_ALACRITY_TRUE='#'
+  HAVE_ALACRITY_FALSE=
+fi
+
+
+
+# Check whether --with-alacrity was given.
+if test "${with_alacrity+set}" = set; then
+  withval=$with_alacrity; ALACRITY_LDFLAGS="-L$withval/lib";
+         ALACRITY_LIBS="-lalacrity -lridcompress";
+         ALACRITY_CPPFLAGS="-I$withval/include";
+else
+  with_alacrity=no
+fi
+
+
+if test "x$with_alacrity" == "xno"; then
+
+    if false; then
+  HAVE_ALACRITY_TRUE=
+  HAVE_ALACRITY_FALSE='#'
+else
+  HAVE_ALACRITY_TRUE='#'
+  HAVE_ALACRITY_FALSE=
+fi
+
+
+else
+
+    save_CPPFLAGS="$CPPFLAGS"
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    LIBS="$LIBS $ALACRITY_LIBS"
+    LDFLAGS="$LDFLAGS $ALACRITY_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $ALACRITY_CPPFLAGS"
+
+
+    # Check for the ALACRITY library and headers
+
+    LIBS="$save_LIBS"
+    LDFLAGS="$save_LDFLAGS"
+    CPPFLAGS="$save_CPPFLAGS"
+
+
+
+
+
+    # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+    if test -z "${HAVE_ALACRITY_TRUE}"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALACRITY 1
+_ACEOF
+
+            :
+    else
+
+            :
+    fi
+fi
+
+
+
+ if false; then
+  HAVE_NCSU_TIMER_TRUE=
+  HAVE_NCSU_TIMER_FALSE='#'
+else
+  HAVE_NCSU_TIMER_TRUE='#'
+  HAVE_NCSU_TIMER_FALSE=
+fi
+
+
+
+# Check whether --with-timer was given.
+if test "${with_timer+set}" = set; then
+  withval=$with_timer;
+fi
+
+
+if test "x$with_timer" != xno -a "x$with_timer" != x; then
+     if true; then
+  HAVE_NCSU_TIMER_TRUE=
+  HAVE_NCSU_TIMER_FALSE='#'
+else
+  HAVE_NCSU_TIMER_TRUE='#'
+  HAVE_NCSU_TIMER_FALSE=
+fi
+
+
+    TIMER_CPPFLAGS="-I$with_timer/include"
+    TIMER_LDFLAGS="-L$with_timer/lib"
+    TIMER_LIBS="-ltimer"
+
+    saveLIB="$LIB"
+    saveLDFLAGS="$LDFLAGS"
+    saveCPPFLAGS="$CPPFLAGS"
+    LIB="$LIB $TIMER_LIBS"
+    LDFLAGS="$LDFLAGS $TIMER_LDFLAGS"
+    CPPFLAGS="$CPPFLAGS $TIMER_CPPFLAGS"
+
+
+for ac_header in timer.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_link_dir" >&5
-$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_cercs_env_link_arg"; then
-arg=$cercs_cv_cercs_env_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libcercs_env.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-new_flags="$new_flags $arg"
-else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
 else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-
-
-# Check whether --with-cercs_env was given.
-if test "${with_cercs_env+set}" = set; then
-  withval=$with_cercs_env;
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
-if test -n "$with_cercs_env"; then
-unset cercs_cv_cercs_env_include_arg
-unset cercs_cv_cercs_env_link_arg
-if test `echo $with_cercs_env | sed 's/\(.\).*/\1/g'` != "/"; then
-with_cercs_env=`pwd`/$with_cercs_env
-fi
-fi
-{ $as_echo "$as_me:$LINENO: checking needed include args for cercs_env package" >&5
-$as_echo_n "checking needed include args for cercs_env package... " >&6; }
-if test "${cercs_cv_cercs_env_include_arg+set}" = set; then
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
   $as_echo_n "(cached) " >&6
 else
-
-
-search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
-tmp_search_results=""
-echo "configure:34006: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:34010: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
-fi
-
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "/usr/include/cercs_env.h"; then
-cercs_cv_cercs_env_include_arg=-I`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s#.cercs_env.h##g"`
+  eval "$as_ac_Header=\$ac_header_preproc"
 fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+		 $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
 
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_include_arg" >&5
-$as_echo "$cercs_cv_cercs_env_include_arg" >&6; }
-if test -n "$cercs_cv_cercs_env_include_arg"; then
-arg="$cercs_cv_cercs_env_include_arg"
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $DT_CPPFLAGS | grep -c "$no_dash_arg"` -eq 0; then
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-DT_CPPFLAGS="$DT_CPPFLAGS $arg";
 else
-DT_CPPFLAGS="$arg $DT_CPPFLAGS"
-fi
-fi
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: Cannot find timer.h from the timer lib. Make sure it has been properly installed at the path specified ($with_timer).
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: Cannot find timer.h from the timer lib. Make sure it has been properly installed at the path specified ($with_timer).
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
 fi
 
-{ $as_echo "$as_me:$LINENO: checking needed link args for cercs_env package" >&5
-$as_echo_n "checking needed link args for cercs_env package... " >&6; }
-if test "${cercs_cv_cercs_env_link_dir+set}" = set; then
+done
+
+
+    { $as_echo "$as_me:$LINENO: checking for timer_init in -ltimer" >&5
+$as_echo_n "checking for timer_init in -ltimer... " >&6; }
+if test "${ac_cv_lib_timer_timer_init+set}" = set; then
   $as_echo_n "(cached) " >&6
 else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltimer  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char timer_init ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return timer_init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_timer_timer_init=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-search_list="$PWD/../cercs_env $PWD/../../cercs_env $PWD/../../../cercs_env"
-tmp_search_results=""
-echo "configure:34048: searching for $search_list " >&5
-for tmp_search_value in $search_list; do
-   if test -r $tmp_search_value; then
-	tmp_search_results=$tmp_search_value
-	echo "configure:34052: first found $tmp_search_results " >&5
-	break
-   fi
-done
-
-if test -n "$tmp_search_results"; then
-cercs_tmp=$tmp_search_results
+	ac_cv_lib_timer_timer_init=no
 fi
 
-if test -n "$cercs_tmp" -a "$cercs_tmp" != "libcercs_env.a"; then
-cercs_cv_cercs_env_link_dir=`$PATHPROG $cercs_tmp | sed 's#\\\\#/#g' | sed "s/.libcercs_env.a//g"`
-else
-cercs_cv_cercs_env_link_dir=""
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_timer_timer_init" >&5
+$as_echo "$ac_cv_lib_timer_timer_init" >&6; }
+if test "x$ac_cv_lib_timer_timer_init" = x""yes; then
 
-fi
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_NCSU_TIMER 1
+_ACEOF
 
-{ $as_echo "$as_me:$LINENO: result: $cercs_cv_cercs_env_link_dir" >&5
-$as_echo "$cercs_cv_cercs_env_link_dir" >&6; }
-ld_arg="-L"
-new_flags=$LDFLAGS
-cercs_cv_cercs_env_link_arg=`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/$ld_arg/1"`
-if test -n "$cercs_cv_cercs_env_link_arg"; then
-arg=$cercs_cv_cercs_env_link_arg
-no_dash_arg=`echo $arg | sed 's/^-//g'`
-if test `echo $new_flags | grep -c "$no_dash_arg"` -eq 0; then
-root=`echo libcercs_env.a | sed 's/\..*//'`
-if test ! -r $cercs_cv_cercs_env_link_dir/$root.la; then
-if eval "test \"\${LIBTOOL+set}\" = set"; then
-arg="$cercs_cv_cercs_env_link_arg "`echo $cercs_cv_cercs_env_link_dir | sed "/./ s/^/-R/1"`
-fi
-fi
-if test `echo $arg | grep -c "cercs_env"` -eq 0; then
-new_flags="$new_flags $arg"
 else
-new_flags="$arg $new_flags"
-fi
-fi
-DT_LDFLAGS=$new_flags
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: Cannot successfully link with the timer lib. Make sure it has been properly installed at the path specified ($with_timer).
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: Cannot successfully link with the timer lib. Make sure it has been properly installed at the path specified ($with_timer).
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
 fi
 
 
-fi
+    LIBS="$saveLIBS"
+    LDFLAGS="$saveLDFLAGS"
+    CPPFLAGS="$saveCPPFLAGS"
 
 
 
-    if test -n "$cercs_cv_evpath_link_dir" -a -n "$cercs_cv_evpath_include_arg";then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_evpath_link_dir"
-	FP_LIBS="$FP_LIBS -levpath"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_evpath_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_evpath_include_arg"
-    else
-	echo "FLEXPATH couldn't find evpath -  Not building flexpath"
-	ac_flexpath_ok=no
-    fi
-    if test -n "$cercs_cv_ffs_link_dir" -a -n "$cercs_cv_ffs_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_ffs_link_dir"
-	FP_LIBS="$FP_LIBS -lffs"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_ffs_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_ffs_include_arg"
-    else
-	echo "FLEXPATH couldn't find ffs -  Not building flexpath"
-	ac_flexpath_ok=no
-    fi
-    if test -n "$cercs_cv_atl_link_dir" -a -n "$cercs_cv_atl_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_atl_link_dir"
-	FP_LIBS="$FP_LIBS -latl"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_atl_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_atl_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find atl -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_dill_link_dir" -a -n "$cercs_cv_dill_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_dill_link_dir"
-	FP_LIBS="$FP_LIBS -ldill"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_dill_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_dill_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find dill -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_gen_thread_link_dir" -a -n "$cercs_cv_gen_thread_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_gen_thread_link_dir"
-	FP_LIBS="$FP_LIBS -lgen_thread"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_gen_thread_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_gen_thread_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find gen_thread -  Not building flexpath"
-    fi
-    if test -n "$cercs_cv_cercs_env_link_dir" -a -n "$cercs_cv_cercs_env_include_arg"; then
-	FP_LDFLAGS="$FP_LDFLAGS -L$cercs_cv_cercs_env_link_dir"
-	FP_LIBS="$FP_LIBS -lcercs_env"
-	FP_CFLAGS="$FP_CFLAGS $cercs_cv_cercs_env_include_arg"
-	FP_CPPFLAGS="$FP_CPPFLAGS $cercs_cv_cercs_env_include_arg"
-    else
-	ac_flexpath_ok=no
-	echo "FLEXPATH couldn't find cercs_env -  Not building flexpath"
-    fi
 
 fi
 
@@ -34156,33 +35454,50 @@ fi
 
 
 
+{ $as_echo "$as_me:$LINENO: === checking for BGQ ===" >&5
+$as_echo "$as_me: === checking for BGQ ===" >&6;}
 
-if test "x$ac_flexpath_ok" = "xyes"; then
-   HAVE_FLEXPATH=1
-   NO_FLEXPATH=0
+temptest=enable
+
+
+# Check whether --with-bgq was given.
+if test "${with_bgq+set}" = set; then
+  withval=$with_bgq;
 else
-   HAVE_FLEXPATH=0
-   NO_FLEXPATH=1
+  with_bgq=no
 fi
- if test "x$ac_flexpath_ok" = "xyes"; then
-  HAVE_FLEXPATH_TRUE=
-  HAVE_FLEXPATH_FALSE='#'
+
+
+if test "x$with_bgq" = "xno"; then
+        echo "no bgq"
+	 if false; then
+  HAVE_BGQ_TRUE=
+  HAVE_BGQ_FALSE='#'
 else
-  HAVE_FLEXPATH_TRUE='#'
-  HAVE_FLEXPATH_FALSE=
+  HAVE_BGQ_TRUE='#'
+  HAVE_BGQ_FALSE=
 fi
 
 
-cat >>confdefs.h <<_ACEOF
-#define NO_FLEXPATH $NO_FLEXPATH
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BGQ 0
 _ACEOF
 
+elif test x"$with_bgq" != xyes -o x"$with_bgq" != xcheck; then
+	 if true; then
+  HAVE_BGQ_TRUE=
+  HAVE_BGQ_FALSE='#'
+else
+  HAVE_BGQ_TRUE='#'
+  HAVE_BGQ_FALSE=
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_FLEXPATH $HAVE_FLEXPATH
-_ACEOF
 
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BGQ 1
+_ACEOF
 
+fi
 
 
 ac_ext=c
@@ -34261,19 +35576,6 @@ else
 fi
 
 
-# Check whether --enable-write was given.
-if test "${enable_write+set}" = set; then
-  enableval=$enable_write;
-fi
-
- if test "x$enable_write" != "xno"; then
-  BUILD_WRITE_TRUE=
-  BUILD_WRITE_FALSE='#'
-else
-  BUILD_WRITE_TRUE='#'
-  BUILD_WRITE_FALSE=
-fi
-
 
 
 LIBS="$MPILIBS"
@@ -34607,6 +35909,162 @@ if test -z "${HAVE_LUSTRE_TRUE}"; then
     ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LUSTRE_LDFLAGS}"
     ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS}"
 fi
+if test -z "${HAVE_ZLIB_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ZLIB_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ZLIB_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ZLIB_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ZLIB_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ZLIB_LIBS}"
+fi
+if test -z "${HAVE_BZIP2_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${BZIP2_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${BZIP2_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${BZIP2_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${BZIP2_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${BZIP2_LIBS}"
+fi
+if test -z "${HAVE_SZIP_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${SZIP_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${SZIP_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${SZIP_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${SZIP_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZIP_LIBS}"
+fi
+if test -z "${HAVE_ISOBAR_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ISOBAR_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ISOBAR_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ISOBAR_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ISOBAR_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ISOBAR_LIBS}"
+fi
+if test -z "${HAVE_APLOD_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${APLOD_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${APLOD_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${APLOD_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${APLOD_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${APLOD_LIBS}"
+fi
+if test -z "${HAVE_ALACRITY_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ALACRITY_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ALACRITY_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ALACRITY_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
+fi
+
+if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${TIMER_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${TIMER_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${TIMER_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${TIMER_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${TIMER_LIBS}"
+fi
+
 
 
 
@@ -34664,21 +36122,17 @@ _ACEOF
 # Get the version of the source we are configuring here
 # Just to print it out at the end of configure
 # see also Makefile.am:install-data-hook
-if type svnversion &>/dev/null; then
-    SVNVERSION=`svnversion`
-else
-    SVNVERSION="unknown"
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION_SVNREV "${SVNVERSION}"
-_ACEOF
-
+#if type svnversion &>/dev/null; then
+#    SVNVERSION=`svnversion`
+#else
+#    SVNVERSION="unknown"
+#fi
+#AC_DEFINE_UNQUOTED(VERSION_SVNREV, "${SVNVERSION}", [svn revision number])
 
 
 
 
-ac_config_files="$ac_config_files Makefile src/Makefile tests/Makefile tests/C/Makefile tests/Fortran/Makefile tests/genarray/Makefile tests/bp_read/Makefile tests/suite/Makefile tests/suite/programs/Makefile utils/Makefile utils/skel/Makefile utils/skel/etc/Makefile utils/skel/src/Makefile utils/skel/lib/skel_have_adios_timing.py utils/adios_lint/Makefile utils/gpp/Makefile utils/bpdump/Makefile utils/bp2h5/Makefile utils/bp2ncd/Makefile utils/bp2ascii/Makefile utils/bpsplit/Makefile ut [...]
+ac_config_files="$ac_config_files Makefile src/Makefile tests/Makefile tests/C/Makefile tests/C/flexpath_tests/Makefile tests/C/flexpath_tests/1D_arr_global/Makefile tests/C/flexpath_tests/1D_arr_global_noxml/Makefile tests/C/flexpath_tests/global_range_select/Makefile tests/C/flexpath_tests/maya_noxml/Makefile tests/C/flexpath_tests/maya_append/Makefile tests/C/flexpath_tests/scalar/Makefile tests/Fortran/Makefile tests/genarray/Makefile tests/bp_read/Makefile tests/suite/Makefile tests [...]
 
 
 cat >confcache <<\_ACEOF
@@ -34856,6 +36310,20 @@ $as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${BUILD_WRITE_TRUE}" && test -z "${BUILD_WRITE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_WRITE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"BUILD_WRITE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_MXML_TRUE}" && test -z "${HAVE_MXML_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_MXML\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_MXML\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${HAVE_MXML_TRUE}" && test -z "${HAVE_MXML_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_MXML\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -35339,6 +36807,153 @@ $as_echo "$as_me: error: conditional \"HAVE_FLEXPATH\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ZLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_BZIP2_TRUE}" && test -z "${HAVE_BZIP2_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_BZIP2_TRUE}" && test -z "${HAVE_BZIP2_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_BZIP2_TRUE}" && test -z "${HAVE_BZIP2_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_BZIP2\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_SZIP_TRUE}" && test -z "${HAVE_SZIP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_SZIP_TRUE}" && test -z "${HAVE_SZIP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_SZIP_TRUE}" && test -z "${HAVE_SZIP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_SZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ISOBAR_TRUE}" && test -z "${HAVE_ISOBAR_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ISOBAR_TRUE}" && test -z "${HAVE_ISOBAR_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ISOBAR_TRUE}" && test -z "${HAVE_ISOBAR_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ISOBAR\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_APLOD_TRUE}" && test -z "${HAVE_APLOD_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_APLOD_TRUE}" && test -z "${HAVE_APLOD_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_APLOD_TRUE}" && test -z "${HAVE_APLOD_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_APLOD\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ALACRITY_TRUE}" && test -z "${HAVE_ALACRITY_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ALACRITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ALACRITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_ALACRITY_TRUE}" && test -z "${HAVE_ALACRITY_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_ALACRITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_ALACRITY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_NCSU_TIMER_TRUE}" && test -z "${HAVE_NCSU_TIMER_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_NCSU_TIMER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_NCSU_TIMER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_NCSU_TIMER_TRUE}" && test -z "${HAVE_NCSU_TIMER_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_NCSU_TIMER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_NCSU_TIMER\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_BGQ_TRUE}" && test -z "${HAVE_BGQ_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_BGQ\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_BGQ\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_BGQ_TRUE}" && test -z "${HAVE_BGQ_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_BGQ\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"HAVE_BGQ\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 if test -z "${RESEARCH_TRANSPORTS_TRUE}" && test -z "${RESEARCH_TRANSPORTS_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"RESEARCH_TRANSPORTS\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -35360,13 +36975,6 @@ $as_echo "$as_me: error: conditional \"HAVE_DATATAP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
-if test -z "${BUILD_WRITE_TRUE}" && test -z "${BUILD_WRITE_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_WRITE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"BUILD_WRITE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
 if test -z "${USE_PARALLEL_COMPILER_TRUE}" && test -z "${USE_PARALLEL_COMPILER_FALSE}"; then
   { { $as_echo "$as_me:$LINENO: error: conditional \"USE_PARALLEL_COMPILER\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
@@ -36352,12 +37960,20 @@ do
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "tests/C/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/Makefile" ;;
+    "tests/C/flexpath_tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/Makefile" ;;
+    "tests/C/flexpath_tests/1D_arr_global/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/1D_arr_global/Makefile" ;;
+    "tests/C/flexpath_tests/1D_arr_global_noxml/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/1D_arr_global_noxml/Makefile" ;;
+    "tests/C/flexpath_tests/global_range_select/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/global_range_select/Makefile" ;;
+    "tests/C/flexpath_tests/maya_noxml/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/maya_noxml/Makefile" ;;
+    "tests/C/flexpath_tests/maya_append/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/maya_append/Makefile" ;;
+    "tests/C/flexpath_tests/scalar/Makefile") CONFIG_FILES="$CONFIG_FILES tests/C/flexpath_tests/scalar/Makefile" ;;
     "tests/Fortran/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Fortran/Makefile" ;;
     "tests/genarray/Makefile") CONFIG_FILES="$CONFIG_FILES tests/genarray/Makefile" ;;
     "tests/bp_read/Makefile") CONFIG_FILES="$CONFIG_FILES tests/bp_read/Makefile" ;;
     "tests/suite/Makefile") CONFIG_FILES="$CONFIG_FILES tests/suite/Makefile" ;;
     "tests/suite/programs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/suite/programs/Makefile" ;;
     "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
+    "utils/skeldump/Makefile") CONFIG_FILES="$CONFIG_FILES utils/skeldump/Makefile" ;;
     "utils/skel/Makefile") CONFIG_FILES="$CONFIG_FILES utils/skel/Makefile" ;;
     "utils/skel/etc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/skel/etc/Makefile" ;;
     "utils/skel/src/Makefile") CONFIG_FILES="$CONFIG_FILES utils/skel/src/Makefile" ;;
@@ -36370,6 +37986,7 @@ do
     "utils/bp2ascii/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bp2ascii/Makefile" ;;
     "utils/bpsplit/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpsplit/Makefile" ;;
     "utils/bpls/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpls/Makefile" ;;
+    "utils/bpdiff/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bpdiff/Makefile" ;;
     "utils/bp2bp/Makefile") CONFIG_FILES="$CONFIG_FILES utils/bp2bp/Makefile" ;;
     "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
     "examples/C/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/Makefile" ;;
@@ -36385,6 +38002,8 @@ do
     "examples/C/stat/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/stat/Makefile" ;;
     "examples/C/read_all/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/read_all/Makefile" ;;
     "examples/C/schema/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/schema/Makefile" ;;
+    "examples/C/transforms/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/transforms/Makefile" ;;
+    "examples/C/compression_test/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/compression_test/Makefile" ;;
     "examples/Fortran/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/Makefile" ;;
     "examples/Fortran/scalars/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/scalars/Makefile" ;;
     "examples/Fortran/arrays/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Fortran/arrays/Makefile" ;;
@@ -38182,6 +39801,17 @@ echo "*********************************"
 echo $PACKAGE configured as follows:
 echo "*********************************"
 echo
+if test -z "${BUILD_WRITE_TRUE}"; then
+    echo "  - Build both the Write and Read libraries";
+else
+    echo "  - Build only the Read libraries";
+fi
+if test -z "${BUILD_FORTRAN_TRUE}"; then
+    echo "  - Build both the C and Fortran libraries";
+else
+    echo "  - Build only the C libraries (no Fortran)";
+fi
+echo
 echo "  - General Compile FLAGS";
 echo "      - CC  = $CC";
 echo "      - CXX = $CXX";
@@ -38379,5 +40009,88 @@ else
     echo "  - No FLEXPATH to build FLEXPATH transport method"
 fi
 
-echo "  - SVN version = ${SVNVERSION}"
+if test -z "${HAVE_ZLIB_TRUE}"; then
+    echo "  - ZLIB";
+    echo "      - ZLIB_CFLAGS = $ZLIB_CFLAGS";
+    echo "      - ZLIB_CPPFLAGS = $ZLIB_CPPFLAGS";
+    echo "      - ZLIB_LDFLAGS = $ZLIB_LDFLAGS";
+    echo "      - ZLIB_LIBS = $ZLIB_LIBS";
+    echo
+else
+    echo "  - No ZLIB to build ZLIB transform method"
+fi
+
+if test -z "${HAVE_BZIP2_TRUE}"; then
+    echo "  - BZIP2";
+    echo "      - BZIP2_CFLAGS = $BZIP2_CFLAGS";
+    echo "      - BZIP2_CPPFLAGS = $BZIP2_CPPFLAGS";
+    echo "      - BZIP2_LDFLAGS = $BZIP2_LDFLAGS";
+    echo "      - BZIP2_LIBS = $BZIP2_LIBS";
+    echo
+else
+    echo "  - No BZIP2 to build BZIP2 transform method"
+fi
+
+if test -z "${HAVE_SZIP_TRUE}"; then
+    echo "  - SZIP";
+    echo "      - SZIP_CFLAGS = $SZIP_CFLAGS";
+    echo "      - SZIP_CPPFLAGS = $SZIP_CPPFLAGS";
+    echo "      - SZIP_LDFLAGS = $SZIP_LDFLAGS";
+    echo "      - SZIP_LIBS = $SZIP_LIBS";
+    echo
+else
+    echo "  - No SZIP to build SZIP transform method"
+fi
+
+if test -z "${HAVE_ISOBAR_TRUE}"; then
+    echo "  - ISOBAR";
+    echo "      - ISOBAR_CFLAGS = $ISOBAR_CFLAGS";
+    echo "      - ISOBAR_CPPFLAGS = $ISOBAR_CPPFLAGS";
+    echo "      - ISOBAR_LDFLAGS = $ISOBAR_LDFLAGS";
+    echo "      - ISOBAR_LIBS = $ISOBAR_LIBS";
+    echo
+else
+    echo "  - No ISOBAR to build ISOBAR transform method"
+fi
+
+if test -z "${HAVE_APLOD_TRUE}"; then
+    echo "  - APLOD";
+    echo "      - APLOD_CFLAGS = $APLOD_CFLAGS";
+    echo "      - APLOD_CPPFLAGS = $APLOD_CPPFLAGS";
+    echo "      - APLOD_LDFLAGS = $APLOD_LDFLAGS";
+    echo "      - APLOD_LIBS = $APLOD_LIBS";
+    echo
+else
+    echo "  - No APLOD to build APLOD transform method"
+fi
+
+if test -z "${HAVE_ALACRITY_TRUE}"; then
+    echo "  - ALACRITY";
+    echo "      - ALACRITY_CFLAGS = $ALACRITY_CFLAGS";
+    echo "      - ALACRITY_CPPFLAGS = $ALACRITY_CPPFLAGS";
+    echo "      - ALACRITY_LDFLAGS = $ALACRITY_LDFLAGS";
+    echo "      - ALACRITY_LIBS = $ALACRITY_LIBS";
+    echo
+else
+    echo "  - No ALACRITY to build ALACRITY transform method"
+fi
+
+if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
+    echo "  - NCSU timer lib";
+    echo "      - TIMER_CFLAGS = $TIMER_CFLAGS";
+    echo "      - TIMER_CPPFLAGS = $TIMER_CPPFLAGS";
+    echo "      - TIMER_LDFLAGS = $TIMER_LDFLAGS";
+    echo "      - TIMER_LIBS = $TIMER_LIBS";
+    echo
+else
+    echo "  - No NCSU timer lib"
+fi
+
+if test -z "${HAVE_BGQ_TRUE}"; then
+    echo "  - BGQ METHOD is enabled";
+else
+    echo "  - BGQ METHOD is disabled"
+fi
+
+#echo "  - SVN version = ${SVNVERSION}"
 echo "  - Install path = ${prefix}"
diff --git a/configure.ac b/configure.ac
index 7e2cf6b..8eafd53 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ AC_CONFIG_MACRO_DIR(config)
 AC_REVISION($Revision$)
 
 AC_CONFIG_HEADERS(config.h)
-AM_INIT_AUTOMAKE(adios,1.5.0)
+AM_INIT_AUTOMAKE(adios,1.6.0)
 
 AM_MAINTAINER_MODE([enable])
 
@@ -18,10 +18,10 @@ AM_PROG_CC_C_O
 AC_PROG_CXX
 
 AC_LANG(C)
-ACX_MPI([], [AC_MSG_ERROR([couldn't find mpi library for C])])
+ACX_MPI([], [AC_MSG_ERROR([could not find mpi library for C])])
 
 AC_LANG(C++)
-ACX_MPI([], [AC_MSG_ERROR([couldn't find mpi library for C++])])
+ACX_MPI([], [AC_MSG_ERROR([could not find mpi library for C++])])
 
 AC_ARG_ENABLE(fortran,
     [AS_HELP_STRING([--disable-fortran],[disable Fortran test programs in ADIOS.])])
@@ -35,7 +35,7 @@ if test "x$enable_fortran" != "xno"; then
     dnl AC_PROG_F77
     dnl AC_PROG_F77_C_O
     AC_LANG(Fortran)
-    ACX_MPI([], [AC_MSG_ERROR([couldn't find mpi library for Fortran])])
+    ACX_MPI([], [AC_MSG_ERROR([could not find mpi library for Fortran])])
 fi
 
 AC_LANG(C)
@@ -59,7 +59,18 @@ dnl g/^hardcode_libdir_flag_spec_ld=".*"/s//hardcode_libdir_flag_spec_ld=""/
 
 AC_SEARCH_LIBS([nanosleep], [rt])
 AC_CHECK_FUNCS([nanosleep strncpy strerror gettimeofday])
-AC_PROG_MXML
+
+AC_ARG_ENABLE(write,
+    [AS_HELP_STRING([--disable-write],[disable building the write methods in ADIOS.])])
+AM_CONDITIONAL([BUILD_WRITE], [test "x$enable_write" != "xno"])
+
+AC_MXML
+dnl MXML is required for Write API, turn off Write if MXML is not present
+if test -z "${HAVE_MXML_FALSE}" -a -z "${BUILD_WRITE_TRUE}"; then
+    AC_MSG_ERROR([The ADIOS libraries for writing cannot be built without the MXML library. Either specify where the MXML library is found, or use --disable-write to build ADIOS for reading only.])
+    dnl AM_CONDITIONAL([BUILD_WRITE], false)
+fi
+
 dnl AC_PROG_GENGETOPT
 AC_DCMF
 AC_INFINIBAND
@@ -77,6 +88,14 @@ AC_DMALLOC
 AC_LUSTRE
 AC_DATATAP
 AC_FLEXPATH
+AC_ZLIB
+AC_BZIP2
+AC_SZIP
+AC_ISOBAR
+AC_APLOD
+AC_ALACRITY
+AX_NCSU_LIBTIMER
+AC_BGQ
 
 AC_LANG(C)
 
@@ -111,9 +130,6 @@ AC_LANG(C)
 
 AM_CONDITIONAL([HAVE_DATATAP], [test x$datatap != xdisable])
 
-AC_ARG_ENABLE(write,
-    [AS_HELP_STRING([--disable-write],[disable building the write methods in ADIOS.])])
-AM_CONDITIONAL([BUILD_WRITE], [test "x$enable_write" != "xno"])
 
 dnl CC="$MPICC"
 dnl CXX="$MPICXX"
@@ -406,7 +422,7 @@ if test -z "${HAVE_DMALLOC_TRUE}"; then
     ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${DMALLOC_LIBS}"
 fi
 if test -z "${HAVE_LUSTRE_TRUE}"; then
-    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${LUSTRE_CPPFLAGS}" 
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} ${LUSTRE_CPPFLAGS}"
     ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${LUSTRE_CFLAGS}"
     ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${LUSTRE_LDFLAGS}"
     ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${LUSTRE_LIBS}"
@@ -415,6 +431,162 @@ if test -z "${HAVE_LUSTRE_TRUE}"; then
     ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${LUSTRE_LDFLAGS}"
     ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${LUSTRE_LIBS}"
 fi
+if test -z "${HAVE_ZLIB_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ZLIB_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ZLIB_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ZLIB_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ZLIB_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DZLIB ${ZLIB_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ZLIB_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ZLIB_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ZLIB_LIBS}"
+fi
+if test -z "${HAVE_BZIP2_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${BZIP2_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${BZIP2_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${BZIP2_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${BZIP2_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DBZIP2 ${BZIP2_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${BZIP2_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${BZIP2_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${BZIP2_LIBS}"
+fi
+if test -z "${HAVE_SZIP_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${SZIP_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${SZIP_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${SZIP_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${SZIP_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DSZIP ${SZIP_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${SZIP_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${SZIP_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${SZIP_LIBS}"
+fi
+if test -z "${HAVE_ISOBAR_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ISOBAR_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ISOBAR_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ISOBAR_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ISOBAR_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DISOBAR ${ISOBAR_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ISOBAR_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ISOBAR_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ISOBAR_LIBS}"
+fi
+if test -z "${HAVE_APLOD_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${APLOD_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${APLOD_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${APLOD_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${APLOD_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DAPLOD ${APLOD_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${APLOD_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${APLOD_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${APLOD_LIBS}"
+fi
+if test -z "${HAVE_ALACRITY_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${ALACRITY_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${ALACRITY_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${ALACRITY_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DALACRITY ${ALACRITY_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${ALACRITY_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${ALACRITY_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${ALACRITY_LIBS}"
+fi
+
+if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
+    ADIOSLIB_CPPFLAGS="${ADIOSLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_CFLAGS="${ADIOSLIB_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_LDFLAGS="${ADIOSLIB_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_LDADD="${ADIOSLIB_LDADD} ${TIMER_LIBS}"
+    ADIOSLIB_SEQ_CPPFLAGS="${ADIOSLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_SEQ_CFLAGS="${ADIOSLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_SEQ_LDFLAGS="${ADIOSLIB_SEQ_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_SEQ_LDADD="${ADIOSLIB_SEQ_LDADD} ${TIMER_LIBS}"
+    ADIOSLIB_INT_CPPFLAGS="${ADIOSLIB_INT_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSLIB_INT_CFLAGS="${ADIOSLIB_INT_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSLIB_INT_LDFLAGS="${ADIOSLIB_INT_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSLIB_INT_LDADD="${ADIOSLIB_INT_LDADD} ${TIMER_LIBS}"
+    ADIOSREADLIB_CPPFLAGS="${ADIOSREADLIB_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSREADLIB_CFLAGS="${ADIOSREADLIB_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSREADLIB_LDFLAGS="${ADIOSREADLIB_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSREADLIB_LDADD="${ADIOSREADLIB_LDADD} ${TIMER_LIBS}"
+    ADIOSREADLIB_SEQ_CPPFLAGS="${ADIOSREADLIB_SEQ_CPPFLAGS} -DWITH_NCSU_TIMER ${TIMER_CPPFLAGS}"
+    ADIOSREADLIB_SEQ_CFLAGS="${ADIOSREADLIB_SEQ_CFLAGS} ${TIMER_CFLAGS}"
+    ADIOSREADLIB_SEQ_LDFLAGS="${ADIOSREADLIB_SEQ_LDFLAGS} ${TIMER_LDFLAGS}"
+    ADIOSREADLIB_SEQ_LDADD="${ADIOSREADLIB_SEQ_LDADD} ${TIMER_LIBS}"
+fi
+
 AC_SUBST(ADIOSLIB_CPPFLAGS)
 AC_SUBST(ADIOSLIB_CFLAGS)
 AC_SUBST(ADIOSLIB_LDFLAGS)
@@ -458,12 +630,12 @@ AC_DEFINE_UNQUOTED(VERSION_MICRO, ${VERSION_MICRO}, [Micro version number])
 # Get the version of the source we are configuring here
 # Just to print it out at the end of configure
 # see also Makefile.am:install-data-hook
-if type svnversion &>/dev/null; then
-    SVNVERSION=`svnversion`
-else
-    SVNVERSION="unknown"
-fi
-AC_DEFINE_UNQUOTED(VERSION_SVNREV, "${SVNVERSION}", [svn revision number])
+#if type svnversion &>/dev/null; then
+#    SVNVERSION=`svnversion`
+#else
+#    SVNVERSION="unknown"
+#fi
+#AC_DEFINE_UNQUOTED(VERSION_SVNREV, "${SVNVERSION}", [svn revision number])
 
 
 
@@ -472,12 +644,20 @@ AC_CONFIG_FILES([Makefile
                  src/Makefile
                  tests/Makefile
                  tests/C/Makefile
+                 tests/C/flexpath_tests/Makefile
+                 tests/C/flexpath_tests/1D_arr_global/Makefile
+                 tests/C/flexpath_tests/1D_arr_global_noxml/Makefile
+                 tests/C/flexpath_tests/global_range_select/Makefile
+                 tests/C/flexpath_tests/maya_noxml/Makefile
+                 tests/C/flexpath_tests/maya_append/Makefile
+                 tests/C/flexpath_tests/scalar/Makefile
                  tests/Fortran/Makefile
                  tests/genarray/Makefile
                  tests/bp_read/Makefile
                  tests/suite/Makefile
                  tests/suite/programs/Makefile
                  utils/Makefile
+                 utils/skeldump/Makefile
                  utils/skel/Makefile
                  utils/skel/etc/Makefile
                  utils/skel/src/Makefile
@@ -490,6 +670,7 @@ AC_CONFIG_FILES([Makefile
                  utils/bp2ascii/Makefile
                  utils/bpsplit/Makefile
                  utils/bpls/Makefile
+                 utils/bpdiff/Makefile
                  utils/bp2bp/Makefile
                  examples/Makefile
                  examples/C/Makefile
@@ -505,6 +686,8 @@ AC_CONFIG_FILES([Makefile
                  examples/C/stat/Makefile
                  examples/C/read_all/Makefile
                  examples/C/schema/Makefile
+                 examples/C/transforms/Makefile
+                 examples/C/compression_test/Makefile
                  examples/Fortran/Makefile
                  examples/Fortran/scalars/Makefile
                  examples/Fortran/arrays/Makefile
@@ -520,6 +703,17 @@ echo "*********************************"
 echo $PACKAGE configured as follows:
 echo "*********************************"
 echo
+if test -z "${BUILD_WRITE_TRUE}"; then
+    echo "  - Build both the Write and Read libraries";
+else
+    echo "  - Build only the Read libraries";
+fi
+if test -z "${BUILD_FORTRAN_TRUE}"; then
+    echo "  - Build both the C and Fortran libraries";
+else
+    echo "  - Build only the C libraries (no Fortran)";
+fi
+echo
 echo "  - General Compile FLAGS";
 echo "      - CC  = $CC";
 echo "      - CXX = $CXX";
@@ -613,7 +807,7 @@ elif test -z "${HAVE_DCMF_TRUE}"; then
     echo "      - DCMF_LDFLAGS = $DCMF_LDFLAGS";
     echo "      - DCMF_LIBS = $DCMF_LIBS";
     echo
-else 
+else
     echo "    - No supported networking library found"
 fi
 
@@ -727,5 +921,88 @@ else
     echo "  - No FLEXPATH to build FLEXPATH transport method"
 fi
 
-echo "  - SVN version = ${SVNVERSION}"
+if test -z "${HAVE_ZLIB_TRUE}"; then
+    echo "  - ZLIB";
+    echo "      - ZLIB_CFLAGS = $ZLIB_CFLAGS";
+    echo "      - ZLIB_CPPFLAGS = $ZLIB_CPPFLAGS";
+    echo "      - ZLIB_LDFLAGS = $ZLIB_LDFLAGS";
+    echo "      - ZLIB_LIBS = $ZLIB_LIBS";
+    echo
+else
+    echo "  - No ZLIB to build ZLIB transform method"
+fi
+
+if test -z "${HAVE_BZIP2_TRUE}"; then
+    echo "  - BZIP2";
+    echo "      - BZIP2_CFLAGS = $BZIP2_CFLAGS";
+    echo "      - BZIP2_CPPFLAGS = $BZIP2_CPPFLAGS";
+    echo "      - BZIP2_LDFLAGS = $BZIP2_LDFLAGS";
+    echo "      - BZIP2_LIBS = $BZIP2_LIBS";
+    echo
+else
+    echo "  - No BZIP2 to build BZIP2 transform method"
+fi
+
+if test -z "${HAVE_SZIP_TRUE}"; then
+    echo "  - SZIP";
+    echo "      - SZIP_CFLAGS = $SZIP_CFLAGS";
+    echo "      - SZIP_CPPFLAGS = $SZIP_CPPFLAGS";
+    echo "      - SZIP_LDFLAGS = $SZIP_LDFLAGS";
+    echo "      - SZIP_LIBS = $SZIP_LIBS";
+    echo
+else
+    echo "  - No SZIP to build SZIP transform method"
+fi
+
+if test -z "${HAVE_ISOBAR_TRUE}"; then
+    echo "  - ISOBAR";
+    echo "      - ISOBAR_CFLAGS = $ISOBAR_CFLAGS";
+    echo "      - ISOBAR_CPPFLAGS = $ISOBAR_CPPFLAGS";
+    echo "      - ISOBAR_LDFLAGS = $ISOBAR_LDFLAGS";
+    echo "      - ISOBAR_LIBS = $ISOBAR_LIBS";
+    echo
+else
+    echo "  - No ISOBAR to build ISOBAR transform method"
+fi
+
+if test -z "${HAVE_APLOD_TRUE}"; then
+    echo "  - APLOD";
+    echo "      - APLOD_CFLAGS = $APLOD_CFLAGS";
+    echo "      - APLOD_CPPFLAGS = $APLOD_CPPFLAGS";
+    echo "      - APLOD_LDFLAGS = $APLOD_LDFLAGS";
+    echo "      - APLOD_LIBS = $APLOD_LIBS";
+    echo
+else
+    echo "  - No APLOD to build APLOD transform method"
+fi
+
+if test -z "${HAVE_ALACRITY_TRUE}"; then
+    echo "  - ALACRITY";
+    echo "      - ALACRITY_CFLAGS = $ALACRITY_CFLAGS";
+    echo "      - ALACRITY_CPPFLAGS = $ALACRITY_CPPFLAGS";
+    echo "      - ALACRITY_LDFLAGS = $ALACRITY_LDFLAGS";
+    echo "      - ALACRITY_LIBS = $ALACRITY_LIBS";
+    echo
+else
+    echo "  - No ALACRITY to build ALACRITY transform method"
+fi
+
+if test -z "${HAVE_NCSU_TIMER_TRUE}"; then
+    echo "  - NCSU timer lib";
+    echo "      - TIMER_CFLAGS = $TIMER_CFLAGS";
+    echo "      - TIMER_CPPFLAGS = $TIMER_CPPFLAGS";
+    echo "      - TIMER_LDFLAGS = $TIMER_LDFLAGS";
+    echo "      - TIMER_LIBS = $TIMER_LIBS";
+    echo
+else
+    echo "  - No NCSU timer lib"
+fi
+
+if test -z "${HAVE_BGQ_TRUE}"; then
+    echo "  - BGQ METHOD is enabled";
+else
+    echo "  - BGQ METHOD is disabled"
+fi
+
+#echo "  - SVN version = ${SVNVERSION}"
 echo "  - Install path = ${prefix}"
diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am
index fe193d0..913a1c9 100644
--- a/examples/C/Makefile.am
+++ b/examples/C/Makefile.am
@@ -1 +1 @@
-SUBDIRS=scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays
+SUBDIRS=scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays transforms compression_test
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index 0760d56..d3e216a 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = examples/C
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -323,7 +352,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays
+SUBDIRS = scalars arrays attributes manual global-array global-array-time read_all stat schema flexpath_arrays transforms compression_test
 all: all-recursive
 
 .SUFFIXES:
diff --git a/examples/C/arrays/CMakeLists.txt b/examples/C/arrays/CMakeLists.txt
index 92e698d..f17ac03 100644
--- a/examples/C/arrays/CMakeLists.txt
+++ b/examples/C/arrays/CMakeLists.txt
@@ -4,10 +4,22 @@ include_directories(${PROJECT_SOURCE_DIR}/examples/C/arrays)
 link_directories(${PROJECT_BINARY_DIR}/examples/C/arrays)
 
 add_executable(arrays_write arrays_write.c)
-target_link_libraries(arrays_write adios ${ADIOSLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(arrays_write PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(arrays_write PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(arrays_write adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
 
 add_executable(arrays_read arrays_read.c)
-target_link_libraries(arrays_read adiosread ${ADIOSREADLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(arrays_read PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(arrays_read PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(arrays_read adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 
 #install(FILES arrays.xml gwrite_arrays.ch gread_arrays.ch job.pbs  DESTINATION ${PROJECT_BINARY_DIR}/examples/C/arrays)
 
diff --git a/examples/C/arrays/Makefile.am b/examples/C/arrays/Makefile.am
index a8ca3db..534287d 100644
--- a/examples/C/arrays/Makefile.am
+++ b/examples/C/arrays/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = arrays_write arrays_read
 
 arrays_write_SOURCES = arrays_write.c
diff --git a/examples/C/arrays/Makefile.in b/examples/C/arrays/Makefile.in
index 1f08fcf..ebf92c9 100644
--- a/examples/C/arrays/Makefile.in
+++ b/examples/C/arrays/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
 subdir = examples/C/arrays
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
 arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -481,7 +510,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -580,19 +609,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/arrays/arrays.xml b/examples/C/arrays/arrays.xml
index fa16af7..7a11efa 100644
--- a/examples/C/arrays/arrays.xml
+++ b/examples/C/arrays/arrays.xml
@@ -1,16 +1,16 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
 
-    <adios-group name="arrays" coordination-communicator="comm">
+    <adios-group name="arrays">
         <var name="NX" type="integer"/>
         <var name="NY" type="integer"/>
         <var name="var_double_2Darray"  gwrite="t"  type="double"  dimensions="NX,NY"/>
         <var name="var_int_1Darray"     gwrite="p"  type="integer" dimensions="NX"/>
     </adios-group>
 
-<method group="arrays"  method="MPI"/>
+    <method group="arrays"  method="MPI"/>
 
-<buffer size-MB="20" allocate-time="now"/>
+    <buffer size-MB="20" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/attributes/CMakeLists.txt b/examples/C/attributes/CMakeLists.txt
index 0b5edfb..298a0b3 100644
--- a/examples/C/attributes/CMakeLists.txt
+++ b/examples/C/attributes/CMakeLists.txt
@@ -4,10 +4,22 @@ include_directories(${PROJECT_SOURCE_DIR}/examples/C/attributes)
 link_directories(${PROJECT_BINARY_DIR}/examples/C/attributes)
 
 add_executable(attributes_write attributes_write.c)
-target_link_libraries(attributes_write adios ${ADIOSLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(attributes_write PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(attributes_write PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(attributes_write adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
 
 add_executable(attributes_read attributes_read.c)
-target_link_libraries(attributes_read adiosread ${ADIOSREADLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(attributes_read PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(attributes_read PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(attributes_read adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 #set_target_properties(attributes_read PROPERTIES COMPILE_FLAGS "-DADIOS_USE_READ_API_1")
 
 #install(FILES attributes.xml gwrite_temperature.ch gread_temperature.ch DESTINATION ${PROJECT_BINARY_DIR}/examples/C/attributes)
diff --git a/examples/C/attributes/Makefile.am b/examples/C/attributes/Makefile.am
index 322fa0f..2ecd206 100644
--- a/examples/C/attributes/Makefile.am
+++ b/examples/C/attributes/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = attributes_write attributes_read
 
 attributes_write_SOURCES = attributes_write.c
diff --git a/examples/C/attributes/Makefile.in b/examples/C/attributes/Makefile.in
index 709e850..0af1141 100644
--- a/examples/C/attributes/Makefile.in
+++ b/examples/C/attributes/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = attributes_write$(EXEEXT) attributes_read$(EXEEXT)
 subdir = examples/C/attributes
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 attributes_write_SOURCES = attributes_write.c
 attributes_write_LDADD = $(top_builddir)/src/libadios.a \
@@ -483,7 +512,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -582,19 +611,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/attributes/attributes.xml b/examples/C/attributes/attributes.xml
index e88e368..f9988fb 100644
--- a/examples/C/attributes/attributes.xml
+++ b/examples/C/attributes/attributes.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
-    <adios-group name="temperature" coordination-communicator="comm">
+    <adios-group name="temperature">
         <var name="NX"   type="integer"/>
         <var name="size" type="integer"/>
         <var name="rank" type="integer"/>
@@ -12,21 +12,23 @@
         </global-bounds>
 
         <!-- an integer attribute set to 1 -->
-        <attribute name="number of levels" path="/temperature" 
-                   type="integer" value="1"/>
+        <attribute name="temperature/number of levels" 
+                   type="integer" 
+                   value="1"/>
 
         <!-- a string attribute -->
-        <attribute name="description" path="/temperature" 
-                   value="Global array written from 'size' processes" type="string"/>
+        <attribute name="temperature/description"
+                   value="Global array written from 'size' processes" 
+                   type="string"/>
 
         <!-- attributes inheriting the type and value of the scalar variables -->
-        <attribute name="mean value"     path="/temperature" var="mean"/>
-        <attribute name="date of coding" path="/temperature" var="date"/>
+        <attribute name="temperature/mean value"     var="mean"/>
+        <attribute name="temperature/date of coding" var="date"/>
     </adios-group>
 
-<method group="temperature" method="MPI"/>
+    <method group="temperature" method="MPI"/>
 
-<buffer size-MB="2" allocate-time="now"/>
+    <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/compression_test/Makefile.am b/examples/C/compression_test/Makefile.am
new file mode 100755
index 0000000..707f1e9
--- /dev/null
+++ b/examples/C/compression_test/Makefile.am
@@ -0,0 +1,37 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.sh $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/conf_genarray3D $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/conf_simple $(builddir)
+
+noinst_PROGRAMS = adios_global adios_read_box adios_read_points genarray3D 
+
+adios_global_SOURCES = adios_global.c
+adios_global_LDADD = $(top_builddir)/src/libadios.a 
+adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_global_LDADD += $(ADIOSLIB_LDADD)
+adios_read_box_SOURCES = adios_read_box.c
+adios_read_box_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_box_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_box_LDADD += $(ADIOSLIB_LDADD)
+adios_read_points_SOURCES = adios_read_points.c
+adios_read_points_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_points_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_points_LDADD += $(ADIOSLIB_LDADD)
+genarray3D_SOURCES = genarray3D.c
+genarray3D_LDADD = $(top_builddir)/src/libadios.a 
+genarray3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+genarray3D_LDADD += $(ADIOSLIB_LDADD)
+
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+EXTRA_DIST = gread_temperature.ch gwrite_temperature.ch \
+             read_test.h \
+	     test_read_box.sh  test_read_points.sh  write_all.sh \
+	     conf_genarray3D conf_simple 
+
diff --git a/examples/C/manual/Makefile.in b/examples/C/compression_test/Makefile.in
similarity index 75%
copy from examples/C/manual/Makefile.in
copy to examples/C/compression_test/Makefile.in
index 088c3b4..d682809 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/compression_test/Makefile.in
@@ -34,12 +34,16 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = 1_nonadios_example$(EXEEXT) 2_adios_write$(EXEEXT) \
-	3_adios_read$(EXEEXT) 4_adios_nfiles$(EXEEXT)
-subdir = examples/C/manual
+noinst_PROGRAMS = adios_global$(EXEEXT) adios_read_box$(EXEEXT) \
+	adios_read_points$(EXEEXT) genarray3D$(EXEEXT)
+subdir = examples/C/compression_test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,35 +75,35 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_1_nonadios_example_OBJECTS = 1_nonadios_example.$(OBJEXT)
-1_nonadios_example_OBJECTS = $(am_1_nonadios_example_OBJECTS)
+am_adios_global_OBJECTS = adios_global.$(OBJEXT)
+adios_global_OBJECTS = $(am_adios_global_OBJECTS)
 am__DEPENDENCIES_1 =
-1_nonadios_example_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+adios_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-1_nonadios_example_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(1_nonadios_example_LDFLAGS) $(LDFLAGS) -o $@
-am_2_adios_write_OBJECTS = 2_adios_write.$(OBJEXT)
-2_adios_write_OBJECTS = $(am_2_adios_write_OBJECTS)
-2_adios_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_global_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_box_OBJECTS = adios_read_box.$(OBJEXT)
+adios_read_box_OBJECTS = $(am_adios_read_box_OBJECTS)
+adios_read_box_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-2_adios_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_box_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(2_adios_write_LDFLAGS) $(LDFLAGS) -o $@
-am_3_adios_read_OBJECTS = 3_adios_read.$(OBJEXT)
-3_adios_read_OBJECTS = $(am_3_adios_read_OBJECTS)
-3_adios_read_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_read_box_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_points_OBJECTS = adios_read_points.$(OBJEXT)
+adios_read_points_OBJECTS = $(am_adios_read_points_OBJECTS)
+adios_read_points_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-3_adios_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_points_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(3_adios_read_LDFLAGS) $(LDFLAGS) -o $@
-am_4_adios_nfiles_OBJECTS = 4_adios_nfiles.$(OBJEXT)
-4_adios_nfiles_OBJECTS = $(am_4_adios_nfiles_OBJECTS)
-4_adios_nfiles_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_read_points_LDFLAGS) $(LDFLAGS) -o $@
+am_genarray3D_OBJECTS = genarray3D.$(OBJEXT)
+genarray3D_OBJECTS = $(am_genarray3D_OBJECTS)
+genarray3D_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-4_adios_nfiles_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+genarray3D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(4_adios_nfiles_LDFLAGS) $(LDFLAGS) -o $@
+	$(genarray3D_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -108,10 +116,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(1_nonadios_example_SOURCES) $(2_adios_write_SOURCES) \
-	$(3_adios_read_SOURCES) $(4_adios_nfiles_SOURCES)
-DIST_SOURCES = $(1_nonadios_example_SOURCES) $(2_adios_write_SOURCES) \
-	$(3_adios_read_SOURCES) $(4_adios_nfiles_SOURCES)
+SOURCES = $(adios_global_SOURCES) $(adios_read_box_SOURCES) \
+	$(adios_read_points_SOURCES) $(genarray3D_SOURCES)
+DIST_SOURCES = $(adios_global_SOURCES) $(adios_read_box_SOURCES) \
+	$(adios_read_points_SOURCES) $(genarray3D_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -137,12 +145,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -205,6 +222,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -277,7 +297,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -332,25 +361,29 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
-1_nonadios_example_SOURCES = 1_nonadios_example.c
-1_nonadios_example_LDADD = $(top_builddir)/src/libadios.a \
+adios_global_SOURCES = adios_global.c
+adios_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_box_SOURCES = adios_read_box.c
+adios_read_box_LDADD = $(top_builddir)/src/libadiosread.a \
 	$(ADIOSLIB_LDADD)
-1_nonadios_example_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-2_adios_write_SOURCES = 2_adios_write.c
-2_adios_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-2_adios_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-3_adios_read_SOURCES = 3_adios_read.c
-3_adios_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-3_adios_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-4_adios_nfiles_SOURCES = 4_adios_nfiles.c
-4_adios_nfiles_LDADD = $(top_builddir)/src/libadios.a \
+adios_read_box_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_points_SOURCES = adios_read_points.c
+adios_read_points_LDADD = $(top_builddir)/src/libadiosread.a \
 	$(ADIOSLIB_LDADD)
-4_adios_nfiles_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_points_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+genarray3D_SOURCES = genarray3D.c
+genarray3D_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+genarray3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = config.xml gread_temperature.ch gwrite_temperature.ch
+EXTRA_DIST = gread_temperature.ch gwrite_temperature.ch \
+             read_test.h \
+	     test_read_box.sh  test_read_points.sh  write_all.sh \
+	     conf_genarray3D conf_simple 
+
 all: all-am
 
 .SUFFIXES:
@@ -364,9 +397,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/manual/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/compression_test/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/manual/Makefile
+	  $(AUTOMAKE) --gnu examples/C/compression_test/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -394,18 +427,18 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-1_nonadios_example$(EXEEXT): $(1_nonadios_example_OBJECTS) $(1_nonadios_example_DEPENDENCIES) 
-	@rm -f 1_nonadios_example$(EXEEXT)
-	$(1_nonadios_example_LINK) $(1_nonadios_example_OBJECTS) $(1_nonadios_example_LDADD) $(LIBS)
-2_adios_write$(EXEEXT): $(2_adios_write_OBJECTS) $(2_adios_write_DEPENDENCIES) 
-	@rm -f 2_adios_write$(EXEEXT)
-	$(2_adios_write_LINK) $(2_adios_write_OBJECTS) $(2_adios_write_LDADD) $(LIBS)
-3_adios_read$(EXEEXT): $(3_adios_read_OBJECTS) $(3_adios_read_DEPENDENCIES) 
-	@rm -f 3_adios_read$(EXEEXT)
-	$(3_adios_read_LINK) $(3_adios_read_OBJECTS) $(3_adios_read_LDADD) $(LIBS)
-4_adios_nfiles$(EXEEXT): $(4_adios_nfiles_OBJECTS) $(4_adios_nfiles_DEPENDENCIES) 
-	@rm -f 4_adios_nfiles$(EXEEXT)
-	$(4_adios_nfiles_LINK) $(4_adios_nfiles_OBJECTS) $(4_adios_nfiles_LDADD) $(LIBS)
+adios_global$(EXEEXT): $(adios_global_OBJECTS) $(adios_global_DEPENDENCIES) 
+	@rm -f adios_global$(EXEEXT)
+	$(adios_global_LINK) $(adios_global_OBJECTS) $(adios_global_LDADD) $(LIBS)
+adios_read_box$(EXEEXT): $(adios_read_box_OBJECTS) $(adios_read_box_DEPENDENCIES) 
+	@rm -f adios_read_box$(EXEEXT)
+	$(adios_read_box_LINK) $(adios_read_box_OBJECTS) $(adios_read_box_LDADD) $(LIBS)
+adios_read_points$(EXEEXT): $(adios_read_points_OBJECTS) $(adios_read_points_DEPENDENCIES) 
+	@rm -f adios_read_points$(EXEEXT)
+	$(adios_read_points_LINK) $(adios_read_points_OBJECTS) $(adios_read_points_LDADD) $(LIBS)
+genarray3D$(EXEEXT): $(genarray3D_OBJECTS) $(genarray3D_DEPENDENCIES) 
+	@rm -f genarray3D$(EXEEXT)
+	$(genarray3D_LINK) $(genarray3D_OBJECTS) $(genarray3D_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -512,7 +545,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -611,19 +644,25 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.sh $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/conf_genarray3D $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/conf_simple $(builddir)
 
 # 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.
diff --git a/examples/C/compression_test/adios_global.c b/examples/C/compression_test/adios_global.c
new file mode 100755
index 0000000..1a22dab
--- /dev/null
+++ b/examples/C/compression_test/adios_global.c
@@ -0,0 +1,88 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write a global array from N processors with gwrite
+ *
+ * How to run: mpirun -np <N> adios_global
+ * Output: adios_global.bp
+ * ADIOS config file: adios_global.xml
+ *
+*/
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+
+#define NAME_LEN	256
+
+void usage()
+{
+    printf("Usage: mpirun -np 4 ./adios_global <IO_Compression>\n");
+    printf("Example: mpirun -np 4 ./adios_global mpi_zlib\n");
+}
+
+int main (int argc, char ** argv)
+{
+    char        filename [256];
+    int         rank, size, i;
+    int         NX = 10;
+    double      t[NX];
+    MPI_Comm    comm = MPI_COMM_WORLD;
+
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    if(argc < 2)
+    {
+        usage();
+        return -1;
+    }
+
+    char* option = argv[1];
+    // char option[NAME_LEN] = {0};
+    char bp_file_name[NAME_LEN] = {0};
+    char xml_file_name[NAME_LEN] = {0};
+
+    snprintf(bp_file_name, NAME_LEN-1, "output/%s.bp", option);
+    snprintf(xml_file_name, NAME_LEN-1, "conf/%s.xml", option);
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    for (i = 0; i < NX; i++)
+        t[i] = rank * NX + i;
+
+//	strcpy (filename, "adios_global.bp");
+    strcpy (filename, bp_file_name);
+
+
+    adios_init (xml_file_name, comm);
+
+    adios_open (&adios_handle, "temperature", filename, "w", comm);
+//	#include "gwrite_temperature.ch"
+    adios_groupsize = 4 \
+                        + 4 \
+                        + 4 \
+                        + 8 * (1) * (NX);
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "NX", &NX);
+    adios_write (adios_handle, "size", &size);
+    adios_write (adios_handle, "rank", &rank);
+    adios_write (adios_handle, "temperature", t);
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/compression_test/adios_read_box.c b/examples/C/compression_test/adios_read_box.c
new file mode 100755
index 0000000..fbebb6f
--- /dev/null
+++ b/examples/C/compression_test/adios_read_box.c
@@ -0,0 +1,79 @@
+
+#include "read_test.h"
+
+int read_bounding_box(const char* file_name, const char* var_name, 
+						const uint64_t* starts, const uint64_t* counts,
+						const uint64_t* points, const uint64_t npoints,
+						int writeblock_index,
+						double** data, uint64_t* nreslts)
+{
+	enum ADIOS_READ_METHOD  method = ADIOS_READ_METHOD_BP;
+    MPI_Comm comm = MPI_COMM_WORLD;
+	
+	ADIOS_FILE *f = adios_read_open_file(file_name, method, comm);
+	// adios_group_view(f,-1);
+    ADIOS_VARINFO *varinfo = adios_inq_var(f, var_name);
+	
+	if(varinfo->ndim != g_ndims)
+	{
+		printf("test failed\n");
+		adios_free_varinfo(varinfo);
+		adios_read_close(f);
+		adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+		return -1;
+	}
+
+    assert (varinfo);
+    adios_inq_var_blockinfo (f, varinfo);
+	
+	ADIOS_SELECTION* sel1 = adios_selection_boundingbox(varinfo->ndim, starts, counts);
+	
+	*nreslts = 1;
+	int i = 0;
+	for (i = 0; i < varinfo->ndim; i++) 
+	{
+        (*nreslts) *= counts[i];
+    }
+	
+	*data = (double*)malloc((*nreslts) * sizeof (double));
+	
+	adios_schedule_read(f, sel1, var_name, 0, 1, *data);
+	adios_perform_reads(f, 1);
+	
+	adios_selection_delete(sel1);
+	adios_free_varinfo(varinfo);
+    adios_read_close(f);
+    adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+	
+	return 0;
+}
+
+int main(int argc, char** argv)
+{
+	MPI_Init (&argc, &argv);
+	
+	// const char* all_file_names[2] = {"output/mpi_none.bp", "output/mpi_zlib.bp"};
+	int file_count = argc - 1;
+	char** all_file_names = argv + 1;
+	
+	get_dim_info(all_file_names, VAR_NAME);
+	
+	printf("[%d]: ", g_ndims);
+	int i = 0;
+	for(i = 0; i < g_ndims; i++)
+	{
+		printf("%d ", g_dim[i]);
+	}
+	printf("\n");
+	
+	// for(i = 0; i < file_count; i++)
+	// {
+		// printf("%s\n", all_file_names[i]);
+	// }
+	
+	int rtn = test_all_files(all_file_names, file_count, read_bounding_box);
+	
+    MPI_Finalize ();
+	
+	return rtn;
+}
diff --git a/examples/C/compression_test/adios_read_points.c b/examples/C/compression_test/adios_read_points.c
new file mode 100755
index 0000000..a190f85
--- /dev/null
+++ b/examples/C/compression_test/adios_read_points.c
@@ -0,0 +1,59 @@
+
+#include "read_test.h"
+
+int read_points(const char* file_name, const char* var_name, 
+						const uint64_t* starts, const uint64_t* counts,
+						const uint64_t* points, const uint64_t npoints,
+						int writeblock_index,
+						double** data, uint64_t* nreslts)
+{
+	enum ADIOS_READ_METHOD  method = ADIOS_READ_METHOD_BP;
+    MPI_Comm comm = MPI_COMM_WORLD;
+	
+	ADIOS_FILE *f = adios_read_open_file (file_name, method, comm);
+    ADIOS_VARINFO *varinfo = adios_inq_var (f, var_name);
+
+    assert (varinfo);
+    adios_inq_var_blockinfo (f, varinfo);
+	
+	// printf("read_points npoints %d\n", npoints);
+	
+	ADIOS_SELECTION* sel1 = adios_selection_points(varinfo->ndim, npoints, points);
+	
+	*nreslts = npoints;
+	
+	*data = (double*)malloc((*nreslts) * sizeof (double));
+	
+	adios_schedule_read(f, sel1, var_name, 0, 1, *data);
+	adios_perform_reads(f, 1);
+	
+	adios_selection_delete(sel1);
+	adios_free_varinfo(varinfo);
+    adios_read_close(f);
+    adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+	
+	return 0;
+}
+
+int main(int argc, char** argv)
+{
+	MPI_Init (&argc, &argv);
+	
+	// const char* all_file_names[2] = {"output/mpi_none.bp", "output/mpi_zlib.bp"};
+	int file_count = argc - 1;
+	char** all_file_names = argv + 1;
+	
+	get_dim_info(all_file_names, VAR_NAME);
+	
+	int i = 0;
+	for(i = 0; i < file_count; i++)
+	{
+		printf("%s\n", all_file_names[i]);
+	}
+	
+	int rtn = test_all_files(all_file_names, file_count, read_points);
+	
+    MPI_Finalize ();
+	
+	return rtn;
+}
diff --git a/examples/C/compression_test/conf_genarray3D/amr_bzip2.xml b/examples/C/compression_test/conf_genarray3D/amr_bzip2.xml
new file mode 100755
index 0000000..479b15e
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/amr_bzip2.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/amr_identity.xml b/examples/C/compression_test/conf_genarray3D/amr_identity.xml
new file mode 100755
index 0000000..1c2e553
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/amr_identity.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/amr_isobar.xml b/examples/C/compression_test/conf_genarray3D/amr_isobar.xml
new file mode 100755
index 0000000..c2788c6
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/amr_isobar.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/amr_none.xml b/examples/C/compression_test/conf_genarray3D/amr_none.xml
new file mode 100755
index 0000000..8f8ef5a
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/amr_none.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/amr_zlib.xml b/examples/C/compression_test/conf_genarray3D/amr_zlib.xml
new file mode 100755
index 0000000..c7c4e7b
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/amr_zlib.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/mpi_bzip2.xml b/examples/C/compression_test/conf_genarray3D/mpi_bzip2.xml
new file mode 100755
index 0000000..1585abd
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/mpi_bzip2.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/mpi_identity.xml b/examples/C/compression_test/conf_genarray3D/mpi_identity.xml
new file mode 100755
index 0000000..fb29616
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/mpi_identity.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/mpi_isobar.xml b/examples/C/compression_test/conf_genarray3D/mpi_isobar.xml
new file mode 100755
index 0000000..6226d1c
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/mpi_isobar.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/mpi_none.xml b/examples/C/compression_test/conf_genarray3D/mpi_none.xml
new file mode 100755
index 0000000..6cd0870
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/mpi_none.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/mpi_zlib.xml b/examples/C/compression_test/conf_genarray3D/mpi_zlib.xml
new file mode 100755
index 0000000..5cc90de
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/mpi_zlib.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="MPI"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/posix_bzip2.xml b/examples/C/compression_test/conf_genarray3D/posix_bzip2.xml
new file mode 100755
index 0000000..f02101b
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/posix_bzip2.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="bzip2:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="POSIX"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/posix_identity.xml b/examples/C/compression_test/conf_genarray3D/posix_identity.xml
new file mode 100755
index 0000000..cb936bb
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/posix_identity.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="identity"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="POSIX"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/posix_isobar.xml b/examples/C/compression_test/conf_genarray3D/posix_isobar.xml
new file mode 100755
index 0000000..d80f7e4
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/posix_isobar.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="isobar:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="POSIX"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/posix_none.xml b/examples/C/compression_test/conf_genarray3D/posix_none.xml
new file mode 100755
index 0000000..f99b77f
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/posix_none.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" />
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="POSIX"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/compression_test/conf_genarray3D/posix_zlib.xml b/examples/C/compression_test/conf_genarray3D/posix_zlib.xml
new file mode 100755
index 0000000..94ba901
--- /dev/null
+++ b/examples/C/compression_test/conf_genarray3D/posix_zlib.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="genarray3D" coordination-communicator="group_comm" time-index="steps">
+    <var name="gndx" path="/dimensions" type="integer"/>
+    <var name="gndy" path="/dimensions" type="integer"/>
+    <var name="gndz" path="/dimensions" type="integer"/>
+
+    <var name="nproc" path="/info" type="integer"/>
+    <attribute name="description" path="/info/nproc" value="Number of writers"/>
+    <var name="npx" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
+    <var name="npy" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
+    <var name="npz" path="/info" type="integer"/>
+    <attribute name="description" path="/info/npz" value="Number of processors in z dimension"/>
+
+
+    <!-- Auxiliary variables for global array indexing -->
+    <var name="offx" path="/aux" type="integer"/>
+    <var name="offy" path="/aux" type="integer"/>
+    <var name="offz" path="/aux" type="integer"/>
+    <var name="ndx" path="/aux" type="integer"/>
+    <var name="ndy" path="/aux" type="integer"/>
+    <var name="ndz" path="/aux" type="integer"/>
+
+    <!-- 3D array written by genarray with 1 timesteps -->
+    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
+        <var name="temperature" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+        <var name="preasure" gwrite="double_xyz" gread="double_xyz" path="/var" type="double" dimensions="steps,ndx,ndy,ndz" transform="zlib:5"/>
+    </global-bounds>
+	
+	
+    <attribute name="description" path="/" value="3D array with 3D decomposition"/>
+
+
+  </adios-group>
+
+  <method group="genarray3D" method="POSIX"/>
+
+  <buffer size-MB="1024" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/amr_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/amr_bzip2.xml
index dc2303a..a314729
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/amr_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=1</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/amr_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/amr_identity.xml
index dc2303a..2ea5e98
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/amr_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/amr_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/amr_isobar.xml
index dc2303a..9f9b4c6
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/amr_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/amr_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/amr_none.xml
index dc2303a..ef27068
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/amr_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/amr_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/amr_zlib.xml
index dc2303a..7811d8d
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/amr_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak/adios_global.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak/adios_global.xml
index dc2303a..399e922
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak/adios_global.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak/mpi.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak/mpi.xml
index dc2303a..529623a
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak/mpi.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak/posix.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak/posix.xml
index dc2303a..399e922
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak/posix.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml
index dc2303a..80429a0
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_identity.xml
index dc2303a..2ea5e98
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml
index dc2303a..9f9b4c6
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_none.xml
index dc2303a..ef27068
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_szip.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_szip.xml
index dc2303a..b59c022
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_szip.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="szip:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/amr_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/amr_zlib.xml
index dc2303a..7811d8d
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/amr_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_bzip2.xml
index dc2303a..320c1ae
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_identity.xml
index dc2303a..b1030ca
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_isobar.xml
index dc2303a..135b177
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_none.xml
index dc2303a..3824c11
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_szip.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_szip.xml
index dc2303a..05da36f
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_szip.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="szip:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/mpi_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/mpi_zlib.xml
index dc2303a..529623a
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/mpi_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_bzip2.xml
index dc2303a..09cdaa5
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_identity.xml
index dc2303a..6f7a56f
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml
index dc2303a..d856362
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_none.xml
index dc2303a..460a34d
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_szip.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_szip.xml
index dc2303a..417a7a4
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_szip.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="szip:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml
index dc2303a..399e922
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/bak_2/posix_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/mpi_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/mpi_bzip2.xml
index dc2303a..320c1ae
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/mpi_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/mpi_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/mpi_identity.xml
index dc2303a..b1030ca
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/mpi_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/mpi_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/mpi_isobar.xml
index dc2303a..135b177
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/mpi_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/mpi_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/mpi_none.xml
index dc2303a..3824c11
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/mpi_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/mpi_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/mpi_zlib.xml
index dc2303a..529623a
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/mpi_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/posix_bzip2.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/posix_bzip2.xml
index dc2303a..09cdaa5
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/posix_bzip2.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="bzip2:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/posix_identity.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/posix_identity.xml
index dc2303a..6f7a56f
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/posix_identity.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/posix_isobar.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/posix_isobar.xml
index dc2303a..d856362
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/posix_isobar.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="isobar:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/posix_none.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/posix_none.xml
index dc2303a..460a34d
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/posix_none.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/compression_test/conf_simple/posix_zlib.xml
old mode 100644
new mode 100755
similarity index 74%
copy from examples/C/global-array/adios_global.xml
copy to examples/C/compression_test/conf_simple/posix_zlib.xml
index dc2303a..399e922
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/compression_test/conf_simple/posix_zlib.xml
@@ -5,13 +5,12 @@
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="zlib:5" />
     </global-bounds>
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
+<method group="temperature" method="POSIX">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="2" allocate-time="now"/>
 
diff --git a/examples/C/compression_test/genarray3D.c b/examples/C/compression_test/genarray3D.c
new file mode 100755
index 0000000..062b70c
--- /dev/null
+++ b/examples/C/compression_test/genarray3D.c
@@ -0,0 +1,205 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+
+#define NDIMS	3
+// #define DIM_GLOBAL	256
+// #define DIM_LOCAL		128
+
+int DIM_GLOBAL = 256;
+int DIM_LOCAL = 128;
+
+#define NAME_LEN		256
+#define GROUP_NAME	"genarray3D"
+
+void usage()
+{
+    printf("Usage: mpirun -np 8 ./genarray3D <dim_global> <dim_local> <IO_Compression>\n");
+    printf("Example: mpirun -np 8 ./genarray3D 32 16 mpi_zlib\n");
+}
+
+double dclock ()
+{
+    struct timeval tv;
+    gettimeofday(&tv,0);
+    return (double) tv.tv_sec + (double) tv.tv_usec * 1e-6;
+}
+
+int main (int argc, char ** argv)
+{
+    int i = 0;
+
+    if(argc < 4)
+    {
+        printf("wrong args\n");
+        usage();
+        return -1;
+    }
+
+    DIM_GLOBAL = atoi (argv[1]);
+    DIM_LOCAL = atoi (argv[2]);
+    char* option = argv[3];
+
+    char bp_file_name[NAME_LEN] = {0};
+    char xml_file_name[NAME_LEN] = {0};
+
+    snprintf(bp_file_name, NAME_LEN-1, "output/%s.bp", option);
+    snprintf(xml_file_name, NAME_LEN-1, "conf/%s.xml", option);
+
+    // MPI related intialization
+    int rank, nproc;
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &nproc);
+
+    double t1 = 0.0;
+    double t2 = 0.0;
+    double t3 = 0.0;
+    double t4 = 0.0;
+
+    // variable dimensions
+    int gndx = DIM_GLOBAL;
+    int gndy = DIM_GLOBAL;
+    int gndz = DIM_GLOBAL;
+
+    int ndx = DIM_LOCAL;
+    int ndy = DIM_LOCAL;
+    int ndz = DIM_LOCAL;
+
+    int npx = gndx / ndx;
+    int npy = gndy / ndy;
+    int npz = gndz / ndz;
+
+    if(nproc != npx * npy * npz)
+    {
+        printf("process num error! nproc != npx * npy * npz\n");
+        MPI_Finalize();
+        return -1;
+    }
+
+    int posx = rank / (npx * npy);
+    int posy = rank % (npx * npy) / npy;
+    int posz = rank % (npx * npy) % npy;
+
+    // posx = mod(rank, npx)     // 1st dim easy: 0, npx, 2npx... are in the same X position
+    // posy = mod(rank/npx, npy) // 2nd dim: (0, npx-1) have the same dim (so divide with npx first)
+    // posz = rank/(npx*npy)     // 3rd dim: npx*npy processes belong into one dim
+    int offx = posx * ndx;
+    int offy = posy * ndy;
+    int offz = posz * ndz;
+
+    int timesteps = 0;
+
+    srand(0); // all procs generate the same random datasets
+
+    double* double_xyz = (double*) malloc (sizeof(double) * ndx * ndy * ndz);
+    for(i = 0; i < ndx * ndy * ndz; i++)
+    {
+        double_xyz[i] = (double) rand () / RAND_MAX;
+    }
+
+    int adios_err;
+    uint64_t adios_groupsize, adios_totalsize;
+    int64_t adios_handle;
+
+    if(rank == 0)
+        t3 = dclock();
+
+    MPI_Barrier(comm);
+
+    t1 = dclock();
+
+    adios_init (xml_file_name, comm);
+    adios_open (&adios_handle, GROUP_NAME, bp_file_name, "w", comm);
+
+    //////////////////////////////////////////////////////////////////////////////////////
+    adios_groupsize = 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 4
+                    + 8 * (ndx) * (ndy) * (ndz)
+                    + 8 * (ndx) * (ndy) * (ndz);
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "gndx", &gndx);
+    adios_write (adios_handle, "gndy", &gndy);
+    adios_write (adios_handle, "gndz", &gndz);
+    adios_write (adios_handle, "nproc", &nproc);
+    adios_write (adios_handle, "npx", &npx);
+    adios_write (adios_handle, "npy", &npy);
+    adios_write (adios_handle, "npz", &npz);
+    adios_write (adios_handle, "offx", &offx);
+    adios_write (adios_handle, "offy", &offy);
+    adios_write (adios_handle, "offz", &offz);
+    adios_write (adios_handle, "ndx", &ndx);
+    adios_write (adios_handle, "ndy", &ndy);
+    adios_write (adios_handle, "ndz", &ndz);
+    adios_write (adios_handle, "temperature", double_xyz);
+    adios_write (adios_handle, "preasure", double_xyz);
+
+    //////////////////////////////////////////////////////////////////////////////////////
+
+    adios_close (adios_handle);
+
+    /*
+    t2 = dclock();
+
+    double tt = t2 - t1;
+
+    MPI_Barrier (comm);
+
+    if(rank == 0)
+    {
+        t4 = dclock();
+    }
+    */
+
+    adios_finalize (rank);
+
+    /*
+    double* all_tt = (double*) malloc (sizeof(double) * nproc);
+
+    // calling MPI_Gather
+    int rtn = MPI_Gather (&tt, 1, MPI_DOUBLE, all_tt, 1, MPI_DOUBLE, 0, comm);
+    MPI_Barrier (comm);
+    if(rank == 0)
+    {
+        int k = 0;
+        double sum = 0.0;
+        for(k = 0; k < nproc; k++)
+        {
+            // printf("proc %d time %f\n", k, all_tt[k]);
+            sum += all_tt[k];
+        }
+
+        printf("%s average_write_time %f\n", xml_file_name, sum / nproc);
+        printf("%s total_write_time %f\n", xml_file_name, t4 - t3);
+    }
+
+    if(all_tt)
+    {
+        free(all_tt);
+    }
+    */
+
+    MPI_Finalize ();
+
+    if(double_xyz)
+    {
+        free(double_xyz);
+    }
+
+
+    return 0;
+}
diff --git a/examples/C/compression_test/gread_temperature.ch b/examples/C/compression_test/gread_temperature.ch
new file mode 100755
index 0000000..4c16e85
--- /dev/null
+++ b/examples/C/compression_test/gread_temperature.ch
@@ -0,0 +1,4 @@
+s = adios_selection_writeblock (rank);
+adios_schedule_read (fp, s, "temperature", 1, 1, t);
+adios_perform_reads (fp, 1);
+adios_selection_delete (s);
diff --git a/examples/C/manual/gwrite_temperature.ch b/examples/C/compression_test/gwrite_temperature.ch
old mode 100644
new mode 100755
similarity index 51%
copy from examples/C/manual/gwrite_temperature.ch
copy to examples/C/compression_test/gwrite_temperature.ch
index d47b677..1c8b279
--- a/examples/C/manual/gwrite_temperature.ch
+++ b/examples/C/compression_test/gwrite_temperature.ch
@@ -1,5 +1,9 @@
 adios_groupsize = 4 \
-                + 8 * (NX);
+                + 4 \
+                + 4 \
+                + 8 * (1) * (NX);
 adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
 adios_write (adios_handle, "NX", &NX);
+adios_write (adios_handle, "size", &size);
+adios_write (adios_handle, "rank", &rank);
 adios_write (adios_handle, "temperature", t);
diff --git a/examples/C/compression_test/read_test.h b/examples/C/compression_test/read_test.h
new file mode 100755
index 0000000..a9593e5
--- /dev/null
+++ b/examples/C/compression_test/read_test.h
@@ -0,0 +1,154 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+
+#define VAR_NAME	"/var/temperature"
+#define MAX_DIM	8
+
+typedef int (*test_func)(const char*, const char*, const uint64_t*, const uint64_t*,  const uint64_t*, const uint64_t, const int, double**, uint64_t*);
+
+int g_ndims = 0;
+uint64_t g_dim[MAX_DIM] = {0};
+uint64_t g_total = 1;
+
+int get_dim_info(char** all_file_names, char* var_name)
+{
+	char* file_name = all_file_names[0];
+	enum ADIOS_READ_METHOD  method = ADIOS_READ_METHOD_BP;
+    MPI_Comm comm = MPI_COMM_WORLD;
+	
+	ADIOS_FILE *f = adios_read_open_file(file_name, method, comm);
+    ADIOS_VARINFO *varinfo = adios_inq_var(f, var_name);
+	
+	g_ndims = varinfo->ndim;
+	int d = 0;
+	for(d = 0; d < g_ndims && d < MAX_DIM; d++)
+	{
+		g_dim[d] = varinfo->dims[d];
+		g_total *= varinfo->dims[d];
+	}
+	
+	adios_free_varinfo(varinfo);
+    adios_read_close(f);
+    adios_read_finalize_method(ADIOS_READ_METHOD_BP);
+	return 0;
+}
+
+int generate_random_box(uint64_t* starts, uint64_t* counts)
+{
+	srand(time(NULL));
+	int d = 0;
+	for(d = 0; d < g_ndims && d < MAX_DIM; d++)
+	{
+		starts[d] = rand() % (g_dim[d] - 1);
+		counts[d] = rand() % (g_dim[d] - 1 - starts[d]) + 1;
+		printf("sel dim[%d]: %d %d\n", d, starts[d], counts[d]);
+	}
+	return 0;
+}
+
+int generate_random_points(uint64_t** points, uint64_t* npoints)
+{
+	srand(time(NULL));
+	*npoints = rand() % g_total + 1;	
+	*points  = (uint64_t *)malloc((*npoints) * g_ndims * sizeof (uint64_t));
+	
+	printf("num of points %d %d\n", *npoints, g_total);
+	
+	int i = 0;
+	for (i = 0; i < *npoints; i ++)
+	{
+		int d = 0;
+		for (d = 0; d < g_ndims; d++)
+		{
+			(*points)[i * g_ndims + d] = rand() % g_dim[d];
+		}
+	}
+	
+	return 0;
+}
+
+int generate_random_writeblock(int* writeblock_index)
+{
+	*writeblock_index = rand() % g_dim[0];
+	return 0;
+}
+
+int test_all_files(char** all_file_names, int file_count, test_func func)
+{
+	uint64_t starts[MAX_DIM] = {0};
+	uint64_t counts[MAX_DIM] = {0};
+	generate_random_box(starts, counts);
+		
+	uint64_t npoints = 0;
+	uint64_t* points = NULL;
+	generate_random_points(&points, &npoints);
+	
+	int writeblock_index = 0;
+	generate_random_writeblock(&writeblock_index);
+	
+	double** buffers = (double**)malloc(file_count * sizeof(double*));
+	uint64_t* nresults_all = (uint64_t*)malloc(file_count * sizeof(uint64_t));
+	
+	int f = 0;
+	for(f = 0; f < file_count; f++)
+	{
+		double* data;
+		uint64_t nresults;
+		int rtn = func(all_file_names[f], VAR_NAME, 
+						starts, counts, 
+						points, npoints,
+						writeblock_index,						
+						&data, &nresults);
+		if(rtn != 0)
+		{
+			printf("test failed\n");
+			return -1;
+		}
+		
+		buffers[f] = data;
+		nresults_all[f] = nresults;
+		// printf("%s read in\n", all_file_names[f]);
+	}
+	
+	uint64_t npoints_test = nresults_all[0];
+	for(f = 1; f < file_count; f++)
+	{
+		if(nresults_all[f] != npoints_test)
+		{
+			printf("test failed\n");
+			return -1;
+		}
+	}
+	
+	for(f = 1; f < file_count; f++)
+	{
+		// int i = 0;
+		// for(i = 0; i < npoints_test; i++)
+		// {
+			// printf("%f ", buffers[0][i]);
+		// }
+		// printf("\n");
+		// for(i = 0; i < npoints_test; i++)
+		// {
+			// printf("%f ", buffers[f][i]);
+		// }
+		// printf("\n");
+		
+		if(memcmp(buffers[0], buffers[f], npoints_test * sizeof(double)) != 0)
+		{
+			printf("test failed\n");
+			return -1;
+		}
+	}
+	
+	printf("test succ\n");
+	return 0;
+}
+
+
+
diff --git a/examples/C/compression_test/test_read_box.sh b/examples/C/compression_test/test_read_box.sh
new file mode 100755
index 0000000..6d93a47
--- /dev/null
+++ b/examples/C/compression_test/test_read_box.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+all_bp_files=""
+
+for bp_file in `ls output/ | grep ".bp$"`
+do
+	#echo $bp_file
+	all_bp_files=$all_bp_files" output/"$bp_file
+done
+
+echo $all_bp_files
+
+./adios_read_box $all_bp_files
\ No newline at end of file
diff --git a/examples/C/compression_test/test_read_points.sh b/examples/C/compression_test/test_read_points.sh
new file mode 100755
index 0000000..a3bd6d9
--- /dev/null
+++ b/examples/C/compression_test/test_read_points.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+all_bp_files=""
+
+for bp_file in `ls output/ | grep ".bp$"`
+do
+	#echo $bp_file
+	all_bp_files=$all_bp_files" output/"$bp_file
+done
+
+echo $all_bp_files
+
+./adios_read_points $all_bp_files
\ No newline at end of file
diff --git a/examples/C/compression_test/write_all.sh b/examples/C/compression_test/write_all.sh
new file mode 100755
index 0000000..fcb8d6e
--- /dev/null
+++ b/examples/C/compression_test/write_all.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+mkdir output/
+
+rm -rf conf/
+cp -r conf_genarray3D/ conf/
+
+for xml_file in `ls conf | grep ".xml$"`
+do
+	conf_name=`echo $xml_file | awk -F"." '{printf $1}'`
+	echo $conf_name
+	#mpirun -np 4 ./adios_global `echo $xml_file | awk -F"." '{printf $1}'`
+	#mpirun -np 4 ./adios_global $conf_name
+	mpirun -np 8 ./genarray3D 64 32 $conf_name
+done
diff --git a/examples/C/flexpath_arrays/Makefile.in b/examples/C/flexpath_arrays/Makefile.in
index 6133db8..d999589 100644
--- a/examples/C/flexpath_arrays/Makefile.in
+++ b/examples/C/flexpath_arrays/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = examples/C/flexpath_arrays
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.am b/examples/C/flexpath_arrays/global_range_select/Makefile.am
index aacc040..18f358e 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.am
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = arrays_write arrays_read
 
 arrays_write_SOURCES = arrays_write.c
@@ -14,4 +17,4 @@ arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 CLEANFILES = *.bp
 CC=$(MPICC)
-EXTRA_DIST = arrays.xml 
+EXTRA_DIST = arrays.xml README
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.in b/examples/C/flexpath_arrays/global_range_select/Makefile.in
index a34322f..5f7a8c2 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.in
+++ b/examples/C/flexpath_arrays/global_range_select/Makefile.in
@@ -36,9 +36,13 @@ build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
 subdir = examples/C/flexpath_arrays/global_range_select
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
 arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -325,7 +354,7 @@ arrays_read_SOURCES = arrays_read.c
 arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = arrays.xml 
+EXTRA_DIST = arrays.xml README
 all: all-am
 
 .SUFFIXES:
@@ -481,7 +510,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -580,19 +609,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/flexpath_arrays/global_range_select/README b/examples/C/flexpath_arrays/global_range_select/README
new file mode 100644
index 0000000..d56fabb
--- /dev/null
+++ b/examples/C/flexpath_arrays/global_range_select/README
@@ -0,0 +1,50 @@
+# The protocol file generated by protogen.py ver. 1.0 on 2013-05-03 12:31
+# AUTHOR: Magda S aka Magic Magg magg dot gatech at gmail dot com
+# DATE: 2013-05-03
+
+HOW TO RUN 
+============
+
+
+RUNNING ON KRAKEN
+=================
+This runs one reader per node and one writer per node.
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+You should be able to run the example with as many readers and writers as you wish.
+
+Example PBS script
+------------------
+#!/bash/bin
+#PBS -l walltime=00:05:00,size=24
+#PBS -A UT-TENN0033
+
+date
+
+echo "nodefile="
+cat $PBS_NODEFILE
+echo "=end nodefile"
+
+# make sure you have all modules loaded
+module use ~smagg/opt/modulefiles
+module load mag-mxml-2.7/kraken-gnu
+module list
+
+cd $PBS_O_WORKDIR
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+date
+
+# eof
+
+
+TROUBLESHOOTING
+===============
+
+There might be text files left; they should be removed for the next run.
+
+# EOF
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays.xml b/examples/C/flexpath_arrays/global_range_select/arrays.xml
index 33cec61..147457c 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays.xml
+++ b/examples/C/flexpath_arrays/global_range_select/arrays.xml
@@ -1,17 +1,19 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
 <adios-group name="temperature" coordination-communicator="comm" stats="On">
-    <var name="NX" type="integer"/>
-    <var name="NY" type="integer"/>
+    <var name="NX" path="scalar/dim" type="integer"/>
+    <var name="NY" path="scalar/dim" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
+    <var name="offset" type="integer"/>
+    <var name="size_y" type="integer"/>
     <var name="test_scalar" type="integer"/>
-    <global-bounds dimensions="size,NX" offsets="rank,0">
-        <var name="var_2d_array" gwrite="t" type="double" dimensions="NY,NX"/>
+    <global-bounds dimensions="scalar/dim/NX,size_y" offsets="0,offset">
+        <var name="var_2d_array" gwrite="t" type="double" dimensions="scalar/dim/NX,scalar/dim/NY"/>
     </global-bounds>
 </adios-group>
 
-<method group="temperature"  method="FLEXPATH">QUEUE_SIZE=4;</method>
+<method group="temperature"  method="FLEXPATH">QUEUE_SIZE=4</method>
 
 <buffer size-MB="20" allocate-time="now"/>
 
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_read.c b/examples/C/flexpath_arrays/global_range_select/arrays_read.c
index f277190..2655b11 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_read.c
+++ b/examples/C/flexpath_arrays/global_range_select/arrays_read.c
@@ -35,34 +35,46 @@ int main (int argc, char ** argv)
 
     adios_read_init_method(ADIOS_READ_METHOD_FLEXPATH, comm, "");
 
-    ADIOS_SELECTION global_range_select;
-    //if(rank == 0){
-    global_range_select.type=ADIOS_SELECTION_BOUNDINGBOX;
-    global_range_select.u.bb.start = malloc(sizeof(uint64_t)*2);
-    global_range_select.u.bb.count = malloc(sizeof(uint64_t)*2);
-    (global_range_select.u.bb.start)[0] = rank;
-    (global_range_select.u.bb.count)[0] = 1;
-    (global_range_select.u.bb.start)[1] = 0;
-    (global_range_select.u.bb.count)[1] = 40;
-    global_range_select.u.bb.ndim = 2;
+    ADIOS_SELECTION *global_range_select;
 
     ADIOS_SELECTION scalar_block_select;
     scalar_block_select.type = ADIOS_SELECTION_WRITEBLOCK;
     scalar_block_select.u.block.index = rank;
-    //fprintf(stderr, "app got here\n");
+
     /* schedule_read of a scalar. */    
     int test_scalar = -1;
     ADIOS_FILE* afile = adios_read_open("arrays", 
-                                         ADIOS_READ_METHOD_FLEXPATH, 
-                                         comm,
-                                         ADIOS_LOCKMODE_NONE, 0.0);
+					ADIOS_READ_METHOD_FLEXPATH, 
+					comm,
+					ADIOS_LOCKMODE_NONE, 0.0);
+
+    /* for(i=0; i<afile->nvars; i++){ */
+    /* 	printf("var: %s\n", afile->var_namelist[i]); */
+    /* } */
     
     int ii = 0;
-    while(adios_errno != err_end_of_stream){
-        
+    while(adios_errno != err_end_of_stream){       
         /* get a bounding box - rank 0 for now*/
-        ADIOS_VARINFO* nx_info = adios_inq_var( afile, "NX");
-        ADIOS_VARINFO* ny_info = adios_inq_var( afile, "NY");
+        ADIOS_VARINFO *nx_info = adios_inq_var( afile, "scalar/dim/NX");
+        ADIOS_VARINFO *ny_info = adios_inq_var( afile, "scalar/dim/NY");
+	ADIOS_VARINFO *size_info = adios_inq_var( afile, "size");
+	ADIOS_VARINFO *arry = adios_inq_var( afile, "var_2d_array");
+
+	int nx_val = *((int*)nx_info->value);
+	int ny_val = *((int*)ny_info->value);
+	int size_val = *((int*)size_info->value);
+
+	printf("nx: %d, ny: %d, size: %d\n", nx_val, ny_val, size);
+	
+	uint64_t xcount = arry->dims[0];
+	uint64_t ycount = arry->dims[1];
+
+	uint64_t starts[] = {0,0};
+	uint64_t counts[] = {xcount, ycount};
+
+	global_range_select = adios_selection_boundingbox(2, starts, counts);
+
+	int nelem = xcount*ycount;
 
         if(nx_info->value) {
             NX = *((int *)nx_info->value);
@@ -71,11 +83,16 @@ int main (int argc, char ** argv)
             NY= *((int*)ny_info->value);
         }
     
-        //printf("\trank=%d: NX=%d\n", rank, NX);
-        //printf("\trank=%d: NY=%d\n", rank, NY);
+	if(rank == 0){
+	    int n;
+	    printf("dims: [ ");
+	    for(n=0; n<arry->ndim; n++){
+		printf("%d ", (int)arry->dims[n]);
+	    }
+	    printf("]\n");
+	}
     
         /* Allocate space for the arrays */
-        int nelem = 40;
         int arr_size = sizeof(double) * nelem;
         t = (double *) malloc (arr_size);
         memset(t, 0, arr_size);
@@ -83,7 +100,7 @@ int main (int argc, char ** argv)
       
         /* Read the arrays */        
         adios_schedule_read (afile, 
-                             &global_range_select, 
+                             global_range_select, 
                              "var_2d_array", 
                              0, 1, t);
 	adios_schedule_read (afile,
@@ -95,11 +112,11 @@ int main (int argc, char ** argv)
     
         //sleep(20);
     
-        printf("Rank=%d: test_scalar: %d step: %d, t[0,5+x] = [%6.2f", rank, test_scalar, ii, t[0]);
+        printf("Rank=%d: test_scalar: %d step: %d, t[0,5+x] = [", rank, test_scalar, ii);
         for(j=0; j<nelem; j++) {
             printf(", %6.2f", t[j]);
         }
-        printf("]\n");
+        printf("]\n\n");
         adios_release_step(afile);
         adios_advance_step(afile, 0, 30);
         ii++;
@@ -111,7 +128,7 @@ int main (int argc, char ** argv)
 
     adios_read_finalize_method(ADIOS_READ_METHOD_FLEXPATH);
 
-    //MPI_Finalize ();
+    MPI_Finalize ();
 
     return 0;
 }
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_write.c b/examples/C/flexpath_arrays/global_range_select/arrays_write.c
index f7455b4..b0f823e 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_write.c
+++ b/examples/C/flexpath_arrays/global_range_select/arrays_write.c
@@ -18,10 +18,10 @@
 int main (int argc, char ** argv) 
 {
     char        filename [256];
-    int         rank, size, i;
-    int         NX = 10000; 
-    int         NY = 1;
-    double      t[NX];
+    int         rank, size, i, j, offset, size_y;
+    int         NX = 40; 
+    int         NY = 2;
+    double      t[NX*NY];
     MPI_Comm    comm = MPI_COMM_WORLD;
 
     int64_t     adios_handle;
@@ -34,25 +34,36 @@ int main (int argc, char ** argv)
     adios_init ("arrays.xml", comm);
     
     int test_scalar = rank * 1000;
+    offset = rank*NY;
+    size_y = size*NY;
     int ii;
-    for(ii = 0; ii<200; ii++){
-      for (i = 0; i < NX; i++)
-        t[i] = rank * NX + i*ii;
-    
-      adios_open (&adios_handle, "temperature", filename, "w", comm);
-    
-      adios_write (adios_handle, "NX", &NX);
-      adios_write (adios_handle, "NY", &NY);
-      adios_write (adios_handle, "test_scalar", &test_scalar);
-      adios_write (adios_handle, "size", &size);
-      adios_write (adios_handle, "rank", &rank);
-      adios_write (adios_handle, "var_2d_array", t);
+   
+    for(ii = 0; ii<20; ii++){       
+	for(j=0; j<NY*NX; j++){       
+	    t[j] = (offset * NX) + j + NY*NX*ii;	    
+	}
+
+        //prints the array.
+	adios_open (&adios_handle, "temperature", filename, "w", comm);
+	
+	adios_write (adios_handle, "scalar/dim/NX", &NX);
+	adios_write (adios_handle, "scalar/dim/NY", &NY);
+	adios_write (adios_handle, "test_scalar", &test_scalar);
+	adios_write (adios_handle, "size", &size);
+	adios_write (adios_handle, "rank", &rank);
+	adios_write (adios_handle, "offset", &offset);
+	adios_write (adios_handle, "size_y", &size_y);
+	adios_write (adios_handle, "var_2d_array", t);
     
-      adios_close (adios_handle);
-      fprintf(stderr, "Rank=%d commited write %d\n", rank, ii);
+	adios_close (adios_handle);
+	fprintf(stderr, "Rank=%d commited write %d\n", rank, ii);
+	printf("rank %d: [", rank);
+	//for(i=0; i<NX*NY;i++){
+	printf("%lf, ", t[0]);
+		//}
+	printf("]\n");
     }
     adios_finalize (rank);
-
-    //MPI_Finalize ();
+    MPI_Finalize ();
     return 0;
 }
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.am b/examples/C/flexpath_arrays/process_select/Makefile.am
index 8c2c3f9..dd227b9 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.am
+++ b/examples/C/flexpath_arrays/process_select/Makefile.am
@@ -1,8 +1,12 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.pbs $(builddir)
+
 noinst_PROGRAMS = arrays_write arrays_read
 
 arrays_write_SOURCES = arrays_write.c
diff --git a/examples/C/flexpath_arrays/process_select/Makefile.in b/examples/C/flexpath_arrays/process_select/Makefile.in
index eae4185..cd844a6 100644
--- a/examples/C/flexpath_arrays/process_select/Makefile.in
+++ b/examples/C/flexpath_arrays/process_select/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
 subdir = examples/C/flexpath_arrays/process_select
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
 arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -481,7 +510,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -580,19 +609,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.pbs $(builddir)
 
 # 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.
diff --git a/examples/C/global-array-time/CMakeLists.txt b/examples/C/global-array-time/CMakeLists.txt
index c738d1e..14bd686 100644
--- a/examples/C/global-array-time/CMakeLists.txt
+++ b/examples/C/global-array-time/CMakeLists.txt
@@ -16,4 +16,15 @@ target_link_libraries(adios_read_globaltime adiosread ${ADIOSREADLIB_LDADD})
 add_executable(adios_read_globaltime_streaming adios_read_globaltime_streaming.c)
 target_link_libraries(adios_read_globaltime_streaming adiosread ${ADIOSREADLIB_LDADD})
 
+set (PROGS adios_read_globaltime_streaming adios_read_globaltime adios_globaltime_no_xml adios_globaltime)
+foreach (PROG ${PROGS} )
+  if(MPI_COMPILE_FLAGS)
+    set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+  endif()
+  if(MPI_LINK_FLAGS)
+    set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+  target_link_libraries(${PROG} adios ${MPI_C_LIBRARIES})
+endforeach()
+
 #install(FILES adios_globaltime.xml gread_restart.ch gwrite_restart.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/global-array-time)
diff --git a/examples/C/global-array-time/Makefile.am b/examples/C/global-array-time/Makefile.am
index 834ee31..e0791db 100644
--- a/examples/C/global-array-time/Makefile.am
+++ b/examples/C/global-array-time/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = adios_globaltime adios_globaltime_no_xml adios_read_globaltime adios_read_globaltime_streaming
 
 adios_globaltime_SOURCES = adios_globaltime.c
diff --git a/examples/C/global-array-time/Makefile.in b/examples/C/global-array-time/Makefile.in
index df02ff7..f8b296f 100644
--- a/examples/C/global-array-time/Makefile.in
+++ b/examples/C/global-array-time/Makefile.in
@@ -41,7 +41,11 @@ noinst_PROGRAMS = adios_globaltime$(EXEEXT) \
 subdir = examples/C/global-array-time
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -51,14 +55,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -148,12 +156,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -216,6 +233,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -288,7 +308,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -343,8 +372,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 adios_globaltime_SOURCES = adios_globaltime.c
 adios_globaltime_LDADD = $(top_builddir)/src/libadios.a \
@@ -525,7 +554,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -624,19 +653,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/global-array-time/adios_globaltime.xml b/examples/C/global-array-time/adios_globaltime.xml
index 77a708f..8f1dd01 100644
--- a/examples/C/global-array-time/adios_globaltime.xml
+++ b/examples/C/global-array-time/adios_globaltime.xml
@@ -1,24 +1,27 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
-    <adios-group name="restart" coordination-communicator="comm" time-index="iter">
+  <adios-group name="restart">
     <var name="NX" type="integer"/>
     <var name="NY" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
+
     <global-bounds dimensions="size,NX" offsets="rank,0">
-       <var name="temperature" gwrite="t" type="double" dimensions="iter,1,NX"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
     </global-bounds>
+
     <global-bounds dimensions="size,NY" offsets="rank,0">
-       <var name="pressure" gwrite="p" type="double" dimensions="iter,1,NY"/>
+       <var name="pressure" gwrite="p" type="double" dimensions="1,NY"/>
     </global-bounds>
-    <attribute name="description" path="/temperature" 
+
+    <attribute name="temperature/description" 
         value="Global array written from 'size' processes over several timesteps" 
         type="string"/>
-</adios-group>
+  </adios-group>
 
-<method group="restart" method="MPI"/>
+  <method group="restart" method="MPI"/>
 
-<buffer size-MB="5" allocate-time="now"/>
+  <buffer size-MB="5" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/global-array-time/adios_globaltime_no_xml.c b/examples/C/global-array-time/adios_globaltime_no_xml.c
index adff271..a5e8633 100644
--- a/examples/C/global-array-time/adios_globaltime_no_xml.c
+++ b/examples/C/global-array-time/adios_globaltime_no_xml.c
@@ -48,7 +48,7 @@ int main (int argc, char ** argv)
         int64_t       m_adios_group;
         int64_t       m_adios_file;
 
-        adios_declare_group (&m_adios_group, "restart", "iter", adios_flag_yes);
+        adios_declare_group (&m_adios_group, "restart", "", adios_flag_yes);
         adios_select_method (m_adios_group, "MPI", "", "");
 
         adios_define_var (m_adios_group, "NX"
@@ -68,7 +68,7 @@ int main (int argc, char ** argv)
     
             adios_define_var (m_adios_group, "temperature"
                          ,"", adios_double
-                         ,"iter,NX", "G", "O");
+                         ,"NX", "G", "O");
         }
 
         for (it =0; it < 5; it++) {
diff --git a/examples/C/global-array/CMakeLists.txt b/examples/C/global-array/CMakeLists.txt
index e71fa88..99abc4f 100644
--- a/examples/C/global-array/CMakeLists.txt
+++ b/examples/C/global-array/CMakeLists.txt
@@ -35,4 +35,19 @@ target_link_libraries(no_xml_write_byid adios ${ADIOSLIB_LDADD})
 add_executable(read_no_xml_write_byid read_no_xml_write_byid.c)
 target_link_libraries(read_no_xml_write_byid adiosread ${ADIOSREADLIB_LDADD})
 
+set (PROGS adios_global adios_global_2files adios_read_global
+  adios_read_writeblock adios_read_chunk adios_read_gpp adios_global_no_xml
+  adios_read_global_no_xml no_xml_write_byid read_no_xml_write_byid)
+
+foreach (PROG ${PROGS} )
+  if(MPI_COMPILE_FLAGS)
+    set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+  endif()
+  if(MPI_LINK_FLAGS)
+    set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+  target_link_libraries(${PROG} adios ${MPI_C_LIBRARIES})
+endforeach()
+
 #install(FILES adios_global.xml gread_temperature.ch gwrite_temperature.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/global-array)
+
diff --git a/examples/C/global-array/Makefile.am b/examples/C/global-array/Makefile.am
index 1244fe7..38fdcaa 100644
--- a/examples/C/global-array/Makefile.am
+++ b/examples/C/global-array/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = adios_global adios_global_2files adios_read_gpp adios_read_global adios_read_writeblock adios_read_chunk adios_global_no_xml adios_read_global_no_xml no_xml_write_byid read_no_xml_write_byid
 
 adios_global_SOURCES = adios_global.c
diff --git a/examples/C/global-array/Makefile.in b/examples/C/global-array/Makefile.in
index 552be7d..5eab579 100644
--- a/examples/C/global-array/Makefile.in
+++ b/examples/C/global-array/Makefile.in
@@ -42,7 +42,11 @@ noinst_PROGRAMS = adios_global$(EXEEXT) adios_global_2files$(EXEEXT) \
 subdir = examples/C/global-array
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -52,14 +56,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -192,12 +200,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -260,6 +277,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -332,7 +352,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -387,8 +416,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 adios_global_SOURCES = adios_global.c
 adios_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -610,7 +639,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -709,19 +738,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/global-array/adios_global.xml b/examples/C/global-array/adios_global.xml
index dc2303a..cdc76e5 100644
--- a/examples/C/global-array/adios_global.xml
+++ b/examples/C/global-array/adios_global.xml
@@ -1,19 +1,22 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
-    <adios-group name="temperature" coordination-communicator="comm" stats="On">
+  <adios-group name="temperature" stats="On">
     <var name="NX" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
        <var name="temperature" gwrite="t" type="double" dimensions="1,NX"/>
     </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
+    <attribute name="temperature/description" 
+               value="Global array written from 'size' processes" 
+               type="string"/>
+  </adios-group>
 
-<method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
-<!--method group="temperature" method="PHDF5"/-->
-
-<buffer size-MB="2" allocate-time="now"/>
+  <method group="temperature" method="MPI"/>
+  <!--method group="temperature" method="MPI_AGGREGATE">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method-->
+  <!--method group="temperature" method="PHDF5"/-->
+ 
+  <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/manual/CMakeLists.txt b/examples/C/manual/CMakeLists.txt
index e2e3350..1604c70 100644
--- a/examples/C/manual/CMakeLists.txt
+++ b/examples/C/manual/CMakeLists.txt
@@ -3,17 +3,18 @@ include_directories(${PROJECT_SOURCE_DIR}/src)
 include_directories(${PROJECT_SOURCE_DIR}/examples/C/manual)
 link_directories(${PROJECT_BINARY_DIR}/examples/C/manual)
 
-add_executable(1_nonadios_example 1_nonadios_example.c)
-target_link_libraries(1_nonadios_example adios ${ADIOSLIB_LDADD})
+set (PROGS 1_nonadios_example 2_adios_write 3_adios_read 4_adios_nfiles)
 
-add_executable(2_adios_write 2_adios_write.c)
-target_link_libraries(2_adios_write adios ${ADIOSLIB_LDADD})
-
-add_executable(3_adios_read 3_adios_read.c)
-target_link_libraries(3_adios_read adios ${ADIOSLIB_LDADD})
-
-add_executable(4_adios_nfiles 4_adios_nfiles.c)
-target_link_libraries(4_adios_nfiles adios ${ADIOSLIB_LDADD})
+foreach (PROG ${PROGS} )
+  add_executable(${PROG} ${PROG}.c)
+  if(MPI_COMPILE_FLAGS)
+    set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+  endif()
+  if(MPI_LINK_FLAGS)
+    set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+  target_link_libraries(${PROG} adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+endforeach()
 
 #install(FILES config.xml gread_temperature.ch gwrite_temperature.ch DESTINATION ${PROJECT_BINARY_DIR}/examples/C/manual)
 
diff --git a/examples/C/manual/Makefile.am b/examples/C/manual/Makefile.am
index a59c0a3..ebb8ddc 100644
--- a/examples/C/manual/Makefile.am
+++ b/examples/C/manual/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = 1_nonadios_example 2_adios_write 3_adios_read 4_adios_nfiles
 
 1_nonadios_example_SOURCES = 1_nonadios_example.c
diff --git a/examples/C/manual/Makefile.in b/examples/C/manual/Makefile.in
index 088c3b4..f48f6cf 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/manual/Makefile.in
@@ -39,7 +39,11 @@ noinst_PROGRAMS = 1_nonadios_example$(EXEEXT) 2_adios_write$(EXEEXT) \
 subdir = examples/C/manual
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -137,12 +145,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -205,6 +222,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -277,7 +297,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -332,8 +361,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 1_nonadios_example_SOURCES = 1_nonadios_example.c
 1_nonadios_example_LDADD = $(top_builddir)/src/libadios.a \
@@ -512,7 +541,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -611,19 +640,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/manual/config.xml b/examples/C/manual/config.xml
index a2b77c6..8b43093 100644
--- a/examples/C/manual/config.xml
+++ b/examples/C/manual/config.xml
@@ -1,21 +1,21 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
-    <adios-group name="temperature" coordination-communicator="comm">
+    <adios-group name="temperature">
         <var name="NX" type="integer"/>
-        <var name="temperature" gwrite="t" gread="t" path="/" type="double" dimensions="NX"/>
-        <attribute name="description" path="/temperature" 
+        <var name="/temperature" gwrite="t" gread="t" type="double" dimensions="NX"/>
+        <attribute name="/temperature/description" 
                    value="Temperature array" 
                    type="string"/>
-</adios-group>
+    </adios-group>
 
-<!-- Use the POSIX method for 2_adios_write and 3_adios_read examples first. 
-     Then change the method for MPI only and rerun those examples.
-     Use only the MPI method for the 4_adios_nfiles example.
-  -->
-<method group="temperature" method="MPI"/>
-<!--method group="temperature" method="MPI"/-->
+    <!-- Use the POSIX method for 2_adios_write and 3_adios_read examples first. 
+         Then change the method for MPI only and rerun those examples.
+         Use only the MPI method for the 4_adios_nfiles example.
+    -->
+    <method group="temperature" method="MPI"/>
+    <!--method group="temperature" method="MPI"/-->
 
-<buffer size-MB="1" allocate-time="now"/>
+    <buffer size-MB="1" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/manual/gread_temperature.ch b/examples/C/manual/gread_temperature.ch
index 5ecc4ad..2c16307 100644
--- a/examples/C/manual/gread_temperature.ch
+++ b/examples/C/manual/gread_temperature.ch
@@ -4,4 +4,4 @@ adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
 adios_buf_size = 4;
 adios_read (adios_handle, "NX", &NX, adios_buf_size);
 adios_buf_size = 8 * (NX);
-adios_read (adios_handle, "temperature", t, adios_buf_size);
+adios_read (adios_handle, "/temperature", t, adios_buf_size);
diff --git a/examples/C/manual/gwrite_temperature.ch b/examples/C/manual/gwrite_temperature.ch
index d47b677..bac6938 100644
--- a/examples/C/manual/gwrite_temperature.ch
+++ b/examples/C/manual/gwrite_temperature.ch
@@ -2,4 +2,4 @@ adios_groupsize = 4 \
                 + 8 * (NX);
 adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
 adios_write (adios_handle, "NX", &NX);
-adios_write (adios_handle, "temperature", t);
+adios_write (adios_handle, "/temperature", t);
diff --git a/examples/C/read_all/Makefile.am b/examples/C/read_all/Makefile.am
index ed010fc..0f8481d 100644
--- a/examples/C/read_all/Makefile.am
+++ b/examples/C/read_all/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/examples/C/read_all/Makefile.in b/examples/C/read_all/Makefile.in
index 8579d05..af0bfb3 100644
--- a/examples/C/read_all/Makefile.in
+++ b/examples/C/read_all/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = read_all$(EXEEXT) read_all_v1$(EXEEXT)
 subdir = examples/C/read_all
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 read_all_SOURCES = read_all.c
 read_all_CPPFLAGS = ${MACRODEFFLAG}_NOMPI 
diff --git a/examples/C/read_all/read_all.c b/examples/C/read_all/read_all.c
index b38c26e..3410c57 100644
--- a/examples/C/read_all/read_all.c
+++ b/examples/C/read_all/read_all.c
@@ -108,7 +108,8 @@ int main (int argc, char ** argv)
                             for (k = 0; k < v->dims[1]; k++) {
                                 printf ("        row %d: [", k);
                                 for (l = 0; l < v->dims[2]; l++) {
-                                    printf("%s ", value_to_string(v->type, data, j*v->dims[1]*v->dims[2] + k*v->dims[1] + l));
+                                    // NCSU ALACRITY-ADIOS - Fixed bug, k*v->dims[1] changed to  k*v->dims[2]
+                                    printf("%s ", value_to_string(v->type, data, j*v->dims[1]*v->dims[2] + k*v->dims[2] + l));
                                 }
                                 printf ("]\n");
                             }
diff --git a/examples/C/scalars/CMakeLists.txt b/examples/C/scalars/CMakeLists.txt
index d9d4255..0f2dcc2 100644
--- a/examples/C/scalars/CMakeLists.txt
+++ b/examples/C/scalars/CMakeLists.txt
@@ -4,12 +4,30 @@ include_directories(${PROJECT_SOURCE_DIR}/examples/C/scalars)
 link_directories(${PROJECT_BINARY_DIR}/examples/C/scalars)
 
 add_executable(scalars_write scalars_write.c)
-target_link_libraries(scalars_write adios ${ADIOSLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(scalars_write PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(scalars_write PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(scalars_write adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
 
 add_executable(scalars_read scalars_read.c)
-target_link_libraries(scalars_read adiosread ${ADIOSREADLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(scalars_read PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(scalars_read PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(scalars_read adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 
 add_executable(scalars_write_step scalars_write.c)
-target_link_libraries(scalars_write_step adios ${ADIOSLIB_LDADD})
+if(MPI_COMPILE_FLAGS)
+  set_target_properties(scalars_write_step PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+endif()
+if(MPI_LINK_FLAGS)
+  set_target_properties(scalars_write_step PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
+target_link_libraries(scalars_write_step adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
 
 #install(FILES scalars.xml gwrite_scalars.ch gread_scalars.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/scalars)
diff --git a/examples/C/scalars/Makefile.am b/examples/C/scalars/Makefile.am
index 90a6124..f1cd87c 100644
--- a/examples/C/scalars/Makefile.am
+++ b/examples/C/scalars/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	
 noinst_PROGRAMS = scalars_write scalars_read scalars_write_step
 
 scalars_write_SOURCES = scalars_write.c
diff --git a/examples/C/scalars/Makefile.in b/examples/C/scalars/Makefile.in
index b08ba8c..1ca8cb0 100644
--- a/examples/C/scalars/Makefile.in
+++ b/examples/C/scalars/Makefile.in
@@ -39,7 +39,11 @@ noinst_PROGRAMS = scalars_write$(EXEEXT) scalars_read$(EXEEXT) \
 subdir = examples/C/scalars
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -130,12 +138,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -198,6 +215,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -270,7 +290,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -325,8 +354,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 scalars_write_SOURCES = scalars_write.c
 scalars_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -499,7 +528,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -598,19 +627,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/scalars/gread_scalars.ch b/examples/C/scalars/gread_scalars.ch
index b78e239..dc24710 100644
--- a/examples/C/scalars/gread_scalars.ch
+++ b/examples/C/scalars/gread_scalars.ch
@@ -1,29 +1,3 @@
-adios_groupsize = 0;
-adios_totalsize = 0;
-adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-adios_buf_size = 1;
-adios_read (adios_handle, "var_byte", &v1, adios_buf_size);
-adios_buf_size = 2;
-adios_read (adios_handle, "var_short", &v2, adios_buf_size);
-adios_buf_size = 4;
-adios_read (adios_handle, "var_int", &v3, adios_buf_size);
-adios_buf_size = 8;
-adios_read (adios_handle, "var_long", &v4, adios_buf_size);
-adios_buf_size = 1;
-adios_read (adios_handle, "var_ubyte", &v5, adios_buf_size);
-adios_buf_size = 2;
-adios_read (adios_handle, "var_ushort", &v6, adios_buf_size);
-adios_buf_size = 4;
-adios_read (adios_handle, "var_uint", &v7, adios_buf_size);
-adios_buf_size = 8;
-adios_read (adios_handle, "var_ulong", &v8, adios_buf_size);
-adios_buf_size = 4;
-adios_read (adios_handle, "var_real", &v9, adios_buf_size);
-adios_buf_size = 8;
-adios_read (adios_handle, "var_double", &v10, adios_buf_size);
-adios_buf_size = 2147483648;
-adios_read (adios_handle, "var_string", v11, adios_buf_size);
-adios_buf_size = 8;
-adios_read (adios_handle, "var_complex", &v12, adios_buf_size);
-adios_buf_size = 16;
-adios_read (adios_handle, "var_double_complex", &v13, adios_buf_size);
+s = adios_selection_writeblock (rank);
+adios_perform_reads (fp, 1);
+adios_selection_delete (s);
diff --git a/examples/C/scalars/scalars.xml b/examples/C/scalars/scalars.xml
index d39dd23..96440be 100644
--- a/examples/C/scalars/scalars.xml
+++ b/examples/C/scalars/scalars.xml
@@ -1,30 +1,29 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
 
-    <adios-group name="scalars" coordination-communicator="comm">
+    <adios-group name="scalars">
         <!-- name    defines the variable name in the output file
              gwrite  defines the variable name in the code to write out
-             gread   defines the variable name in the code to read the value into
-             gwrite and gread are optional
+             gwrite is optional
         -->
-        <var name="var_byte"            gwrite="v1"  gread="v1"  type="byte"/>
-        <var name="var_short"           gwrite="v2"  gread="v2"  type="short"/>
-        <var name="var_int"             gwrite="v3"  gread="v3"  type="integer"/>
-        <var name="var_long"            gwrite="v4"  gread="v4"  type="long"/>
-        <var name="var_ubyte"           gwrite="v5"  gread="v5"  type="unsigned byte"/>
-        <var name="var_ushort"          gwrite="v6"  gread="v6"  type="unsigned short"/>
-        <var name="var_uint"            gwrite="v7"  gread="v7"  type="unsigned integer"/>
-        <var name="var_ulong"           gwrite="v8"  gread="v8"  type="unsigned long"/>
-        <var name="var_real"            gwrite="v9"  gread="v9"  type="real"/>
-        <var name="var_double"          gwrite="v10" gread="v10" type="double"/>
-        <var name="var_string"          gwrite="v11" gread="v11" type="string"/>
-        <var name="var_complex"         gwrite="v12" gread="v12" type="complex"/>
-        <var name="var_double_complex"  gwrite="v13" gread="v13" type="double complex"/>
+        <var name="var_byte"            gwrite="v1"   type="byte"/>
+        <var name="var_short"           gwrite="v2"   type="short"/>
+        <var name="var_int"             gwrite="v3"   type="integer"/>
+        <var name="var_long"            gwrite="v4"   type="long"/>
+        <var name="var_ubyte"           gwrite="v5"   type="unsigned byte"/>
+        <var name="var_ushort"          gwrite="v6"   type="unsigned short"/>
+        <var name="var_uint"            gwrite="v7"   type="unsigned integer"/>
+        <var name="var_ulong"           gwrite="v8"   type="unsigned long"/>
+        <var name="var_real"            gwrite="v9"   type="real"/>
+        <var name="var_double"          gwrite="v10"  type="double"/>
+        <var name="var_string"          gwrite="v11"  type="string"/>
+        <var name="var_complex"         gwrite="v12"  type="complex"/>
+        <var name="var_double_complex"  gwrite="v13"  type="double complex"/>
     </adios-group>
 
-<method group="scalars" method="MPI"/>
+    <method group="scalars" method="MPI"/>
 
-<buffer size-MB="20" allocate-time="now"/>
+    <buffer size-MB="20" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/C/schema/CMakeLists.txt b/examples/C/schema/CMakeLists.txt
index fa6beb6..496d1c4 100644
--- a/examples/C/schema/CMakeLists.txt
+++ b/examples/C/schema/CMakeLists.txt
@@ -3,16 +3,36 @@ include_directories(${PROJECT_SOURCE_DIR}/src)
 include_directories(${PROJECT_SOURCE_DIR}/examples/C/schema)
 link_directories(${PROJECT_BINARY_DIR}/examples/C/schema)
 
-add_executable(uniform uniform.c)
-target_link_libraries(uniform adios ${ADIOSLIB_LDADD})
+add_executable(uniform2d uniform2d.c)
+target_link_libraries(uniform2d adios ${ADIOSLIB_LDADD})
 
-add_executable(rectilinear rectilinear.c)
-target_link_libraries(rectilinear adios ${ADIOSLIB_LDADD})
+add_executable(rectilinear2d rectilinear2d.c)
+target_link_libraries(rectilinear2d adios ${ADIOSLIB_LDADD})
 
-add_executable(structured structured.c)
-target_link_libraries(structured adios ${ADIOSLIB_LDADD})
+add_executable(structured2d structured2d.c)
+target_link_libraries(structured2d adios ${ADIOSLIB_LDADD})
 
-add_executable(unstructured unstructured.c)
-target_link_libraries(unstructured adios ${ADIOSLIB_LDADD})
+add_executable(tri2d tri2d.c)
+target_link_libraries(tri2d adios ${ADIOSLIB_LDADD})
 
-#install(FILES structured.xml rectilinear.xml unstructured.xml uniform.xml DESTINATION ${PROJECT_BINARY_DIR}/examples/C/schema)
+add_executable(triangle2d triangle2d.c)
+target_link_libraries(triangle2d adios ${ADIOSLIB_LDADD})
+
+
+set (PROGS uniform2d rectilinear2d structured2d tri2d triangle2d)
+foreach (PROG ${PROGS} )
+  if(MPI_COMPILE_FLAGS)
+    set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+  endif()
+  if(MPI_LINK_FLAGS)
+    set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+  target_link_libraries(${PROG} adios ${MPI_C_LIBRARIES})
+endforeach()
+
+file(COPY triangle2d.readme triangle2d.xml triangle2d.n4.png 
+        uniform2d.readme uniform2d.xml uniform2d.png
+        rectilinear2d.readme rectilinear2d.xml rectilinear2d.png
+        structured2d.readme structured2d.xml
+        tri2d.readme tri2d.xml tri2d.n.png
+        DESTINATION ${PROJECT_BINARY_DIR}/examples/C/schema)
diff --git a/examples/C/schema/Makefile.am b/examples/C/schema/Makefile.am
index aac8e3c..ad4fb5d 100644
--- a/examples/C/schema/Makefile.am
+++ b/examples/C/schema/Makefile.am
@@ -1,31 +1,42 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
-noinst_PROGRAMS = uniform rectilinear structured unstructured
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
-uniform_SOURCES = uniform.c
-uniform_LDADD = $(top_builddir)/src/libadios.a 
-uniform_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-uniform_LDADD += $(ADIOSLIB_LDADD)
+noinst_PROGRAMS = uniform2d rectilinear2d structured2d tri2d triangle2d
 
-rectilinear_SOURCES = rectilinear.c
-rectilinear_LDADD = $(top_builddir)/src/libadios.a 
-rectilinear_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-rectilinear_LDADD += $(ADIOSLIB_LDADD)
+uniform2d_LDADD = $(top_builddir)/src/libadios.a
+uniform2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+uniform2d_LDADD += $(ADIOSLIB_LDADD)
 
-structured_SOURCES = structured.c
-structured_LDADD = $(top_builddir)/src/libadios.a 
-structured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-structured_LDADD += $(ADIOSLIB_LDADD)
+rectilinear2d_SOURCES =  rectilinear2d.c
+rectilinear2d_LDADD = $(top_builddir)/src/libadios.a
+rectilinear2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_LDADD += $(ADIOSLIB_LDADD)
 
-unstructured_SOURCES = unstructured.c
-unstructured_LDADD = $(top_builddir)/src/libadios.a 
-unstructured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-unstructured_LDADD += $(ADIOSLIB_LDADD)
+structured2d_SOURCES =  structured2d.c
+structured2d_LDADD = $(top_builddir)/src/libadios.a
+structured2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_LDADD += $(ADIOSLIB_LDADD)
+
+tri2d_SOURCES = tri2d.c
+tri2d_LDADD = $(top_builddir)/src/libadios.a
+tri2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_LDADD += $(ADIOSLIB_LDADD)
+
+triangle2d_SOURCES = triangle2d.c
+triangle2d_LDADD = $(top_builddir)/src/libadios.a 
+triangle2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+triangle2d_LDADD += $(ADIOSLIB_LDADD)
 
 CLEANFILES = *.bp
 CC=$(MPICC)
-EXTRA_DIST = uniform.xml structured.xml rectilinear.xml unstructured.xml 
+EXTRA_DIST = uniform2d.xml uniform2d.readme uniform2d.png \
+	rectilinear2d.xml rectilinear2d.readme rectilinear2d.png \
+	structured2d.xml structured2d.readme \
+	tri2d.xml tri2d.readme tri2d.n.png \
+	triangle2d.xml triangle2d.readme triangle2d.n4.png
 
diff --git a/examples/C/schema/Makefile.in b/examples/C/schema/Makefile.in
index 62a72f5..7e4ee13 100644
--- a/examples/C/schema/Makefile.in
+++ b/examples/C/schema/Makefile.in
@@ -34,12 +34,16 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = uniform$(EXEEXT) rectilinear$(EXEEXT) \
-	structured$(EXEEXT) unstructured$(EXEEXT)
+noinst_PROGRAMS = uniform2d$(EXEEXT) rectilinear2d$(EXEEXT) \
+	structured2d$(EXEEXT) tri2d$(EXEEXT) triangle2d$(EXEEXT)
 subdir = examples/C/schema
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,35 +75,42 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_rectilinear_OBJECTS = rectilinear.$(OBJEXT)
-rectilinear_OBJECTS = $(am_rectilinear_OBJECTS)
+am_rectilinear2d_OBJECTS = rectilinear2d.$(OBJEXT)
+rectilinear2d_OBJECTS = $(am_rectilinear2d_OBJECTS)
 am__DEPENDENCIES_1 =
-rectilinear_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+rectilinear2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-rectilinear_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+rectilinear2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(rectilinear_LDFLAGS) $(LDFLAGS) -o $@
-am_structured_OBJECTS = structured.$(OBJEXT)
-structured_OBJECTS = $(am_structured_OBJECTS)
-structured_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(rectilinear2d_LDFLAGS) $(LDFLAGS) -o $@
+am_structured2d_OBJECTS = structured2d.$(OBJEXT)
+structured2d_OBJECTS = $(am_structured2d_OBJECTS)
+structured2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-structured_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+structured2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(structured_LDFLAGS) $(LDFLAGS) -o $@
-am_uniform_OBJECTS = uniform.$(OBJEXT)
-uniform_OBJECTS = $(am_uniform_OBJECTS)
-uniform_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(structured2d_LDFLAGS) $(LDFLAGS) -o $@
+am_tri2d_OBJECTS = tri2d.$(OBJEXT)
+tri2d_OBJECTS = $(am_tri2d_OBJECTS)
+tri2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-uniform_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(uniform_LDFLAGS) \
+tri2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(tri2d_LDFLAGS) \
 	$(LDFLAGS) -o $@
-am_unstructured_OBJECTS = unstructured.$(OBJEXT)
-unstructured_OBJECTS = $(am_unstructured_OBJECTS)
-unstructured_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+am_triangle2d_OBJECTS = triangle2d.$(OBJEXT)
+triangle2d_OBJECTS = $(am_triangle2d_OBJECTS)
+triangle2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-unstructured_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+triangle2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(unstructured_LDFLAGS) $(LDFLAGS) -o $@
+	$(triangle2d_LDFLAGS) $(LDFLAGS) -o $@
+uniform2d_SOURCES = uniform2d.c
+uniform2d_OBJECTS = uniform2d.$(OBJEXT)
+uniform2d_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+uniform2d_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(uniform2d_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -108,10 +123,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(rectilinear_SOURCES) $(structured_SOURCES) \
-	$(uniform_SOURCES) $(unstructured_SOURCES)
-DIST_SOURCES = $(rectilinear_SOURCES) $(structured_SOURCES) \
-	$(uniform_SOURCES) $(unstructured_SOURCES)
+SOURCES = $(rectilinear2d_SOURCES) $(structured2d_SOURCES) \
+	$(tri2d_SOURCES) $(triangle2d_SOURCES) uniform2d.c
+DIST_SOURCES = $(rectilinear2d_SOURCES) $(structured2d_SOURCES) \
+	$(tri2d_SOURCES) $(triangle2d_SOURCES) uniform2d.c
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -137,12 +152,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -205,6 +229,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -277,7 +304,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -332,23 +368,30 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
-uniform_SOURCES = uniform.c
-uniform_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-uniform_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-rectilinear_SOURCES = rectilinear.c
-rectilinear_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-rectilinear_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-structured_SOURCES = structured.c
-structured_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-structured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-unstructured_SOURCES = unstructured.c
-unstructured_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-unstructured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+uniform2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+uniform2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+rectilinear2d_SOURCES = rectilinear2d.c
+rectilinear2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+rectilinear2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+structured2d_SOURCES = structured2d.c
+structured2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+structured2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+tri2d_SOURCES = tri2d.c
+tri2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+tri2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+triangle2d_SOURCES = triangle2d.c
+triangle2d_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+triangle2d_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = uniform.xml structured.xml rectilinear.xml unstructured.xml 
+EXTRA_DIST = uniform2d.xml uniform2d.readme uniform2d.png \
+	rectilinear2d.xml rectilinear2d.readme rectilinear2d.png \
+	structured2d.xml structured2d.readme \
+	tri2d.xml tri2d.readme tri2d.n.png \
+	triangle2d.xml triangle2d.readme triangle2d.n4.png
+
 all: all-am
 
 .SUFFIXES:
@@ -392,18 +435,21 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-rectilinear$(EXEEXT): $(rectilinear_OBJECTS) $(rectilinear_DEPENDENCIES) 
-	@rm -f rectilinear$(EXEEXT)
-	$(rectilinear_LINK) $(rectilinear_OBJECTS) $(rectilinear_LDADD) $(LIBS)
-structured$(EXEEXT): $(structured_OBJECTS) $(structured_DEPENDENCIES) 
-	@rm -f structured$(EXEEXT)
-	$(structured_LINK) $(structured_OBJECTS) $(structured_LDADD) $(LIBS)
-uniform$(EXEEXT): $(uniform_OBJECTS) $(uniform_DEPENDENCIES) 
-	@rm -f uniform$(EXEEXT)
-	$(uniform_LINK) $(uniform_OBJECTS) $(uniform_LDADD) $(LIBS)
-unstructured$(EXEEXT): $(unstructured_OBJECTS) $(unstructured_DEPENDENCIES) 
-	@rm -f unstructured$(EXEEXT)
-	$(unstructured_LINK) $(unstructured_OBJECTS) $(unstructured_LDADD) $(LIBS)
+rectilinear2d$(EXEEXT): $(rectilinear2d_OBJECTS) $(rectilinear2d_DEPENDENCIES) 
+	@rm -f rectilinear2d$(EXEEXT)
+	$(rectilinear2d_LINK) $(rectilinear2d_OBJECTS) $(rectilinear2d_LDADD) $(LIBS)
+structured2d$(EXEEXT): $(structured2d_OBJECTS) $(structured2d_DEPENDENCIES) 
+	@rm -f structured2d$(EXEEXT)
+	$(structured2d_LINK) $(structured2d_OBJECTS) $(structured2d_LDADD) $(LIBS)
+tri2d$(EXEEXT): $(tri2d_OBJECTS) $(tri2d_DEPENDENCIES) 
+	@rm -f tri2d$(EXEEXT)
+	$(tri2d_LINK) $(tri2d_OBJECTS) $(tri2d_LDADD) $(LIBS)
+triangle2d$(EXEEXT): $(triangle2d_OBJECTS) $(triangle2d_DEPENDENCIES) 
+	@rm -f triangle2d$(EXEEXT)
+	$(triangle2d_LINK) $(triangle2d_OBJECTS) $(triangle2d_LDADD) $(LIBS)
+uniform2d$(EXEEXT): $(uniform2d_OBJECTS) $(uniform2d_DEPENDENCIES) 
+	@rm -f uniform2d$(EXEEXT)
+	$(uniform2d_LINK) $(uniform2d_OBJECTS) $(uniform2d_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -510,7 +556,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -609,19 +655,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/C/schema/rectilinear.c b/examples/C/schema/rectilinear.c
deleted file mode 100644
index befcf87..0000000
--- a/examples/C/schema/rectilinear.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-/* ADIOS C Example: write a variable along with a rectilinear mesh. 
- * Note that the mesh dimensions depend on the rank. 
-*/
-#include <stdio.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-int main (int argc, char * argv[] ) 
-{
-    char        filename []="rectilinear.bp";
-    int         rank, size, i;
-    int         NX = 10;  
-    double      t[NX], mean = 0;
-    MPI_Comm    comm = MPI_COMM_WORLD;
-    char * str = "Jul, 2012";
-
-    int         adios_err;
-    uint64_t    adios_groupsize, adios_totalsize;
-    int64_t     adios_handle;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-    MPI_Comm_size (comm, &size);
-
-    int xydim = size+NX;
-    float       X[size];
-    float       Y[NX];
-
-    X[0] = 0;
-    for (i = 1; i< size; i++)
-    {
-        X[i] = i + X[i-1];
-    }
-
-    Y[0] = 0;
-    for (i = 1; i< NX; i++)
-    {
-        Y[i] = i + Y[i-1];
-    }
-
-    for (i = 0; i < NX; i++)
-    {
-        t[i] = rank * NX + i;
-        mean += t[i];
-    }
-
-    mean /= NX;
-
-    adios_init ("rectilinear.xml", comm);
-
-    adios_open (&adios_handle, "schema", filename, "w", comm);
-
-    adios_groupsize = 4 \
-                      + 4 \
-                + 4 \
-                + 4 \
-                + 8 \
-                + strlen(str) \
-                + 4 * (1) * (size) \
-                + 4 * (1) * (NX) \
-                + 8 * (1) * (NX);
-    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    adios_write (adios_handle, "NX", &NX);
-    adios_write (adios_handle, "size", &size);
-    adios_write (adios_handle, "rank", &rank);
-    adios_write (adios_handle, "mean", &mean);
-    adios_write (adios_handle, "xydim", &xydim);
-    adios_write (adios_handle, "X", X);
-    adios_write (adios_handle, "Y", Y);
-    adios_write (adios_handle, "date", str);
-    adios_write (adios_handle, "temperature", t);
-
-    adios_close (adios_handle);
-
-    MPI_Barrier (comm);
-
-    adios_finalize (rank);
-
-    MPI_Finalize ();
-
-    return 0;
-}
diff --git a/examples/C/schema/rectilinear.xml b/examples/C/schema/rectilinear.xml
deleted file mode 100644
index 80ad619..0000000
--- a/examples/C/schema/rectilinear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<adios-config host-language="C">
-    <adios-group name="schema" coordination-communicator="comm">
-    <var name="NX"   type="integer"/>
-    <var name="size" type="integer"/>
-    <var name="rank" type="integer"/>
-    <var name="xydim" type="integer"/>
-    <var name="mean" type="double"/>
-    <var name="date" type="string" gwrite="str"/>
-    <var name="X" dimensions="size" type="float"/>
-    <var name="Y" dimensions="NX" type="float"/>
-    <!--<var name="XY" dimensions="xydim" type="float"/>-->
-    <global-bounds  dimensions="size,NX" offsets="rank,0">
-        <var name="temperature" mesh="mesh1" gwrite="t" gread="t" type="double" dimensions="1,NX"/>
-    </global-bounds>
-
-    <!-- Rectilinear meshes to visualize temperature 2D array of size size*NX -->
-
-    <!-- Mesh1: 
-         - dimensions
-         - coordinates from multiple variables
-    -->
-    <mesh name="mesh1" type="rectilinear" time-varying="no">
-        <dimensions value="size,NX"/>
-        <coordinates-multi-var value="X,Y" />
-    </mesh>
-</adios-group>
-
-<method group="schema" method="MPI"/>
-<buffer size-MB="5" allocate-time="now"/>
-</adios-config>
diff --git a/examples/C/schema/rectilinear2d.c b/examples/C/schema/rectilinear2d.c
new file mode 100644
index 0000000..e25e204
--- /dev/null
+++ b/examples/C/schema/rectilinear2d.c
@@ -0,0 +1,158 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write variables along with an unstructured mesh. 
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios.h"
+
+//will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+char   npx_str[256];       // # of procs in x dim (string value)
+char   npy_str[256];       // # of procs in y dim (string value)
+int    npx;                // # of procs in x direction
+int    npy;                // # of procs in y direction
+int    nproc;               // # of total procs
+
+void printUsage(char *prgname)
+{
+    printf("Usage: mpirun -np <N> %s <nx> <ny>\n"
+           "    <nx> <ny>  2D decomposition values in each dimension of an 2D array\n"
+           "         The product of these number must be equal the number of processes\n"
+           "         e.g. for N=12 you may use  4 3\n"
+        ,prgname);
+}
+
+int processArgs(int argc, char ** argv)
+{
+    int i, j, nd, prod;
+    char *end;
+    if (argc < 3) {
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    strncpy(npx_str, argv[1], sizeof(npx_str));
+    strncpy(npy_str, argv[2], sizeof(npy_str));  
+
+    npx = atoi(npx_str);
+    npy = atoi(npy_str);
+
+    if (npx*npy != nproc) {
+        printf ("ERROR: Product of decomposition numbers in X and Y dimension %d != number of processes %d\n", npx*npy, nproc);
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    return 0;
+}
+
+
+
+int main (int argc, char ** argv ) 
+{
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    int         rank;
+    int         ndx, ndy;             // size of array per processor
+    double      *data;
+
+    double      *X;                   //X coordinate
+    double      *Y;                   //Y coordinate
+
+    // Offsets and sizes
+    int         offs_x, offs_y;       //offset in x and y direction
+    int         nx_local, ny_local;   //local address
+    int         nx_global, ny_global; //global address
+    int         posx, posy;           // position index in the array
+    int         i,j;
+  
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &nproc);
+
+    if (processArgs(argc, argv)) {
+        return 1;
+    }
+    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+    ndx = 65;
+    ndy = 129;
+
+    //2D array with block,block decomposition
+    posx = rank%npx;           // 1st dim
+    posy = rank/npx;           // 2nd dim
+    offs_x = posx * ndx;
+    offs_y = posy * ndy;
+    nx_local = ndx;
+    ny_local = ndy;
+    nx_global = npx * ndx;
+    ny_global = npy * ndy;
+
+    data = malloc (ndx * ndy * sizeof(double));
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+            data[i*ndy + j] = 1.0*rank;
+
+    X = malloc (ndx * sizeof(double)); 
+    for( i = 0; i < ndx; i++ )
+        //X[i] = 0.1*i*i+ndx*posx; 
+        X[i] = 0.1*(i+offs_x)*(i+offs_x); 
+
+    Y = malloc (ndy * sizeof(double));
+    for( i = 0; i < ndy; i++ )
+        //Y[i] = 0.1*i*i+ndx*posy;
+        Y[i] = 0.1*(i+offs_y)*(i+offs_y);
+
+
+    adios_init ("rectilinear2d.xml", comm);
+    adios_open (&adios_handle, "rectilinear2d", "rectilinear2d.bp", "w", comm);
+
+    adios_groupsize = 7*sizeof(int) \
+	+ sizeof(double) * (nx_local*ny_local) \
+    + sizeof(double) * (nx_local) \
+    + sizeof(double) * (ny_local);
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "nproc", &nproc);
+    adios_write (adios_handle, "nx_global", &nx_global);
+    adios_write (adios_handle, "ny_global", &ny_global);
+    adios_write (adios_handle, "offs_x", &offs_x);
+    adios_write (adios_handle, "offs_y", &offs_y);
+    adios_write (adios_handle, "nx_local", &nx_local);
+    adios_write (adios_handle, "ny_local", &ny_local);
+    if( rank < npx ) {
+        adios_write (adios_handle, "X", X);
+    }   
+    //printf ("rank %d: check if to print Y, rank%%npx=%d  offs_y=%d\n", rank, rank%npx, offs_y);
+    if( rank % npx == 0 )
+    {
+        adios_write (adios_handle, "Y", Y);
+    }
+    adios_write (adios_handle, "data", data);
+
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+
+    free (data);
+    free (X);
+    free (Y);
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/schema/rectilinear2d.png b/examples/C/schema/rectilinear2d.png
new file mode 100644
index 0000000..ee8f86e
Binary files /dev/null and b/examples/C/schema/rectilinear2d.png differ
diff --git a/examples/C/schema/rectilinear2d.readme b/examples/C/schema/rectilinear2d.readme
new file mode 100644
index 0000000..eeef7b5
--- /dev/null
+++ b/examples/C/schema/rectilinear2d.readme
@@ -0,0 +1,42 @@
+REQUIREMENTS:
+    - ADIOS 1.5.0: http://www.olcf.ornl.gov/center-projects/adios
+    - C compiler
+    - MPI
+
+BUILD:
+    - Install ADIOS
+    - In Makefile, set ADIOS_DIR to the installation directory
+    - also set the MPI/C compiler name (e.g. mpicc or cc)
+    - run make
+
+This example is for writing a uniform 2D mesh and data on it. 
+2D mesh is decomposed in x and y direction by npx and npy, which are passed in from the command line following the executable.
+npx = number of processes in x direction
+npy = number of processes in y direction
+X = coordinates of data in x direction
+Y = coordinates of data in y direction
+
+Processes write ndx*ndy points per process
+data is data on the points (value = rank)
+
+1. Run the writer 
+=================
+$ mpirun -np 12 ./rectilinear2d 4 3
+
+2. Check the output
+===================
+  integer  /nproc      scalar = 12 
+  integer  /nx_global  scalar = 260 
+  integer  /ny_global  scalar = 387 
+  integer  /offs_x     scalar = 0 
+  integer  /offs_y     scalar = 0 
+  integer  /nx_local   scalar = 65 
+  integer  /ny_local   scalar = 129 
+  double   /X          {260} = 0 / 6708.1 / 2240.35 / 2008.16 
+  double   /Y          {387} = 0 / 14899.6 / 4972.97 / 4454.41 
+  double   /data       {260, 387} = 0 / 11 / 5.5 / 3.45205  
+
+$ bpls -l rectilinear2d.bp
+
+rectilinear2d.png is a plot of how the data over the nx_global*ny_global points should look like if visualized.
+/ccs/proj/e2e/plotter/sith/plotter2d  -f rectilinear2d.bp -v data -xvar /X -yvar /Y --rectilinear -o ru -colormap Hotdesaturated
diff --git a/examples/C/schema/rectilinear2d.xml b/examples/C/schema/rectilinear2d.xml
new file mode 100644
index 0000000..b7eb9e1
--- /dev/null
+++ b/examples/C/schema/rectilinear2d.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<adios-config host-language="C" schema-version="1.1">
+  <adios-group name="rectilinear2d" >
+    <var name="nx_global"  path="" type="integer"/>
+    <var name="ny_global"  path="" type="integer"/>
+    <var name="nproc" path="" type="integer"/>
+    <var name="offs_x" path="" type="integer"/>
+    <var name="offs_y" path="" type="integer"/>
+    <var name="nx_local"  path="" type="integer"/>
+    <var name="ny_local"  path="" type="integer"/>
+
+    <global-bounds dimensions="nx_global" offsets="offs_x">
+        <var name="X" type="double" dimensions="nx_local"/>
+    </global-bounds>
+
+    <global-bounds dimensions="ny_global" offsets="offs_y">
+        <var name="Y" type="double" dimensions="ny_local"/>
+    </global-bounds>
+
+    <mesh name="rectilinearmesh" type="rectilinear" time-varying="no">
+         <nspace value="2" />
+         <dimensions value="nx_global,ny_global" /> 
+         <coordinates-multi-var value="X,Y" />
+    </mesh>
+
+    <global-bounds dimensions="nx_global,ny_global" offsets="offs_x,offs_y">
+        <var name="data" type="double" mesh="rectilinearmesh" dimensions="nx_local,ny_local" center="point"/>
+    </global-bounds>
+
+  </adios-group>
+
+  <!-- Choose an output method for the above group. 
+       MPI: write 1 file, each process writes its piece into the same file
+       POSIX: write 1 file per process writes 
+       VAR_MERGE: aggregate and merge blocks (up to two levels of aggregation)
+                  default aggregation buffer size is 2 MB
+       VAR_MERGE: limit the aggregation level by decreasing the aggregation buffer
+                  size to 300k
+  -->
+  <transport group="rectilinear2d" method="MPI"/>
+  <!--
+  <transport group="writer" method="POSIX"/>
+  <transport group="writer" method="MPI_AGGREGATE">num_aggregators=4;num_ost=2</transport>
+  <transport group="writer" method="PHDF5"/>
+  <transport group="writer" method="VAR_MERGE">io_method=MPI</transport>
+  <transport group="writer" method="VAR_MERGE">chunk_size=300000;io_method=MPI</transport>
+  -->
+
+  <buffer size-MB="4" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/schema/structured.c b/examples/C/schema/structured.c
deleted file mode 100644
index 40201b6..0000000
--- a/examples/C/schema/structured.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-/* ADIOS C Example: write a variable along with a structured mesh. 
- * Note that the mesh dimensions depend on the rank.
-*/
-#include <stdio.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-int main (int argc, char * argv[] ) 
-{
-    char        filename[]="structured.bp";
-    int         rank, size, i, j;
-    int         NX = 10;  
-    double      t[NX], mean = 0;
-    MPI_Comm    comm = MPI_COMM_WORLD;
-    char      * str = "Jul, 2012";
-    int         nspace=2;
-
-    int         adios_err;
-    uint64_t    adios_groupsize, adios_totalsize;
-    int64_t     adios_handle;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-    MPI_Comm_size (comm, &size);
-
-    float       X[size*NX];
-    float       Y[size][NX];
-    float       XY[2*size*NX];
-    int         size2 = 2*size*NX;
-    int idx = 0;
-    for (i = 0; i< size; i++)
-    {
-        for (j=0; j<NX; j++)
-        {
-            X[idx] = i + j;
-            Y[i][j] = i - j;
-            XY[2*idx] = X[idx];
-            XY[2*idx+1]=Y[i][j];
-            idx++;
-        }
-    }
-   
-    for (i = 0; i< NX; i++) {
-        t[i] = i+rank;
-    }
-    mean /= NX;
-
-    adios_init ("structured.xml", comm);
-
-    adios_open (&adios_handle, "schema", filename, "w", comm);
-
-    adios_groupsize = 4 \
-                      + 4 \
-                + 4 \
-                + 4 \
-                + strlen(str) \
-                + sizeof(float) * (size) * (NX) \
-                + sizeof(float) * (size) * (NX) \
-                + sizeof(double) * (NX);
-    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    adios_write (adios_handle, "NX", &NX);
-    adios_write (adios_handle, "size", &size);
-    //adios_write (adios_handle, "size2", &size2);
-    adios_write (adios_handle, "rank", &rank);
-    //adios_write (adios_handle, "mean", &mean);
-    //adios_write (adios_handle, "nspace", &nspace);
-    adios_write (adios_handle, "X", X);
-    adios_write (adios_handle, "Y", Y);
-    //adios_write (adios_handle, "XY",  XY);
-    //adios_write (adios_handle, "date", str);
-    adios_write (adios_handle, "temperature", t);
-
-    adios_close (adios_handle);
-
-    MPI_Barrier (comm);
-
-    adios_finalize (rank);
-
-    MPI_Finalize ();
-
-    return 0;
-}
diff --git a/examples/C/schema/structured.xml b/examples/C/schema/structured.xml
deleted file mode 100644
index d3eac53..0000000
--- a/examples/C/schema/structured.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<adios-config host-language="C">
-    <adios-group name="schema" coordination-communicator="comm">
-    <var name="NX"   type="integer"/>
-    <var name="size" type="integer"/>
-    <var name="rank" type="integer"/>
-    <var name="X" dimensions="size,NX" type="float"/>
-    <var name="Y" dimensions="size,NX" type="float"/>
-    <global-bounds  dimensions="size,NX" offsets="rank,0">
-        <var name="temperature" mesh="mesh1" gwrite="t" gread="t" type="double" dimensions="1,NX"/>
-    </global-bounds>
-    <mesh name="mesh1" type="structured" time-varying="no">
-        <dimensions value="size,NX"/>
-        <points-multi-var value="X,Y" />
-    </mesh>
-</adios-group>
-
-<method group="schema" method="MPI"/>
-<buffer size-MB="5" allocate-time="now"/>
-</adios-config>
diff --git a/examples/C/schema/structured2d.c b/examples/C/schema/structured2d.c
new file mode 100644
index 0000000..fe78a54
--- /dev/null
+++ b/examples/C/schema/structured2d.c
@@ -0,0 +1,150 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write variables along with an unstructured mesh. 
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios.h"
+
+//will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+char   npx_str[256];       // # of procs in x dim (string value)
+char   npy_str[256];       // # of procs in y dim (string value)
+int    npx;                // # of procs in x direction
+int    npy;                // # of procs in y direction
+int    nproc;               // # of total procs
+
+void printUsage(char *prgname)
+{
+    printf("Usage: mpirun -np <N> %s <nx> <ny>\n"
+           "    <nx> <ny>  2D decomposition values in each dimension of an 2D array\n"
+           "         The product of these number must be equal the number of processes\n"
+           "         e.g. for N=12 you may use  4 3\n"
+        ,prgname);
+}
+
+int processArgs(int argc, char ** argv)
+{
+    int i, j, nd, prod;
+    char *end;
+    if (argc < 3) {
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    strncpy(npx_str, argv[1], sizeof(npx_str));
+    strncpy(npy_str, argv[2], sizeof(npy_str));  
+
+    npx = atoi(npx_str);
+    npy = atoi(npy_str);
+
+    if (npx*npy != nproc) {
+        printf ("ERROR: Product of decomposition numbers in X and Y dimension %d != number of processes %d\n", npx*npy, nproc);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    return 0;
+}
+
+
+
+int main (int argc, char ** argv ) 
+{
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    int         rank;
+    int         ndx, ndy;             // size of array per processor
+    double      *data;
+
+    double      *X;                   //X coordinate
+    double      *Y;                   //Y coordinate
+
+    // Offsets and sizes
+    int         offs_x, offs_y;       //offset in x and y direction
+    int         nx_local, ny_local;   //local address
+    int         nx_global, ny_global; //global address
+    int         posx, posy;           // position index in the array
+    int         i,j;
+  
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &nproc);
+
+    if (processArgs(argc, argv)) {
+        return 1;
+    }
+    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+    ndx = 65;
+    ndy = 129;
+
+    //2D array with block,block decomposition
+    posx = rank%npx;           // 1st dim
+    posy = rank/npx;           // 2nd dim
+    offs_x = posx * ndx;
+    offs_y = posy * ndy;
+    nx_local = ndx;
+    ny_local = ndy;
+    nx_global = npx * ndx;
+    ny_global = npy * ndy;
+
+    data = malloc (ndx * ndy * sizeof(double));
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+            data[i*ndy + j] = 1.0*rank;
+
+
+    X = malloc (ndx * ndy * sizeof(double));
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+            X[i*ndy + j] = offs_x + posy*ndx + i*ndx/ndx + (double)ndx*j/ndy;
+
+    Y = malloc (ndx * ndy * sizeof(double));
+    Y[0] = offs_y;
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+            Y[i*ndy + j] = offs_y + ndy*j/ndy;
+
+    adios_init ("structured2d.xml", comm);
+    adios_open (&adios_handle, "structured2d", "structured2d.bp", "w", comm);
+    adios_groupsize = 7*sizeof(int) \
+	+ 3 * sizeof(double) * (nx_local*ny_local);
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "nproc", &nproc);
+    adios_write (adios_handle, "nx_global", &nx_global);
+    adios_write (adios_handle, "ny_global", &ny_global);
+    adios_write (adios_handle, "offs_x", &offs_x);
+    adios_write (adios_handle, "offs_y", &offs_y);
+    adios_write (adios_handle, "nx_local", &nx_local);
+    adios_write (adios_handle, "ny_local", &ny_local);
+    adios_write (adios_handle, "X", X);
+    adios_write (adios_handle, "Y", Y);
+    adios_write (adios_handle, "data", data);
+
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+
+    free (data);
+    free (X);
+    free (Y);
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/schema/structured2d.readme b/examples/C/schema/structured2d.readme
new file mode 100644
index 0000000..c6b25fa
--- /dev/null
+++ b/examples/C/schema/structured2d.readme
@@ -0,0 +1,41 @@
+REQUIREMENTS:
+    - ADIOS 1.5.0: http://www.olcf.ornl.gov/center-projects/adios
+    - C compiler
+    - MPI
+
+BUILD:
+    - Install ADIOS
+    - In Makefile, set ADIOS_DIR to the installation directory
+    - also set the MPI/C compiler name (e.g. mpicc or cc)
+    - run make
+
+This example is for writing a uniform 2D mesh and data on it. 
+2D mesh is decomposed in x and y direction by npx and npy, which are passed in from the command line following the executable.
+npx = number of processes in x direction
+npy = number of processes in y direction
+X = coordinates of data in x direction
+Y = coordinates of data in y direction
+
+Processes write ndx*ndy points per process
+data is data on the points (value = rank)
+
+1. Run the writer 
+=================
+$ mpirun -np 12 ./structured2d 4 3
+
+2. Check the output
+===================
+  integer  /nproc      scalar = 12 
+  integer  /nx_global  scalar = 260 
+  integer  /ny_global  scalar = 387 
+  integer  /offs_x     scalar = 0 
+  integer  /offs_y     scalar = 0 
+  integer  /nx_local   scalar = 65 
+  integer  /ny_local   scalar = 129 
+  double   /X          {260, 387} = 0 / 453.496 / 226.748 / 93.8189 
+  double   /Y          {260, 387} = 0 / 386 / 193 / 111.717 
+  double   /data       {260, 387} = 0 / 11 / 5.5 / 3.45205 
+
+$ bpls -l structured2d.bp
+
+strctured2d.png is a plot of how the data over the nx_global*ny_global points should look like if visualized.
diff --git a/examples/C/schema/structured2d.xml b/examples/C/schema/structured2d.xml
new file mode 100644
index 0000000..da43ec9
--- /dev/null
+++ b/examples/C/schema/structured2d.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<adios-config host-language="C" schema-version="1.1">
+  <adios-group name="structured2d" >
+    <var name="nx_global"  path="" type="integer"/>
+    <var name="ny_global"  path="" type="integer"/>
+    <var name="nproc" path="" type="integer"/>
+    <var name="offs_x" path="" type="integer"/>
+    <var name="offs_y" path="" type="integer"/>
+    <var name="nx_local"  path="" type="integer"/>
+    <var name="ny_local"  path="" type="integer"/>
+
+    <global-bounds dimensions="nx_global,ny_global" offsets="offs_x,offs_y">
+        <var name="X" type="double" dimensions="nx_local,ny_local"/>
+    </global-bounds>
+
+    <global-bounds dimensions="nx_global,ny_global" offsets="offs_x,offs_y">
+        <var name="Y" type="double" dimensions="nx_local,ny_local"/>
+    </global-bounds>
+
+    <mesh name="structuredmesh" type="structured" time-varying="no">
+         <nspace value="2" />
+         <dimensions value="nx_global,ny_global" /> 
+         <points-multi-var value="X,Y" />
+    </mesh>
+
+    <global-bounds dimensions="nx_global,ny_global" offsets="offs_x,offs_y">
+        <var name="data" type="double" mesh="structuredmesh" dimensions="nx_local,ny_local" center="point"/>
+    </global-bounds>
+
+  </adios-group>
+
+  <!-- Choose an output method for the above group. 
+       MPI: write 1 file, each process writes its piece into the same file
+       POSIX: write 1 file per process writes 
+       VAR_MERGE: aggregate and merge blocks (up to two levels of aggregation)
+                  default aggregation buffer size is 2 MB
+       VAR_MERGE: limit the aggregation level by decreasing the aggregation buffer
+                  size to 300k
+  -->
+  <transport group="structured2d" method="MPI"/>
+  <!--
+  <transport group="writer" method="POSIX"/>
+  <transport group="writer" method="MPI_AGGREGATE">num_aggregators=4;num_ost=2</transport>
+  <transport group="writer" method="PHDF5"/>
+  <transport group="writer" method="VAR_MERGE">io_method=MPI</transport>
+  <transport group="writer" method="VAR_MERGE">chunk_size=300000;io_method=MPI</transport>
+  -->
+
+  <buffer size-MB="4" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/schema/tri2d.c b/examples/C/schema/tri2d.c
new file mode 100644
index 0000000..d440238
--- /dev/null
+++ b/examples/C/schema/tri2d.c
@@ -0,0 +1,305 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write variables along with an unstructured mesh. 
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios.h"
+
+//will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+char   npx_str[256];       // # of procs in x dim (string value)
+char   npy_str[256];       // # of procs in y dim (string value)
+int    npx;                // # of procs in x direction
+int    npy;                // # of procs in y direction
+int    nproc;               // # of total procs
+
+void printUsage(char *prgname)
+{
+    printf("Usage: mpirun -np <N> %s <nx> <ny>\n"
+           "    <nx> <ny>  2D decomposition values in each dimension of an 2D array\n"
+           "         The product of these number must be equal the number of processes\n"
+           "         e.g. for N=12 you may use  4 3\n"
+        ,prgname);
+}
+
+int processArgs(int argc, char ** argv)
+{
+    int i, j, nd, prod;
+    char *end;
+    if (argc < 3) {
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    strncpy(npx_str, argv[1], sizeof(npx_str));
+    strncpy(npy_str, argv[2], sizeof(npy_str));  
+
+    npx = atoi(npx_str);
+    npy = atoi(npy_str);
+
+    if (npx*npy != nproc) {
+        printf ("ERROR: Product of decomposition numbers in X and Y dimension %d != number of processes %d\n", npx*npy, nproc);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    return 0;
+}
+
+
+
+int main (int argc, char ** argv ) 
+{
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    int         npoints, num_cells;
+    int         rank;
+    int         ndx, ndy;             // size of array per processor
+    double      *N;                   // node centered variable
+    double      *C;                   // cell centered variable
+    double      *points;              //X,Y coordinate
+    int         *cells;
+
+    // Offsets and sizes
+    int         offs_x, offs_y;       //offset in x and y direction
+    int         nx_local, ny_local;   //local address
+    int         nx_global, ny_global; //global address
+    int         posx, posy;           // position index in the array
+    int         i,j;
+  
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &nproc);
+
+    if (processArgs(argc, argv)) {
+        return 1;
+    }
+    //will work with each core writing ndx = 65, ndy = 129, (65*3,129*4) global
+    ndx = 4;
+    ndy = 3;
+
+    npoints = ndx * ndy * npx * npy;
+    num_cells = (ndx * npx - 1) * (ndy * npy -1) * 2;
+
+    //2D array with block,block decomposition
+    posx = rank%npx;           // 1st dim
+    posy = rank/npx;           // 2nd dim
+    offs_x = posx * ndx;
+    offs_y = posy * ndy;
+    nx_local = ndx;
+    ny_local = ndy;
+    nx_global = npx * ndx;
+    ny_global = npy * ndy;
+
+    // local mesh + data
+    N = malloc (ndx * ndy * sizeof(double));
+    points = malloc (2 * ndx * ndy * sizeof(double));
+
+    if( posx == npx-1 && posy < npy-1 )            //only need to extend in Y direction
+    {
+        C = malloc (sizeof(double) * (ndx-1)*ndy*2);
+        cells = malloc(sizeof(int) * ((ndx-1)*ndy*2*3));
+    }
+    else if( posy == npy-1 && posx < npx-1 )      ////only need to extend in X direction
+    {
+        C = malloc (sizeof(double) * ndx*(ndy-1)*2);
+        cells = malloc(sizeof(int) * ndx*(ndy-1)*2*3);
+//        printf("rank %d cells size is %d\n", rank, ndx*(ndy-1)*2*3);
+    }
+    else if( posx == npx-1 && posy == npy-1 )    //do not need to extend in any direction
+    {
+        C = malloc (sizeof(double) * (ndx-1)*(ndy-1)*2);
+        cells = malloc(sizeof(int) * (ndx-1)*(ndy-1)*2*3);
+//        printf("rank %d cells size is %d\n", rank, ndx*(ndy-1)*2*3);
+    }
+    else               // if( posx < npx-1 && posy < npy-1 )   //need to extend in both X and Y direction
+    {
+        C = malloc (sizeof(double) * ndx*ndy*2);
+        cells = malloc(sizeof(int) * ndx*ndy*2*3);
+    }
+
+    // generate local data
+    int lp = ndx * ndy; // number of points in this local array
+    int op = ndx * ndy * rank; // offset in global points array 
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+        {
+            points[(i*ndy + j)*2] = offs_x + posy*ndx + i*ndx/ndx + (double)ndx*j/ndy;
+            points[(i*ndy + j)*2+1] = offs_y + ndy*j/ndy;
+        }
+
+    for( i = 0; i < lp; i++ )
+        N[i] = 1.0*rank;
+
+    // cells
+    int lc;
+    int oc;
+
+    if( posx == npx-1 && posy < npy-1 )  
+    {
+        lc = (ndx-1)*ndy*2;
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2;
+        for (i = 0; i < ndx-1; i++)
+        {
+            for (j = 0; j < ndy; j++)
+            {
+                int p = i*ndy+j;
+                if( i<ndx-1 && j<ndy-1 )
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+p+ndy+1;
+                    cells[6*p+3] = op+p; cells[6*p+4] =op+p+ndy+1; cells[6*p+5] = op+p+1;
+                }
+                else   //extend in Y direction only
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+nx_global*ndy+(i+1)*ndy;
+                    cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+(i+1)*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;
+/*                    if(rank == 3){
+                        printf("i = %d, j = %d\n", i, j);
+                        printf("op = %d, p = %d\n", op, p);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+p+ndy, 6*p+2, op+nx_global*ndy+(i+1)*ndy);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+nx_global*ndy+(i+1)*ndy, 6*p+5, op+nx_global*ndy+i*ndy);
+                    }*/
+                } 
+            }
+        }
+    }
+    else if( posy == npy-1 && posx < npx-1 ) 
+    {
+        lc = ndx*(ndy-1)*2;
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2;
+        for (i = 0; i < ndx; i++)
+            for (j = 0; j < ndy-1; j++)
+            {
+                int p = i*(ndy-1)+j;
+                int p1 = i*ndy+j;
+                if( i<ndx-1 && j<ndy-1 )
+                {
+                    cells[6*p+0] = op+p1; cells[6*p+1] = op+p1+ndy; cells[6*p+2] = op+p1+ndy+1;
+                    cells[6*p+3] = op+p1; cells[6*p+4] =op+p1+ndy+1; cells[6*p+5] = op+p1+1;
+/*                    if(rank == 8){
+                        printf("i = %d, j = %d\n", i, j);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+p+ndy, 6*p+2, op+p+ndy+1);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+p+ndy+1, 6*p+5, op+p+1);
+                    }*/
+                }
+                else   //extend in x direction only
+                {
+                    cells[6*p+0] = op+p1; cells[6*p+1] = op+ndx*ndy+j; cells[6*p+2] = op+ndx*ndy+j+1;
+                    cells[6*p+3] = op+p1; cells[6*p+4] = op+ndx*ndy+j+1; cells[6*p+5] = op+p1+1;
+/*                    if(rank == 8){
+                        printf("i = %d, j = %d\n", i, j);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+ndx*ndy+j, 6*p+2, op+ndx*ndy+j+1);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+ndx*ndy+j+1, 6*p+5, op+p+1);
+                    }*/
+                }
+            }
+    }
+    else if( posx == npx-1 && posy == npy-1 )
+    {
+        lc = (ndx-1)*(ndy-1)*2;
+        oc = posy*(ndx*npx-1)*ndy*2 + posx*ndx*(ndy-1)*2;
+        for (i = 0; i < ndx-1; i++)
+            for (j = 0; j < ndy-1; j++)
+            {
+                int p = i*(ndy-1)+j;
+                int p1 = i*ndy+j;
+                cells[6*p+0] = op+p1; cells[6*p+1] = op+p1+ndy; cells[6*p+2] = op+p1+ndy+1;
+                cells[6*p+3] = op+p1; cells[6*p+4] =op+p1+ndy+1; cells[6*p+5] = op+p1+1;
+/*                if(rank == 11){
+                        printf("i = %d, j = %d\n", i, j);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+0, op+p, 6*p+1, op+ndx*ndy+j, 6*p+2, op+ndx*ndy+j+1);
+                        printf("cells[%d] = %d, cells[%d] = %d, cells[%d] = %d\n", 6*p+3, op+p, 6*p+4, op+ndx*ndy+j+1, 6*p+5, op+p+1);
+                    }*/
+            }
+    }
+    else
+    {
+        lc = ndx*ndy*2;
+        oc = posx*ndx*ndy*2 + posy*(ndx*npx-1)*ndy*2;
+        for (i = 0; i < ndx; i++)
+            for (j = 0; j < ndy; j++)
+            {
+                int p = i*ndy+j;
+                if( i<ndx-1 && j<ndy-1 )
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+p+ndy+1;
+                    cells[6*p+3] = op+p; cells[6*p+4] =op+p+ndy+1; cells[6*p+5] = op+p+1;
+                }
+                else if( i==ndx-1 && j<ndy-1 )
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+ndx*ndy+j; cells[6*p+2] = op+ndx*ndy+j+1;
+                    cells[6*p+3] = op+p; cells[6*p+4] = op+ndx*ndy+j+1; cells[6*p+5] = op+p+1;
+                }
+                else if( i<ndx-1 && j==ndy-1 )
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+p+ndy; cells[6*p+2] = op+nx_global*ndy+(i+1)*ndy;
+                    cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+(i+1)*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;    
+                }
+                else // inter corner point
+                {
+                    cells[6*p+0] = op+p; cells[6*p+1] = op+ndx*ndy+j; cells[6*p+2] = op+nx_global*ndy+ndx*ndy;
+                    cells[6*p+3] = op+p; cells[6*p+4] = op+nx_global*ndy+ndx*ndy; cells[6*p+5] = op+nx_global*ndy+i*ndy;
+                }
+            }
+    }
+
+    for (i=0; i<lc; i++)
+        C[i] = 1.0*rank;
+//        C[i] = rank*lc+i;          //????????????????????
+
+
+    adios_init ("tri2d.xml", comm);
+    adios_open (&adios_handle, "tri2d", "tri2d.bp", "w", comm);
+    adios_groupsize = 13*sizeof(int) \
+	+ sizeof(double) * (lp) \
+    + sizeof(double) * (lc) \
+    + sizeof(double) * (lp) * (2) \
+    + sizeof(int) * (lc) * (3);
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "nproc", &nproc);
+    adios_write (adios_handle, "npoints", &npoints);
+    adios_write (adios_handle, "num_cells", &num_cells);
+    adios_write (adios_handle, "nx_global", &nx_global);
+    adios_write (adios_handle, "ny_global", &ny_global);
+    adios_write (adios_handle, "offs_x", &offs_x);
+    adios_write (adios_handle, "offs_y", &offs_y);
+    adios_write (adios_handle, "nx_local", &nx_local);
+    adios_write (adios_handle, "ny_local", &ny_local);
+    adios_write (adios_handle, "lp", &lp);
+    adios_write (adios_handle, "op", &op);
+    adios_write (adios_handle, "lc", &lc);
+    adios_write (adios_handle, "oc", &oc);
+    adios_write (adios_handle, "N", N);
+    adios_write (adios_handle, "C", C);
+    adios_write (adios_handle, "points", points);
+    adios_write (adios_handle, "cells", cells);
+
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+    free (N);
+    free (points);
+    free (C);
+    free (cells);
+
+//    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/schema/tri2d.n.png b/examples/C/schema/tri2d.n.png
new file mode 100644
index 0000000..8ba4cd7
Binary files /dev/null and b/examples/C/schema/tri2d.n.png differ
diff --git a/examples/C/schema/tri2d.readme b/examples/C/schema/tri2d.readme
new file mode 100644
index 0000000..68df051
--- /dev/null
+++ b/examples/C/schema/tri2d.readme
@@ -0,0 +1,49 @@
+REQUIREMENTS:
+    - ADIOS 1.5.0: http://www.olcf.ornl.gov/center-projects/adios
+    - C compiler
+    - MPI
+
+BUILD:
+    - Install ADIOS
+    - In Makefile, set ADIOS_DIR to the installation directory
+    - also set the MPI/C compiler name (e.g. mpicc or cc)
+    - run make
+
+This example is for writing a uniform 2D mesh and data on it. 
+2D mesh is decomposed in x and y direction by npx and npy, which are passed in from the command line following the executable.
+npx = number of processes in x direction
+npy = number of processes in y direction
+X = coordinates of data in x direction
+Y = coordinates of data in y direction
+
+Processes write ndx*ndy points per process
+data is data on the points (value = rank)
+
+1. Run the writer 
+=================
+$ mpirun -np 12 ./tri2d 4 3
+
+2. Check the output
+===================
+  integer  /nproc      scalar = 12 
+  integer  /npoints    scalar = 144 
+  integer  /num_cells  scalar = 240 
+  integer  /nx_global  scalar = 16 
+  integer  /ny_global  scalar = 9 
+  integer  /offs_x     scalar = 0 
+  integer  /offs_y     scalar = 0 
+  integer  /nx_local   scalar = 4 
+  integer  /ny_local   scalar = 3 
+  integer  /lp         scalar = 12 
+  integer  /op         scalar = 0 
+  integer  /lc         scalar = 24 
+  integer  /oc         scalar = 0 
+  double   /N          {144} = 0 / 11 / 5.5 / 3.45205 
+  double   /C          {240} = 0 / 11 / 4.9 / 3.30505 
+  double   /points     {144, 2} = 0 / 25.6667 / 8.41667 / 6.27624 
+  integer  /cells      {240, 3} = 0 / 143 / 71.5 / 40.0625 
+
+$ bpls -l tri2d.bp
+
+tri2d.n.png is a plot of how the data over the nx_global*ny_global points should look like if visualized.
+/ccs/proj/e2e/plotter/sith/plotter2d -f tri2d.bp -triangle -yvar /cells -xvar /points -v N -o tri2d.n.png -d -d
diff --git a/examples/C/schema/tri2d.xml b/examples/C/schema/tri2d.xml
new file mode 100644
index 0000000..658dd1e
--- /dev/null
+++ b/examples/C/schema/tri2d.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<adios-config host-language="C" schema-version="1.1">
+  <adios-group name="tri2d" >
+    <var name="nx_global"  path="" type="integer"/>
+    <var name="ny_global"  path="" type="integer"/>
+    <var name="nproc" path="" type="integer"/>
+    <attribute name="description" path="/nproc" value="Number of writers"/>
+
+    <var name="npoints" path="" type="integer"/>
+    <attribute name="description" path="/npoints" value="Number of points"/>
+
+    <var name="num_cells" path="" type="integer"/>
+    <attribute name="description" path="/num_cells" value="Number of triangles"/>
+
+    <var name="offs_x" path="" type="integer"/>
+    <var name="offs_y" path="" type="integer"/>
+    <var name="nx_local"  path="" type="integer"/>
+    <var name="ny_local"  path="" type="integer"/>
+
+    <var name="op" type="integer"/>
+    <var name="lp" type="integer"/>
+    <var name="oc" type="integer"/>
+    <var name="lc" type="integer"/>
+
+
+    <global-bounds dimensions="npoints,2" offsets="op,0">
+        <var name="points" type="double" dimensions="lp,2"/>
+    </global-bounds>
+
+    <global-bounds dimensions="num_cells,3" offsets="oc,0">
+        <var name="cells" type="integer" dimensions="lc,3"/>
+    </global-bounds>
+
+    <!-- Mesh definition -->
+    <mesh name="trimesh" type="unstructured" time-varying="no">
+         <nspace value="2" />
+         <points-single-var value="points" />
+         <uniform-cells count="num_cells" data="cells" type="triangle" />
+    </mesh>
+
+    <!-- Data -->
+    <global-bounds dimensions="npoints" offsets="op">
+        <var name="N" type="double" dimensions="lp"
+             mesh="trimesh" center="point"/>
+    </global-bounds>
+    <attribute name="description" path="/N" value="Node centered data"/>
+
+    <global-bounds dimensions="num_cells" offsets="oc">
+        <var name="C" type="double" dimensions="lc"
+             mesh="trimesh" center="cell"/>
+    </global-bounds>
+    <attribute name="description" path="/C" value="Cell centered data"/>
+    
+
+  </adios-group>
+
+  <!-- Choose an output method for the above group. 
+       MPI: write 1 file, each process writes its piece into the same file
+       POSIX: write 1 file per process writes 
+       VAR_MERGE: aggregate and merge blocks (up to two levels of aggregation)
+                  default aggregation buffer size is 2 MB
+       VAR_MERGE: limit the aggregation level by decreasing the aggregation buffer
+                  size to 300k
+  -->
+  <transport group="tri2d" method="MPI"/>
+  <!--
+  <transport group="writer" method="POSIX"/>
+  <transport group="writer" method="MPI_AGGREGATE">num_aggregators=4;num_ost=2</transport>
+  <transport group="writer" method="PHDF5"/>
+  <transport group="writer" method="VAR_MERGE">io_method=MPI</transport>
+  <transport group="writer" method="VAR_MERGE">chunk_size=300000;io_method=MPI</transport>
+  -->
+
+  <buffer size-MB="4" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/schema/triangle2d.c b/examples/C/schema/triangle2d.c
new file mode 100644
index 0000000..385f853
--- /dev/null
+++ b/examples/C/schema/triangle2d.c
@@ -0,0 +1,114 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write variables along with an unstructured mesh. 
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+
+
+
+
+int main (int argc, char ** argv ) 
+{
+    int         rank, size, i, x, y;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+
+    int         npoints, num_cells;
+    int         Nspace = 2;
+    float       *points;
+    int         *cells;
+    double      *N; // node centered variable
+    double      *C; // cell centered variable
+	
+
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    int n = size; // number of points in y direction
+    npoints = n*(size+1);       // global number of points
+    num_cells = 2*(n-1)*size;   // global number of cells
+
+    // local mesh + data
+    points = malloc (sizeof(float) * 2*n*2);  // 2n points with 2 (x-y) coords
+    cells = malloc (sizeof(int) * 2*(n-1)*3); // 2(n-1) triangles
+    N = malloc (sizeof(double) * 2*n);           // 2n data points on the points
+    C = malloc (sizeof(double) * 2*(n-1));       // 2(n-1) data points on the cells
+
+    // generate local data 
+    // points (rank,0), (rank,1),...,(rank,n-1), 
+    //        (rank+1,0) ... (rank+1,n-1)
+    int lp = 2*n; // number of points in this local array
+    int op = n*rank; // offset in global points array (next process overwrites our second half)
+    for (y=0; y<n; y++) {
+        points[2*y] = rank;
+        points[2*y+1] = y+rank*0.1;
+    }
+    // second half are ghost cells with next process
+    for (y=0; y<n; y++) {
+        points[2*n+2*y] = rank+1;
+        points[2*n+2*y+1] = y+(rank+1)*0.1;
+    }
+
+    // cells (0--n--n+1) (0--n+1--1) (1--n+1--n+2) (1--n+2--2)... (n-2, 2n-1, n-1) in local terms
+    // 0 point local is rank*n in global = op
+    int lc = 2*(n-1);
+    int oc = lc*rank;
+    for (i=0; i<n-1; i++) {
+        // two triangles define one rectangle 
+        int p=6*i;
+        cells[p+0] = op+i; cells[p+1] = op+n+i;   cells[p+2] = op+n+i+1;
+        cells[p+3] = op+i; cells[p+4] = op+n+i+1; cells[p+5] = op+i+1;
+    }
+
+    for (i=0; i<lp; i++)
+        N[i] = rank*n+i;
+
+    for (i=0; i<lc; i++)
+        C[i] = rank*lc+i;
+
+    adios_init ("triangle2d.xml", comm);
+
+    adios_open (&adios_handle, "tri", "triangle2d.bp", "w", comm);
+
+    adios_groupsize = 7*sizeof(int) \
+	+ sizeof(double) * (lp) \
+	+ sizeof(double) * (lc) \
+	+ sizeof(float) * (lp) * (2) \
+	+ sizeof(int) * (lc) * (3);
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "nproc", &size);
+    adios_write (adios_handle, "npoints", &npoints);
+    adios_write (adios_handle, "num_cells", &num_cells);
+    adios_write (adios_handle, "lp", &lp);
+    adios_write (adios_handle, "op", &op);
+    adios_write (adios_handle, "lc", &lc);
+    adios_write (adios_handle, "oc", &oc);
+    adios_write (adios_handle, "cells", cells);
+    adios_write (adios_handle, "points", points);
+    adios_write (adios_handle, "N", N);
+    adios_write (adios_handle, "C", C);
+
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/schema/triangle2d.n4.png b/examples/C/schema/triangle2d.n4.png
new file mode 100644
index 0000000..85fad4d
Binary files /dev/null and b/examples/C/schema/triangle2d.n4.png differ
diff --git a/examples/C/schema/triangle2d.readme b/examples/C/schema/triangle2d.readme
new file mode 100644
index 0000000..4027b68
--- /dev/null
+++ b/examples/C/schema/triangle2d.readme
@@ -0,0 +1,40 @@
+REQUIREMENTS:
+    - ADIOS 1.5.0: http://www.olcf.ornl.gov/center-projects/adios
+    - C compiler
+    - MPI
+
+BUILD:
+    - Install ADIOS
+    - In Makefile, set ADIOS_DIR to the installation directory
+    - also set the MPI/C compiler name (e.g. mpicc or cc)
+    - run make
+
+This example is for writing a triangular unstructured mesh and data on it. 
+n = number of processes
+Processes write data on 2(n-1) triangles per process
+N is data on the points (value = rank)
+C is data on the cells (value = rank)
+
+1. Run the writer 
+=================
+$ mpirun -np 4 ./triangle2d
+
+2. Check the output
+===================
+  integer  /nproc      scalar = 4 
+  integer  /npoints    scalar = 20 
+  integer  /num_cells  scalar = 24 
+  integer  /lp         scalar = 8 
+  integer  /op         scalar = 0 
+  integer  /lc         scalar = 6 
+  integer  /oc         scalar = 0 
+  integer  /cells      {24, 3} = 0 / 19 / 9.5 / 5.058 
+  real     /points     {20, 2} = 0 / 4 / 1.85 / 1.18533 
+  double   /N          {20} = 0 / 19 / 9.5 / 5.02494 
+  double   /C          {24} = 0 / 23 / 11.5 / 6.92219
+
+$ bpls -l triangle2d.bp
+
+triangle2d.n4.png is a plot of how the data N[20] over the 20 points should look like if visualized.
+
+
diff --git a/examples/C/schema/triangle2d.xml b/examples/C/schema/triangle2d.xml
new file mode 100644
index 0000000..e7d5db7
--- /dev/null
+++ b/examples/C/schema/triangle2d.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="tri">
+
+    <var name="nproc" type="integer"/>
+    <attribute name="description" path="/nproc" value="Number of writers"/>
+
+    <!-- Triangular unstructured mesh -->
+    <var name="npoints" type="integer"/>
+    <attribute name="description" path="/npoints" value="Number of points"/>
+
+    <var name="num_cells" type="integer"/>
+    <attribute name="description" path="/num_cells" value="Number of triangles"/>
+
+    <var name="op" type="integer"/>
+    <var name="lp" type="integer"/>
+    <var name="oc" type="integer"/>
+    <var name="lc" type="integer"/>
+
+    <global-bounds dimensions="npoints,2" offsets="op,0">
+        <var name="points" type="float" dimensions="lp,2"/>
+    </global-bounds>
+
+    <global-bounds dimensions="num_cells,3" offsets="oc,0">
+        <var name="cells" type="integer" dimensions="lc,3"/>
+    </global-bounds>
+
+    <!-- Mesh definition -->
+    <mesh name="trimesh" type="unstructured" time-varying="no">
+         <nspace value="2" />
+         <points-single-var value="points" />
+         <uniform-cells count="num_cells" data="cells" type="triangle" />
+    </mesh>
+
+    <!-- Data -->
+    <global-bounds dimensions="npoints" offsets="op">
+        <var name="N" type="double" dimensions="lp"
+             mesh="trimesh" center="point"/>
+    </global-bounds>
+    <attribute name="description" path="/N" value="Node centered data"/>
+
+    <global-bounds dimensions="num_cells" offsets="oc">
+        <var name="C" type="double" dimensions="lc"
+             mesh="trimesh" center="cell"/>
+    </global-bounds>
+    <attribute name="description" path="/C" value="Cell centered data"/>
+
+
+  </adios-group>
+
+  <transport group="tri" method="MPI">verbose=2</transport>
+  <!--transport group="writer2D" method="DATASPACES">verbose=3</transport-->
+  <!--transport group="writer2D" method="DIMES">verbose=3</transport-->
+  <!--transport group="writer2D" method="FLEXPATH">QUEUE_SIZE=10;verbose=3</transport-->
+
+  <buffer size-MB="40" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/schema/uniform.c b/examples/C/schema/uniform.c
deleted file mode 100644
index 6420ea8..0000000
--- a/examples/C/schema/uniform.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-/* ADIOS C Example: write a variable along with uniform mesh 
-*/
-#include <stdio.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-int main (int argc, char * argv[] ) 
-{
-    char        filename [] = "uniform.bp";
-    int         rank, size, size2, i;
-    int         O1=-1, O2=-2, S1=2;
-    int         NX = 10;  
-    double      t[NX], mean = 0;
-    MPI_Comm    comm = MPI_COMM_WORLD;
-    char * str = "Jul, 2012";
-
-    int         adios_err;
-    uint64_t    adios_groupsize, adios_totalsize;
-    int64_t     adios_handle;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-    MPI_Comm_size (comm, &size);
-
-    int M2 = NX - 1;
-    for (i = 0; i < NX; i++)
-    {
-        t[i] = rank * NX + i;
-        mean += t[i];
-    }
-
-    mean /= NX;
-
-    adios_init ("uniform.xml", comm);
-
-    adios_open (&adios_handle, "schema", filename, "w", comm);
-
-    adios_groupsize = 4 \
-                      + 4 \
-                + 4 \
-                + 4 \
-                + 4 \
-                + 4 \
-                + 4 \
-                + 4 \
-                + 8 \
-                + strlen(str) \
-                + 8 * (1) * (NX);
-    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    adios_write (adios_handle, "NX", &NX);
-    adios_write (adios_handle, "size", &size);
-    adios_write (adios_handle, "size-2", &size2);
-    adios_write (adios_handle, "rank", &rank);
-    adios_write (adios_handle, "mean", &mean);
-    adios_write (adios_handle, "O1", &O1);
-    adios_write (adios_handle, "O2", &O2);
-    adios_write (adios_handle, "S1", &S1);
-    adios_write (adios_handle, "M2", &M2);
-    adios_write (adios_handle, "date", str);
-    adios_write (adios_handle, "temperature", t);
-
-    adios_close (adios_handle);
-
-    MPI_Barrier (comm);
-
-    adios_finalize (rank);
-
-    MPI_Finalize ();
-
-    return 0;
-}
diff --git a/examples/C/schema/uniform.xml b/examples/C/schema/uniform.xml
deleted file mode 100644
index c0cdebc..0000000
--- a/examples/C/schema/uniform.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<adios-config host-language="C">
-    <adios-group name="schema" coordination-communicator="comm">
-    <var name="NX"   type="integer"/>
-    <var name="size" type="integer"/>
-    <var name="size-2" type="integer"/>
-    <var name="rank" type="integer"/>
-    <var name="mean" type="double"/>
-    <var name="date" type="string" gwrite="str"/>
-    <var name="O1" type="integer"/>
-    <var name="O2" type="integer"/>
-    <var name="S1" type="integer"/>
-    <var name="M2" type="integer"/>
-    <global-bounds  dimensions="size,NX" offsets="rank,0">
-        <var name="temperature" mesh="mesh3" gwrite="t" gread="t" type="double" dimensions="1,NX"/>
-    </global-bounds>
-    <!-- Uniform meshes to visualize temperature 2D array of size*NX -->
-
-    <!-- Mesh1: Reader will assume 
-         - 0 for origin
-         - unit spacing, and
-         - extract dimensions from vars
-    -->
-    <mesh name="mesh1" type="uniform" time-varying="no">
-    </mesh>
-
-    <!-- Mesh 2: 
-         - dimensions,
-         - origin (first point), and
-         - spacing
-    Note: For an n-dimensional variable reader will expect n coordinates for origin.
-    In this case, the spacing is uniform in both direction, so only one value
-    is provided. Otherwise, use spacing value="S1,S2" as shown in Mesh 3.
-    -->
-    <mesh name="mesh2" type="uniform" time-varying="no">
-        <dimensions value="size,NX" />
-        <origin value="O1,O2" />
-        <spacing value="S1" />
-    </mesh>
-
-    <!-- Mesh 3:
-         - dimensions,
-         - origin (first point), and 
-         - spacing different in each dimension
-    Note: Values can be scalars or variable names. 
-    -->
-    <mesh name="mesh3" type="uniform" time-varying="no">
-        <dimensions value="size,NX" />
-        <origin value="-2,O2" />
-        <spacing value="S1,4" />
-    </mesh>
-
-    <!-- Mesh 4:
-         - dimensions,
-         - origin (first point), and 
-         - maximum (last point)
-    Note: "size-2" is a variable name in ADIOS XML, so a variable with such name
-    must be written by the application
-    -->
-    <mesh name="mesh4" type="uniform" time-varying="no">
-        <dimensions value="40,60" />
-        <origin value="-2,-1" />
-        <maximum value="size-2,M2" />
-    </mesh>
-</adios-group>
-
-<method group="schema" method="MPI"/>
-<buffer size-MB="5" allocate-time="now"/>
-</adios-config>
diff --git a/examples/C/schema/uniform2d.c b/examples/C/schema/uniform2d.c
new file mode 100644
index 0000000..71324d2
--- /dev/null
+++ b/examples/C/schema/uniform2d.c
@@ -0,0 +1,143 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write variables along with an unstructured mesh. 
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "adios.h"
+
+//will work with 12 cores, which are arranged by npx=4, npy=3 (4x3)
+char   npx_str[256];       // # of procs in x dim (string value)
+char   npy_str[256];       // # of procs in y dim (string value)
+int    npx;                // # of procs in x direction
+int    npy;                // # of procs in y direction
+int    nproc;               // # of total procs
+
+void printUsage(char *prgname)
+{
+    printf("Usage: mpirun -np <N> %s <nx> <ny>\n"
+           "    <nx> <ny>  2D decomposition values in each dimension of an 2D array\n"
+           "         The product of these number must be equal the number of processes\n"
+           "         e.g. for N=12 you may use  4 3\n"
+        ,prgname);
+}
+
+
+int processArgs(int argc, char ** argv)
+{
+    int i, j, nd, prod;
+    char *end;
+    if (argc < 3) {
+        printUsage (argv[0]);
+        return 1;
+    }
+
+    strncpy(npx_str, argv[1], sizeof(npx_str));
+    strncpy(npy_str, argv[2], sizeof(npy_str));  
+
+    npx = atoi(npx_str);
+    npy = atoi(npy_str);
+
+    if (npx*npy != nproc) {
+        printf ("ERROR: Product of decomposition numbers in X and Y dimension %d != number of processes %d\n", npx*npy, nproc);
+        printUsage(argv[0]);
+        return 1;
+    }
+
+    return 0;
+}
+
+
+
+int main (int argc, char ** argv ) 
+{
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    int         rank;
+    int         ndx, ndy;             // size of array per processor
+    double * data;
+
+    int         O1 = 0;               //origin in x direction
+    int         O2 = 0;               //origin in y direction
+    int         S1 = 1;               //spacing in x direction
+    int         S2 = 2;               //spacing in y direction
+
+    // Offsets and sizes
+    int         offs_x, offs_y;       //offset in x and y direction
+    int         nx_local, ny_local;   //local address
+    int         nx_global, ny_global; //global address
+    int         posx, posy;           // position index in the array
+    int         i,j;
+  
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &nproc);
+
+    if (processArgs(argc, argv)) {
+        return 1;
+    }
+
+    //will work with each core writing ndx = 65, ndy = 129, (65*4,129*3) global
+    ndx = 65;
+    ndy = 129;
+
+    //2D array with block,block decomposition
+    posx = rank%npx;           // 1st dim
+    posy = rank/npx;           // 2nd dim
+    offs_x = posx * ndx;
+    offs_y = posy * ndy;
+    nx_local = ndx;
+    ny_local = ndy;
+    nx_global = npx * ndx;
+    ny_global = npy * ndy;
+
+    data = malloc (ndx * ndy * sizeof(double));
+    for( i = 0; i < ndx; i++ )
+        for( j = 0; j < ndy; j++)
+            data[i*ndy + j] = 1.0*rank;
+ 
+    adios_init ("uniform2d.xml", comm);
+    adios_open (&adios_handle, "uniform2d", "uniform2d.bp", "w", comm);
+
+    adios_groupsize = 7*sizeof(int) + 4*sizeof(double)\
+	+ sizeof(double) * (nx_local*ny_local) ;
+
+    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    adios_write (adios_handle, "nproc", &nproc);
+    adios_write (adios_handle, "nx_global", &nx_global);
+    adios_write (adios_handle, "ny_global", &ny_global);
+    adios_write (adios_handle, "offs_x", &offs_x);
+    adios_write (adios_handle, "offs_y", &offs_y);
+    adios_write (adios_handle, "nx_local", &nx_local);
+    adios_write (adios_handle, "ny_local", &ny_local);
+    adios_write (adios_handle, "O1", &O1);
+    adios_write (adios_handle, "O2", &O2);
+    adios_write (adios_handle, "S1", &S1);
+    adios_write (adios_handle, "S2", &S2);
+    adios_write (adios_handle, "data", data);
+
+    adios_close (adios_handle);
+
+    MPI_Barrier (comm);
+
+    free (data);
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/schema/uniform2d.png b/examples/C/schema/uniform2d.png
new file mode 100644
index 0000000..53c7e05
Binary files /dev/null and b/examples/C/schema/uniform2d.png differ
diff --git a/examples/C/schema/uniform2d.readme b/examples/C/schema/uniform2d.readme
new file mode 100644
index 0000000..f22220c
--- /dev/null
+++ b/examples/C/schema/uniform2d.readme
@@ -0,0 +1,42 @@
+REQUIREMENTS:
+    - ADIOS 1.5.0: http://www.olcf.ornl.gov/center-projects/adios
+    - C compiler
+    - MPI
+
+BUILD:
+    - Install ADIOS
+    - In Makefile, set ADIOS_DIR to the installation directory
+    - also set the MPI/C compiler name (e.g. mpicc or cc)
+    - run make
+
+This example is for writing a uniform 2D mesh and data on it. 
+2D mesh is decomposed in x and y direction by npx and npy, which are passed in from the command line following the executable.
+npx = number of processes in x direction
+npy = number of processes in y direction
+Processes write ndx*ndy points per process
+data is data on the points (value = rank)
+
+1. Run the writer 
+=================
+$ mpirun -np 12 ./uniform2d 4 3
+
+2. Check the output
+===================
+  integer  /nproc      scalar = 12 
+  integer  /nx_global  scalar = 260 
+  integer  /ny_global  scalar = 387 
+  integer  /offs_x     scalar = 0 
+  integer  /offs_y     scalar = 0 
+  integer  /nx_local   scalar = 65 
+  integer  /ny_local   scalar = 129 
+  integer  /O1         scalar = 0 
+  integer  /O2         scalar = 0 
+  integer  /S1         scalar = 1 
+  integer  /S2         scalar = 2 
+  double   /data         {260, 387} = 0 / 11 / 5.5 / 3.45205
+
+$ bpls -l uniform2d.bp
+
+uniform2d.png is a plot of how the data over the nx_global*ny_global points should look like if visualized.
+/ccs/proj/e2e/plotter/sith/plotter2d  -f uniform2d.bp -v data -o uniform2d
+
diff --git a/examples/C/schema/uniform2d.xml b/examples/C/schema/uniform2d.xml
new file mode 100644
index 0000000..90d406c
--- /dev/null
+++ b/examples/C/schema/uniform2d.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<adios-config host-language="C" schema-version="1.1">
+  <adios-group name="uniform2d" >
+    <var name="nx_global"  path="" type="integer"/>
+    <var name="ny_global"  path="" type="integer"/>
+    <var name="nproc" path="" type="integer"/>
+    <var name="offs_x" path="" type="integer"/>
+    <var name="offs_y" path="" type="integer"/>
+    <var name="nx_local"  path="" type="integer"/>
+    <var name="ny_local"  path="" type="integer"/>
+
+    <var name="O1" type="integer"/>
+    <var name="O2" type="integer"/>
+    <var name="S1" type="integer"/>
+    <var name="S2" type="integer"/>
+
+    <mesh name="uniformmesh" type="uniform" time-varying="no">
+         <nspace value="2" />
+         <dimensions value="nx_global,ny_global" />
+         <origin value="O1,O2" />
+         <spacing value="S1,S2" />
+    </mesh>
+
+    <global-bounds dimensions="nx_global,ny_global" offsets="offs_x,offs_y">
+        <var name="data" type="double" mesh="uniformmesh" dimensions="nx_local,ny_local" center="point"/>
+    </global-bounds>
+
+  </adios-group>
+
+  <!-- Choose an output method for the above group. 
+       MPI: write 1 file, each process writes its piece into the same file
+       POSIX: write 1 file per process writes 
+       VAR_MERGE: aggregate and merge blocks (up to two levels of aggregation)
+                  default aggregation buffer size is 2 MB
+       VAR_MERGE: limit the aggregation level by decreasing the aggregation buffer
+                  size to 300k
+  -->
+  <transport group="uniform2d" method="MPI"/>
+  <!--
+  <transport group="writer" method="POSIX"/>
+  <transport group="writer" method="MPI_AGGREGATE">num_aggregators=4;num_ost=2</transport>
+  <transport group="writer" method="PHDF5"/>
+  <transport group="writer" method="VAR_MERGE">io_method=MPI</transport>
+  <transport group="writer" method="VAR_MERGE">chunk_size=300000;io_method=MPI</transport>
+  -->
+
+  <buffer size-MB="4" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/schema/unstructured.c b/examples/C/schema/unstructured.c
deleted file mode 100644
index 593adb9..0000000
--- a/examples/C/schema/unstructured.c
+++ /dev/null
@@ -1,441 +0,0 @@
-/* 
- * ADIOS is freely available under the terms of the BSD license described
- * in the COPYING file in the top level directory of this source distribution.
- *
- * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
- */
-
-/* ADIOS C Example: write variables along with an unstructured mesh. 
- */
-#include <stdio.h>
-#include <string.h>
-#include "mpi.h"
-#include "adios.h"
-
-
-static char *reference = "http://people.sc.fsu.edu/~jburkardt/m_src/twod_to_vtk/twod_to_vtk.html";
-
-//44 lines
-static float points[] = {
-    0.000,     0.000,
-    0.000,     1.000,
-    0.000,     2.000,
-    0.000,     3.000,
-    1.000,     0.000,
-    1.000,     1.000,
-    1.000,     2.000,
-    1.000,     3.000,
-    2.000,     0.000,
-    2.000,     1.000,
-    2.000,     2.000,
-    2.000,     3.000,
-    3.000,     0.000,
-    3.000,     1.000,
-    3.000,     2.000,
-    3.000,     3.000,
-    4.000,     0.000,
-    4.000,     1.000,
-    4.000,     2.000,
-    4.000,     3.000,
-    5.000,     0.000,
-    5.000,     1.000,
-    5.000,     2.000,
-    5.000,     3.000,
-    6.000,     0.000,
-    6.000,     1.000,
-    6.000,     2.000,
-    6.000,     3.000,
-    7.000,     0.000,
-    7.000,     1.000,
-    7.000,     2.000,
-    7.000,     3.000,
-    8.000,     0.000,
-    8.000,     1.000,
-    8.000,     2.000,
-    8.000,     3.000,
-    9.000,     0.000,
-    9.000,     1.000,
-    9.000,     2.000,
-    9.000,     3.000,
-    10.000,     0.000,
-    10.000,     1.000,
-    10.000,     2.000,
-    10.000,     3.000
-};
-
-static float points_X[] = {
- 0.000, 
- 0.000, 
- 0.000, 
- 0.000, 
- 1.000, 
- 1.000, 
- 1.000, 
- 1.000, 
- 2.000, 
- 2.000, 
- 2.000, 
- 2.000, 
- 3.000, 
- 3.000, 
- 3.000, 
- 3.000, 
- 4.000, 
- 4.000, 
- 4.000, 
- 4.000, 
- 5.000, 
- 5.000, 
- 5.000, 
- 5.000, 
- 6.000, 
- 6.000, 
- 6.000, 
- 6.000, 
- 7.000, 
- 7.000, 
- 7.000, 
- 7.000, 
- 8.000, 
- 8.000, 
- 8.000, 
- 8.000, 
- 9.000, 
- 9.000, 
- 9.000, 
- 9.000, 
- 10.000,
- 10.000,
- 10.000,
- 10.000
-};
-
-static float points_Y[] = {
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-  0.000, 
-  1.000, 
-  2.000, 
-  3.000, 
-   0.000,
-   1.000,
-   2.000,
-   3.000
-};
-
-
-
-
-//60 lines
-static int cells[] = {
-       1,   2,  12,
-      13,  12,   2,
-       2,   3,  13,
-      14,  13,   3,
-       3,   4,  14,
-      15,  14,   4,
-       4,   5,  15,
-      16,  15,   5,
-       5,   6,  16,
-      17,  16,   6,
-       6,   7,  17,
-      18,  17,   7,
-       7,   8,  18,
-      19,  18,   8,
-       8,   9,  19,
-      20,  19,   9,
-       9,  10,  20,
-      21,  20,  10,
-      10,  11,  21,
-      22,  21,  11,
-      12,  13,  23,
-      24,  23,  13,
-      13,  14,  24,
-      25,  24,  14,
-      14,  15,  25,
-      26,  25,  15,
-      15,  16,  26,
-      27,  26,  16,
-      16,  17,  27,
-      28,  27,  17,
-      17,  18,  28,
-      29,  28,  18,
-      18,  19,  29,
-      30,  29,  19,
-      19,  20,  30,
-      31,  30,  20,
-      20,  21,  31,
-      32,  31,  21,
-      21,  22,  32,
-      33,  32,  22,
-      23,  24,  34,
-      35,  34,  24,
-      24,  25,  35,
-      36,  35,  25,
-      25,  26,  36,
-      37,  36,  26,
-      26,  27,  37,
-      38,  37,  27,
-      27,  28,  38,
-      39,  38,  28,
-      28,  29,  39,
-      40,  39,  29,
-      29,  30,  40,
-      41,  40,  30,
-      30,  31,  41,
-      42,  41,  31,
-      31,  32,  42,
-      43,  42,  32,
-      32,  33,  43,
-      44,  43,  33
-};
-
-static double U[] = {
-    0.0000000e+00,
-    0.0000000e+00,
-    0.0000000e+00,
-    0.0000000e+00,
-    5.8752800e-03,
-    5.8752800e-03,
-    5.8752800e-03,
-    5.8752800e-03,
-    9.5085900e-03,
-    9.5085900e-03,
-    9.5085900e-03,
-    9.5085900e-03,
-    9.5135100e-03,
-    9.5135100e-03,
-    9.5135100e-03,
-    9.5135100e-03,
-    5.8881600e-03,
-    5.8881600e-03,
-    5.8881600e-03,
-    5.8881600e-03,
-    1.5925500e-05,
-    1.5925500e-05,
-    1.5925500e-05,
-    1.5925500e-05,
-    5.8623800e-03,
-    5.8623800e-03,
-    5.8623800e-03,
-    5.8623800e-03,
-    9.5036500e-03,
-    9.5036500e-03,
-    9.5036500e-03,
-    9.5036500e-03,
-    9.5184100e-03,
-    9.5184100e-03,
-    9.5184100e-03,
-    9.5184100e-03,
-    5.9010200e-03,
-    5.9010200e-03,
-    5.9010200e-03,
-    5.9010200e-03,
-    3.1850900e-05,
-    3.1850900e-05,
-    3.1850900e-05,
-    3.1850900e-05
-};
-
-static  double V[] = {
-    0.0000000e+00,
-    0.0000000e+00,
-    0.0000000e+00,
-    0.0000000e+00,
-    -2.0000000e+00,
-    -2.0000000e+00,
-    -2.0000000e+00,
-    -2.0000000e+00,
-    -4.0000000e+00,
-    -4.0000000e+00,
-    -4.0000000e+00,
-    -4.0000000e+00,
-    -6.0000000e+00,
-    -6.0000000e+00,
-    -6.0000000e+00,
-    -6.0000000e+00,
-    -8.0000000e+00,
-    -8.0000000e+00,
-    -8.0000000e+00,
-    -8.0000000e+00,
-    -1.0000000e+01,
-    -1.0000000e+01,
-    -1.0000000e+01,
-    -1.0000000e+01,
-    -1.2000000e+01,
-    -1.2000000e+01,
-    -1.2000000e+01,
-    -1.2000000e+01,
-    -1.4000000e+01,
-    -1.4000000e+01,
-    -1.4000000e+01,
-    -1.4000000e+01,
-    -1.6000000e+01,
-    -1.6000000e+01,
-    -1.6000000e+01,
-    -1.6000000e+01,
-    -1.8000000e+01,
-    -1.8000000e+01,
-    -1.8000000e+01,
-    -1.8000000e+01,
-    -2.0000000e+01,
-    -2.0000000e+01,
-    -2.0000000e+01,
-    -2.0000000e+01
-};
-
-
-static double T[] = {
-
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00 ,
-    0.0000000e+00 ,
-    2.0000000e+00 ,
-    2.0000000e+00 ,
-    0.0000000e+00
-};
-
-
-int main (int argc, char ** argv ) 
-{
-    char        filename [256];
-    char        meshname [256] = "unstructured";
-    char        xmlfilename[256];
-    int         rank, size, i;
-    MPI_Comm    comm = MPI_COMM_WORLD;
-
-    int         npoints = 44;
-    int         num_cells = 60;
-    int         Nspace = 2;
-	
-
-    /* ADIOS variables declarations for matching gwrite_temperature.ch */
-    int         adios_err;
-    uint64_t    adios_groupsize, adios_totalsize;
-    int64_t     adios_handle;
-
-    MPI_Init (&argc, &argv);
-    MPI_Comm_rank (comm, &rank);
-    MPI_Comm_size (comm, &size);
-
-
-    strcpy (filename, meshname);
-    strcat (filename, ".bp");
-
-    strcpy (xmlfilename,meshname);
-    strcat (xmlfilename,".xml");
-
-    for(i = 0; i < num_cells * 3; i ++)
-    {
-	cells[i] --;
-    }
-
-    adios_init (xmlfilename, comm);
-
-    adios_open (&adios_handle, "channel", filename, "w", comm);
-
-    adios_groupsize = 4 \
-	+ 4 \
-	+ 4 \
-	+ 8 * (npoints) \
-	+ 8 * (npoints) \
-	+ 8 * (npoints) \
-	+ 4 * (num_cells) * (3) \
-	+ 4 * (npoints) * (2) \
-	+ 4 * (npoints) \
-	+ 4 * (npoints);
-
-    adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
-    adios_write (adios_handle, "npoints", &npoints);
-    adios_write (adios_handle, "num_cells", &num_cells);
-    adios_write (adios_handle, "Nspace", &Nspace);
-    adios_write (adios_handle, "U", U);
-    adios_write (adios_handle, "V", V);
-    adios_write (adios_handle, "T", T);
-    adios_write (adios_handle, "cells", cells);
-    adios_write (adios_handle, "points", points);
-    adios_write (adios_handle, "points_X", points_X);
-    adios_write (adios_handle, "points_Y", points_Y);
-
-
-    adios_close (adios_handle);
-
-    MPI_Barrier (comm);
-
-    adios_finalize (rank);
-
-    MPI_Finalize ();
-    return 0;
-}
diff --git a/examples/C/schema/unstructured.xml b/examples/C/schema/unstructured.xml
deleted file mode 100644
index 591d2e3..0000000
--- a/examples/C/schema/unstructured.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<adios-config host-language="C" schema-version="1.1">
-    <adios-group name="channel" coordination-communicator="comm">
-    <attribute name="Reference" path="/" value="http://people.sc.fsu.edu/~jburkardt/m_src/twod_to_vtk/twod_to_vtk.html"/>
-
-    <var name="npoints" type="integer"/>
-    <var name="num_cells" type="integer"/>
-
-    <var name="Nspace" type="integer"/>
-  
-    <var name="U" mesh="mesh1" center="point" time-steps="36,Nspace" type="double" time-series-format="xx" dimensions="npoints" hyperslab="0,32"/>
-    <var name="V" mesh="mesh1" center="point" time-scale="npoints,45,num_cells" type="double" dimensions="npoints" hyperslab="0,1,32"/>
-    <var name="T" mesh="mesh1" center="cell" type="double" dimensions="npoints"/>
-
-    <var name="cells" type="integer" dimensions="num_cells,3"/>
-    <var name="points" type="float" dimensions="npoints,2"/>
-
-    <var name="points_X" type="float" dimensions="npoints"/>
-    <var name="points_Y" type="float" dimensions="npoints"/>
-
-
-    <!-- Mesh1: 
-         - nspace
-         - points-multi-var
-         - uniform-cells
-    -->
-    <mesh name="mesh1" type="unstructured" file="xgc-mesh.bp" time-varying="no" time-steps="npoints,32,Nspace" time-scale="Nspace,45.6,num_cells" time-series-format="xxxx">
-        <nspace value="Nspace" /> 
-        <points-multi-var value="points_X,points_Y" />
-        <uniform-cells count="num_cells" data="cells" type="triangle" />
-    </mesh>
-
-</adios-group>
-
-<method group="channel" method="MPI"/>
-<buffer size-MB="5" allocate-time="now"/>
-</adios-config>
diff --git a/examples/C/stat/CMakeLists.txt b/examples/C/stat/CMakeLists.txt
index 4cc0c73..c819f5f 100644
--- a/examples/C/stat/CMakeLists.txt
+++ b/examples/C/stat/CMakeLists.txt
@@ -10,4 +10,15 @@ add_executable(stat_read stat_read.c)
 target_link_libraries(stat_read adios ${ADIOSREADLIB_LDADD})
 #set_target_properties(stat_read PROPERTIES COMPILE_FLAGS "-DADIOS_USE_READ_API_1")
 
+set (PROGS stat_write stat_read)
+foreach (PROG ${PROGS} )
+  if(MPI_COMPILE_FLAGS)
+    set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+  endif()
+  if(MPI_LINK_FLAGS)
+    set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+  endif()
+  target_link_libraries(${PROG} adios ${MPI_C_LIBRARIES})
+endforeach()
+
 #install(FILES stat.xml gwrite_stat.ch gread_stat.ch job.pbs DESTINATION ${PROJECT_BINARY_DIR}/examples/C/stat)
diff --git a/examples/C/stat/Makefile.am b/examples/C/stat/Makefile.am
index d617545..6262b13 100644
--- a/examples/C/stat/Makefile.am
+++ b/examples/C/stat/Makefile.am
@@ -1,8 +1,12 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/job.pbs $(builddir)
+
 noinst_PROGRAMS = stat_write stat_read
 
 stat_write_SOURCES = stat_write.c
diff --git a/examples/C/stat/Makefile.in b/examples/C/stat/Makefile.in
index 2de815c..b9701ac 100644
--- a/examples/C/stat/Makefile.in
+++ b/examples/C/stat/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = stat_write$(EXEEXT) stat_read$(EXEEXT)
 subdir = examples/C/stat
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 stat_write_SOURCES = stat_write.c
 stat_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -482,7 +511,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -581,19 +610,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/job.pbs $(builddir)
 
 # 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.
diff --git a/examples/C/stat/stat.xml b/examples/C/stat/stat.xml
index d3f6f5b..7bb524d 100644
--- a/examples/C/stat/stat.xml
+++ b/examples/C/stat/stat.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <adios-config host-language="C">
-    <adios-group name="temperature" coordination-communicator="comm" time-index="iter">
+  <adios-group name="temperature" time-index="iter">
     <var name="NX" type="integer"/>
     <var name="rank" type="integer"/>
     <var name="size" type="integer"/>
@@ -8,12 +8,12 @@
        <var name="temperature" gwrite="t" type="double" dimensions="iter,1,NX"/>
        <var name="complex" gwrite="c" type="double complex" dimensions="iter,1,NX"/>
     </global-bounds>
-</adios-group>
+  </adios-group>
 
-<method group="temperature" method="MPI"/>
-<buffer size-MB="5" allocate-time="now"/>
-<!--temporarily disabled the following because the support for histogram has yet to
-be implemented for the new read API. -->
-<!--analysis adios-group="temperature" var="temperature" break-points="0, 100, 1000, 10000" /-->
+  <method group="temperature" method="MPI"/>
+  <buffer size-MB="5" allocate-time="now"/>
+  <!--temporarily disabled the following because the support for histogram 
+       has yet to be implemented for the new read API. -->
+  <!--analysis adios-group="temperature" var="temperature" break-points="0, 100, 1000, 10000" /-->
 </adios-config>
 
diff --git a/examples/C/transforms/Makefile.am b/examples/C/transforms/Makefile.am
new file mode 100644
index 0000000..c6bf52d
--- /dev/null
+++ b/examples/C/transforms/Makefile.am
@@ -0,0 +1,44 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public $(TIMER_CPPFLAGS)
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/S3D $(builddir)
+
+noinst_PROGRAMS = adios_global adios_read_subv adios_read_points adios_read_wb_subpg adios_read_all_3D adios_write_all_3D
+
+adios_global_SOURCES = adios_global.c
+adios_global_LDADD = $(top_builddir)/src/libadios.a 
+adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_global_LDADD += $(ADIOSLIB_LDADD)
+
+adios_write_all_3D_SOURCES = adios_write_all_3D.c
+adios_write_all_3D_LDADD = $(top_builddir)/src/libadios.a 
+adios_write_all_3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_write_all_3D_LDADD += $(ADIOSLIB_LDADD)
+
+adios_read_subv_SOURCES = adios_read_subv.c
+adios_read_subv_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_subv_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_subv_LDADD += $(ADIOSLIB_LDADD)
+
+adios_read_points_SOURCES = adios_read_points.c
+adios_read_points_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_points_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_points_LDADD += $(ADIOSLIB_LDADD)
+
+adios_read_wb_subpg_SOURCES = adios_read_wb_subpg.c
+adios_read_wb_subpg_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_wb_subpg_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_wb_subpg_LDADD += $(ADIOSLIB_LDADD)
+
+adios_read_all_3D_SOURCES = adios_read_all_3D.c
+adios_read_all_3D_LDADD = $(top_builddir)/src/libadiosread.a 
+adios_read_all_3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_all_3D_LDADD += $(ADIOSLIB_LDADD)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+EXTRA_DIST = adios_global.xml gread_temperature.ch gwrite_temperature.ch S3D
diff --git a/examples/C/manual/Makefile.in b/examples/C/transforms/Makefile.in
similarity index 69%
copy from examples/C/manual/Makefile.in
copy to examples/C/transforms/Makefile.in
index 088c3b4..1754e03 100644
--- a/examples/C/manual/Makefile.in
+++ b/examples/C/transforms/Makefile.in
@@ -34,12 +34,17 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = 1_nonadios_example$(EXEEXT) 2_adios_write$(EXEEXT) \
-	3_adios_read$(EXEEXT) 4_adios_nfiles$(EXEEXT)
-subdir = examples/C/manual
+noinst_PROGRAMS = adios_global$(EXEEXT) adios_read_subv$(EXEEXT) \
+	adios_read_points$(EXEEXT) adios_read_wb_subpg$(EXEEXT) \
+	adios_read_all_3D$(EXEEXT) adios_write_all_3D$(EXEEXT)
+subdir = examples/C/transforms
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +54,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,35 +76,49 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_1_nonadios_example_OBJECTS = 1_nonadios_example.$(OBJEXT)
-1_nonadios_example_OBJECTS = $(am_1_nonadios_example_OBJECTS)
+am_adios_global_OBJECTS = adios_global.$(OBJEXT)
+adios_global_OBJECTS = $(am_adios_global_OBJECTS)
 am__DEPENDENCIES_1 =
-1_nonadios_example_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+adios_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-1_nonadios_example_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(1_nonadios_example_LDFLAGS) $(LDFLAGS) -o $@
-am_2_adios_write_OBJECTS = 2_adios_write.$(OBJEXT)
-2_adios_write_OBJECTS = $(am_2_adios_write_OBJECTS)
-2_adios_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_global_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_all_3D_OBJECTS = adios_read_all_3D.$(OBJEXT)
+adios_read_all_3D_OBJECTS = $(am_adios_read_all_3D_OBJECTS)
+adios_read_all_3D_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-2_adios_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_all_3D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(2_adios_write_LDFLAGS) $(LDFLAGS) -o $@
-am_3_adios_read_OBJECTS = 3_adios_read.$(OBJEXT)
-3_adios_read_OBJECTS = $(am_3_adios_read_OBJECTS)
-3_adios_read_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_read_all_3D_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_points_OBJECTS = adios_read_points.$(OBJEXT)
+adios_read_points_OBJECTS = $(am_adios_read_points_OBJECTS)
+adios_read_points_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-3_adios_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_points_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(3_adios_read_LDFLAGS) $(LDFLAGS) -o $@
-am_4_adios_nfiles_OBJECTS = 4_adios_nfiles.$(OBJEXT)
-4_adios_nfiles_OBJECTS = $(am_4_adios_nfiles_OBJECTS)
-4_adios_nfiles_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(adios_read_points_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_subv_OBJECTS = adios_read_subv.$(OBJEXT)
+adios_read_subv_OBJECTS = $(am_adios_read_subv_OBJECTS)
+adios_read_subv_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-4_adios_nfiles_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+adios_read_subv_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(4_adios_nfiles_LDFLAGS) $(LDFLAGS) -o $@
+	$(adios_read_subv_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_read_wb_subpg_OBJECTS = adios_read_wb_subpg.$(OBJEXT)
+adios_read_wb_subpg_OBJECTS = $(am_adios_read_wb_subpg_OBJECTS)
+adios_read_wb_subpg_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+	$(am__DEPENDENCIES_1)
+adios_read_wb_subpg_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(adios_read_wb_subpg_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_write_all_3D_OBJECTS = adios_write_all_3D.$(OBJEXT)
+adios_write_all_3D_OBJECTS = $(am_adios_write_all_3D_OBJECTS)
+adios_write_all_3D_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+adios_write_all_3D_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(adios_write_all_3D_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -108,10 +131,12 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(1_nonadios_example_SOURCES) $(2_adios_write_SOURCES) \
-	$(3_adios_read_SOURCES) $(4_adios_nfiles_SOURCES)
-DIST_SOURCES = $(1_nonadios_example_SOURCES) $(2_adios_write_SOURCES) \
-	$(3_adios_read_SOURCES) $(4_adios_nfiles_SOURCES)
+SOURCES = $(adios_global_SOURCES) $(adios_read_all_3D_SOURCES) \
+	$(adios_read_points_SOURCES) $(adios_read_subv_SOURCES) \
+	$(adios_read_wb_subpg_SOURCES) $(adios_write_all_3D_SOURCES)
+DIST_SOURCES = $(adios_global_SOURCES) $(adios_read_all_3D_SOURCES) \
+	$(adios_read_points_SOURCES) $(adios_read_subv_SOURCES) \
+	$(adios_read_wb_subpg_SOURCES) $(adios_write_all_3D_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -137,12 +162,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -205,6 +239,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -277,7 +314,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -332,25 +378,34 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public $(TIMER_CPPFLAGS)
 AUTOMAKE_OPTIONS = no-dependencies
-1_nonadios_example_SOURCES = 1_nonadios_example.c
-1_nonadios_example_LDADD = $(top_builddir)/src/libadios.a \
+adios_global_SOURCES = adios_global.c
+adios_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+adios_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_write_all_3D_SOURCES = adios_write_all_3D.c
+adios_write_all_3D_LDADD = $(top_builddir)/src/libadios.a \
 	$(ADIOSLIB_LDADD)
-1_nonadios_example_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-2_adios_write_SOURCES = 2_adios_write.c
-2_adios_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-2_adios_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-3_adios_read_SOURCES = 3_adios_read.c
-3_adios_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-3_adios_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-4_adios_nfiles_SOURCES = 4_adios_nfiles.c
-4_adios_nfiles_LDADD = $(top_builddir)/src/libadios.a \
+adios_write_all_3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_subv_SOURCES = adios_read_subv.c
+adios_read_subv_LDADD = $(top_builddir)/src/libadiosread.a \
 	$(ADIOSLIB_LDADD)
-4_adios_nfiles_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_subv_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_points_SOURCES = adios_read_points.c
+adios_read_points_LDADD = $(top_builddir)/src/libadiosread.a \
+	$(ADIOSLIB_LDADD)
+adios_read_points_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_wb_subpg_SOURCES = adios_read_wb_subpg.c
+adios_read_wb_subpg_LDADD = $(top_builddir)/src/libadiosread.a \
+	$(ADIOSLIB_LDADD)
+adios_read_wb_subpg_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+adios_read_all_3D_SOURCES = adios_read_all_3D.c
+adios_read_all_3D_LDADD = $(top_builddir)/src/libadiosread.a \
+	$(ADIOSLIB_LDADD)
+adios_read_all_3D_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = config.xml gread_temperature.ch gwrite_temperature.ch
+EXTRA_DIST = adios_global.xml gread_temperature.ch gwrite_temperature.ch S3D
 all: all-am
 
 .SUFFIXES:
@@ -364,9 +419,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/manual/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/transforms/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/manual/Makefile
+	  $(AUTOMAKE) --gnu examples/C/transforms/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -394,18 +449,24 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-1_nonadios_example$(EXEEXT): $(1_nonadios_example_OBJECTS) $(1_nonadios_example_DEPENDENCIES) 
-	@rm -f 1_nonadios_example$(EXEEXT)
-	$(1_nonadios_example_LINK) $(1_nonadios_example_OBJECTS) $(1_nonadios_example_LDADD) $(LIBS)
-2_adios_write$(EXEEXT): $(2_adios_write_OBJECTS) $(2_adios_write_DEPENDENCIES) 
-	@rm -f 2_adios_write$(EXEEXT)
-	$(2_adios_write_LINK) $(2_adios_write_OBJECTS) $(2_adios_write_LDADD) $(LIBS)
-3_adios_read$(EXEEXT): $(3_adios_read_OBJECTS) $(3_adios_read_DEPENDENCIES) 
-	@rm -f 3_adios_read$(EXEEXT)
-	$(3_adios_read_LINK) $(3_adios_read_OBJECTS) $(3_adios_read_LDADD) $(LIBS)
-4_adios_nfiles$(EXEEXT): $(4_adios_nfiles_OBJECTS) $(4_adios_nfiles_DEPENDENCIES) 
-	@rm -f 4_adios_nfiles$(EXEEXT)
-	$(4_adios_nfiles_LINK) $(4_adios_nfiles_OBJECTS) $(4_adios_nfiles_LDADD) $(LIBS)
+adios_global$(EXEEXT): $(adios_global_OBJECTS) $(adios_global_DEPENDENCIES) 
+	@rm -f adios_global$(EXEEXT)
+	$(adios_global_LINK) $(adios_global_OBJECTS) $(adios_global_LDADD) $(LIBS)
+adios_read_all_3D$(EXEEXT): $(adios_read_all_3D_OBJECTS) $(adios_read_all_3D_DEPENDENCIES) 
+	@rm -f adios_read_all_3D$(EXEEXT)
+	$(adios_read_all_3D_LINK) $(adios_read_all_3D_OBJECTS) $(adios_read_all_3D_LDADD) $(LIBS)
+adios_read_points$(EXEEXT): $(adios_read_points_OBJECTS) $(adios_read_points_DEPENDENCIES) 
+	@rm -f adios_read_points$(EXEEXT)
+	$(adios_read_points_LINK) $(adios_read_points_OBJECTS) $(adios_read_points_LDADD) $(LIBS)
+adios_read_subv$(EXEEXT): $(adios_read_subv_OBJECTS) $(adios_read_subv_DEPENDENCIES) 
+	@rm -f adios_read_subv$(EXEEXT)
+	$(adios_read_subv_LINK) $(adios_read_subv_OBJECTS) $(adios_read_subv_LDADD) $(LIBS)
+adios_read_wb_subpg$(EXEEXT): $(adios_read_wb_subpg_OBJECTS) $(adios_read_wb_subpg_DEPENDENCIES) 
+	@rm -f adios_read_wb_subpg$(EXEEXT)
+	$(adios_read_wb_subpg_LINK) $(adios_read_wb_subpg_OBJECTS) $(adios_read_wb_subpg_LDADD) $(LIBS)
+adios_write_all_3D$(EXEEXT): $(adios_write_all_3D_OBJECTS) $(adios_write_all_3D_DEPENDENCIES) 
+	@rm -f adios_write_all_3D$(EXEEXT)
+	$(adios_write_all_3D_LINK) $(adios_write_all_3D_OBJECTS) $(adios_write_all_3D_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -512,7 +573,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -611,19 +672,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp -r $(srcdir)/S3D $(builddir)
 
 # 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.
diff --git a/examples/C/transforms/S3D/alacrity.xml b/examples/C/transforms/S3D/alacrity.xml
new file mode 100644
index 0000000..3f12e1c
--- /dev/null
+++ b/examples/C/transforms/S3D/alacrity.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="S3D" coordination-communicator="comm">
+    <var name="NX" type="integer"/>
+    <var name="NY" type="integer"/>
+    <var name="NZ" type="integer"/>
+    <var name="DX" type="integer"/>
+    <var name="DY" type="integer"/>
+    <var name="DZ" type="integer"/>
+    <var name="OX" type="integer"/>
+    <var name="OY" type="integer"/>
+    <var name="OZ" type="integer"/>
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <global-bounds dimensions="NX,NY,NZ" offsets="OX,OY,OZ">
+       <var name="temp" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="alacrity"/>
+       <var name="uvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="alacrity"/>
+       <var name="vvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="alacrity"/>
+       <var name="wvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="alacrity"/>
+    </global-bounds>
+</adios-group>
+
+<method group="S3D" method="MPI"/>
+
+<buffer size-MB="128" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/examples/C/transforms/S3D/identity.xml b/examples/C/transforms/S3D/identity.xml
new file mode 100644
index 0000000..b113ab8
--- /dev/null
+++ b/examples/C/transforms/S3D/identity.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="S3D" coordination-communicator="comm" time-index="iter">
+    <var name="NX" type="integer"/>
+    <var name="NY" type="integer"/>
+    <var name="NZ" type="integer"/>
+    <var name="DX" type="integer"/>
+    <var name="DY" type="integer"/>
+    <var name="DZ" type="integer"/>
+    <var name="OX" type="integer"/>
+    <var name="OY" type="integer"/>
+    <var name="OZ" type="integer"/>
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <global-bounds dimensions="NX,NY,NZ" offsets="OX,OY,OZ">
+       <var name="temp" gwrite="t" type="double" dimensions="iter,DX,DY,DZ" transform="identity"/>
+       <var name="uvel" gwrite="t" type="double" dimensions="iter,DX,DY,DZ" transform="identity"/>
+       <var name="vvel" gwrite="t" type="double" dimensions="iter,DX,DY,DZ" transform="identity"/>
+       <var name="wvel" gwrite="t" type="double" dimensions="iter,DX,DY,DZ" transform="identity"/>
+    </global-bounds>
+</adios-group>
+
+<method group="S3D" method="MPI"/>
+
+<buffer size-MB="128" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/transforms/S3D/none.xml b/examples/C/transforms/S3D/none.xml
new file mode 100644
index 0000000..a33bf12
--- /dev/null
+++ b/examples/C/transforms/S3D/none.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="S3D" coordination-communicator="comm">
+    <var name="NX" type="integer"/>
+    <var name="NY" type="integer"/>
+    <var name="NZ" type="integer"/>
+    <var name="DX" type="integer"/>
+    <var name="DY" type="integer"/>
+    <var name="DZ" type="integer"/>
+    <var name="OX" type="integer"/>
+    <var name="OY" type="integer"/>
+    <var name="OZ" type="integer"/>
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <global-bounds dimensions="NX,NY,NZ" offsets="OX,OY,OZ">
+       <var name="temp" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="none"/>
+       <var name="uvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="none"/>
+       <var name="vvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="none"/>
+       <var name="wvel" gwrite="t" type="double" dimensions="DX,DY,DZ" transform="none"/>
+    </global-bounds>
+</adios-group>
+
+<method group="S3D" method="MPI"/>
+
+<buffer size-MB="128" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/C/transforms/adios_global.c b/examples/C/transforms/adios_global.c
new file mode 100644
index 0000000..c4b7030
--- /dev/null
+++ b/examples/C/transforms/adios_global.c
@@ -0,0 +1,53 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write a global array from N processors with gwrite
+ *
+ * How to run: mpirun -np <N> adios_global
+ * Output: adios_global.bp
+ * ADIOS config file: adios_global.xml
+ *
+*/
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+int main (int argc, char ** argv)
+{
+    char        filename [256];
+    int         rank, size, i;
+    int         NX = 10;
+    double      t[NX];
+    MPI_Comm    comm = MPI_COMM_WORLD;
+
+    /* ADIOS variables declarations for matching gwrite_temperature.ch */
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    for (i = 0; i < NX; i++)
+        t[i] = rank*NX + i;
+
+    strcpy (filename, "adios_global.bp");
+
+    adios_init ("adios_global.xml", comm);
+
+    adios_open (&adios_handle, "temperature", filename, "w", comm);
+    #include "gwrite_temperature.ch"
+    adios_close (adios_handle);
+
+        MPI_Barrier (comm);
+
+    adios_finalize (rank);
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/transforms/adios_global.xml b/examples/C/transforms/adios_global.xml
new file mode 100644
index 0000000..a4d381b
--- /dev/null
+++ b/examples/C/transforms/adios_global.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+  <adios-group name="temperature" stats="On">
+    <var name="NX" type="integer"/>
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <global-bounds dimensions="size,NX" offsets="rank,0">
+       <var name="temperature" gwrite="t" type="double" dimensions="1,NX" transform="identity"/>
+    </global-bounds>
+    <attribute name="temperature/description" 
+               value="Global array written from 'size' processes" 
+               type="string"/>
+  </adios-group>
+
+  <method group="temperature" method="MPI">stripe_count=1;stripe_size=10485760;num_aggregators=2;merging_pgs=0;num_ost=2</method>
+
+  <buffer size-MB="2" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/examples/C/transforms/adios_read_all_3D.c b/examples/C/transforms/adios_read_all_3D.c
new file mode 100644
index 0000000..197faf0
--- /dev/null
+++ b/examples/C/transforms/adios_read_all_3D.c
@@ -0,0 +1,259 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: read global arrays from a BP file
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+#include <stdint.h>
+
+#define BLOCKING 1
+#define NON_BLOCKING 0
+
+#define Z 1
+#define Y 2
+#define X 4
+
+#define NTIMES 1
+
+#define RS_SCALE (1.0 / (1.0 + RAND_MAX))
+
+double drand (void) 
+{
+    double d;
+    do {
+       d = ((((rand () * RS_SCALE) + rand ()) * RS_SCALE + rand ()) * RS_SCALE + rand ()) * RS_SCALE; 
+    } while (d >= 1); /* Round off */ 
+    return d;
+}  
+
+uint64_t irand (uint64_t x) 
+{
+    return ((x) * drand ());
+}
+
+void read_points (char filename [], char varname [], uint32_t npoints)
+{
+    printf ("===%s===\n", __FUNCTION__);
+    // What are the first 2 dimensions
+    enum ADIOS_READ_METHOD  method   = ADIOS_READ_METHOD_BP;
+    MPI_Comm                comm     = MPI_COMM_WORLD;
+    ADIOS_SELECTION         *sel1;
+    ADIOS_FILE              *f       = adios_read_open_file (filename, method, comm);
+    ADIOS_VARINFO           *varinfo = adios_inq_var (f, varname);
+
+    assert (varinfo);
+
+    uint32_t                nblocks = varinfo->sum_nblocks;
+    uint32_t                i       = 0;
+    uint32_t                j       = 0;
+    uint32_t                t       = 0;
+    uint64_t                *points = 0;
+    double                  *data   = 0;
+
+    uint32_t                ndim = varinfo->ndim;
+
+    // This code should only work for 3D data
+    // assert (varinfo->ndim == 3);
+
+    /*
+    printf ("Dimensions for %s are %s: ", filename, varname);
+    for (i = 0; i < varinfo->ndim; i ++) {
+        printf ("%d ", varinfo->dims [i]);        
+    }
+    printf ("\n");
+    printf ("Timesteps: %d\n", f->last_step + 1);
+    assert (f->last_step == 0);
+    */
+ 
+    data    = (double *) malloc (npoints * sizeof (double));
+    points  = (uint64_t *) malloc (npoints * varinfo->ndim * sizeof (uint64_t));
+
+    assert (data);
+    assert (points);
+
+    for (t = 0; t < NTIMES; t ++) {
+        // Generate a random point 
+        for (i = 0; i < npoints; i ++) {
+            for (j = 0; j < ndim; j ++) {
+                points [i * ndim + j] = irand (varinfo->dims [j]);
+            }
+        }
+
+        sel1 = adios_selection_points (ndim, npoints, points);
+        
+        adios_schedule_read (f, sel1, varname, 0, 1, data);
+        adios_perform_reads (f, BLOCKING);
+   
+        // Print the points. For double checking 
+        /*
+        for (i = 0; i < npoints; i++) {
+            printf("(%llu,%llu) = %.0lf\n", points [i * ndim + 0], points [i * ndim + 1], data [i]);
+        }
+        */
+        adios_selection_delete (sel1);
+    }
+
+    free (points);
+    free (data);
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+}
+
+void read_bounding_box (char filename [], char varname [], uint64_t counts [], uint8_t plane, uint8_t is_aligned)
+{
+    printf ("===%s===\n", __FUNCTION__);
+    // What are the first 2 dimensions
+    enum ADIOS_READ_METHOD  method   = ADIOS_READ_METHOD_BP;
+    MPI_Comm                comm     = MPI_COMM_WORLD;
+   
+    ADIOS_SELECTION         *sel1;
+
+    ADIOS_FILE              *f       = adios_read_open_file (filename, method, comm);
+    ADIOS_VARINFO           *varinfo = adios_inq_var (f, varname);
+
+    assert (varinfo);
+    adios_inq_var_blockinfo (f, varinfo);
+
+    uint32_t                nblocks = varinfo->sum_nblocks;
+   
+    uint32_t                i       = 0;
+    uint32_t                j       = 0;
+    uint32_t                t       = 0;
+    uint64_t                *starts = 0;
+    double                  *data   = 0;
+
+    uint32_t                ndim = varinfo->ndim;
+    uint64_t                *pg_dims = varinfo->blockinfo [0].count;
+    uint64_t                npoints = 1;
+
+    // This code should only work for 3D data
+    // assert (varinfo->ndim == 3);
+
+    printf ("%lu dimensions for %s are %s: ", ndim, filename, varname);
+    for (i = 0; i < varinfo->ndim; i ++) {
+        printf ("%d ", varinfo->dims [i]);        
+    }
+    printf ("\n");
+    printf ("Timesteps: %d\n", f->last_step + 1);
+
+    // assert (f->last_step == 0);
+
+    #if 1 
+        counts [0] = 64;
+        counts [1] = 64;
+        counts [2] = 64;
+    #endif
+
+    for (j = 0; j < ndim; j ++) {
+        npoints *= counts [j];
+    }
+
+    printf ("npoints: %d\n", npoints);
+
+    data    = (double *) malloc (npoints * sizeof (double));
+    starts  = (uint64_t *) malloc (varinfo->ndim * sizeof (uint64_t));
+
+    assert (data);
+    assert (starts);
+
+    assert (npoints);
+
+    for (t = 0; t < NTIMES; t ++) {
+        // Generate a random point 
+        for (j = 0; j < ndim; j ++) {
+            if (plane & (1 << j)) {
+                starts [j] = irand (varinfo->dims [j] - counts [j]);
+            } else {
+                starts [j] = irand (varinfo->dims [j] - 1);
+            }
+        }
+
+        if (is_aligned == 1) {
+            // I need to align every dimension
+            for (j = 0; j < ndim; j ++) {
+                if (starts [j] % pg_dims [j] == 0) continue;
+                starts [j] = (starts [j] / pg_dims [j]) * pg_dims [j];
+            }
+        } else {
+            for (j = 0; j < ndim; j ++) {
+                if ((pg_dims [j] > 1) && (starts [j] % pg_dims [j] == 0)) {
+                    starts [j] = 1 + irand (pg_dims [j] - 1); 
+                }
+            }
+        }
+
+        #if 1 
+            printf ("Starts: ");
+            starts [0] = 0;
+            starts [1] = 128;
+            starts [2] = 28;
+            
+            for (j = 0; j < ndim; j ++) {
+                printf ("%lu ", starts [j]);
+            }
+            printf ("\n");
+
+            printf ("Counts: ");
+            starts [0] = 0;
+            for (j = 0; j < ndim; j ++) {
+                printf ("%lu ", counts [j]);
+            }
+            printf ("\n");
+        #endif
+
+        sel1 = adios_selection_boundingbox (varinfo->ndim, starts, counts);
+        
+        adios_schedule_read (f, sel1, varname, 0, 1, data);
+        adios_perform_reads (f, BLOCKING);
+        
+        adios_selection_delete (sel1);
+    }
+
+    free (starts);
+    free (data);
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+}
+
+/*
+ * Main assumption is that there is going to be only a single timestep and this
+ * is for a 3D data. 
+ * (1) Read random points
+ * (2) Read random XY plane
+ * (3) Read random YZ plane
+ * (4) Read random XZ plane
+ * (5) Read random XYZ subvolume
+ */
+int main (int argc, char *argv[]) 
+{
+    MPI_Init (&argc, &argv);
+    srand (time (NULL));
+    uint64_t counts [] = {1, 10, 10};
+
+    if (argc >= 2) {
+        read_bounding_box (argv [1], argv [2], counts, Y + Z, 1);
+        // read_points (argv [1], argv [2], 10);
+    } else {
+        printf ("Usage: <%s> <filename> <variable name>\n", argv [0]);
+    }
+
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/transforms/adios_read_points.c b/examples/C/transforms/adios_read_points.c
new file mode 100644
index 0000000..a216261
--- /dev/null
+++ b/examples/C/transforms/adios_read_points.c
@@ -0,0 +1,86 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: read global arrays from a BP file
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+
+#ifdef WITH_NCSU_TIMER
+#include <timer.h>
+#endif
+
+int main (int argc, char ** argv)
+{
+    char        filename [256];
+    int         i, j, datasize, if_any, ndim;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+    ADIOS_SELECTION * sel1, * sel2;
+    ADIOS_VARCHUNK * chunk = 0;
+    double * data = NULL;
+    uint64_t start[2], count[2], npoints, * points;
+
+    MPI_Init (&argc, &argv);
+#ifdef WITH_NCSU_TIMER
+    timer_init();
+#endif
+    adios_read_init_method (method, comm, NULL);
+
+    ADIOS_FILE * f = adios_read_open_file ("adios_global.bp", method, comm);
+    ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
+    if (varinfo)
+    {
+        int nranks;
+
+        ndim = varinfo->ndim;
+        assert(ndim == 2);
+
+        nranks = varinfo->dims[0];
+        assert(varinfo->dims[1] == 10);
+
+        datasize = (nranks / 2) * varinfo->dims[1] * sizeof(double);
+        data = malloc (datasize);
+
+        npoints = 2 * nranks;
+        points = malloc(npoints * ndim * sizeof(uint64_t));
+        for (i = 0; i < npoints; i += 2) {
+            points[i * ndim + 0] = i/2; // rank/row
+            points[i * ndim + 1] = 2; // col
+            points[(i+1) * ndim + 0] = i/2; // rank/row
+            points[(i+1) * ndim + 1] = 6; // col
+        }
+
+        sel1 = adios_selection_points(ndim, npoints, points);
+
+        adios_schedule_read (f, sel1, "temperature", 0, 1, data);
+        adios_perform_reads (f, 1);
+
+        printf("Points read (columns 2 and 6 in all rows):\n");
+        for (i = 0; i < npoints; i++) {
+            printf("(%llu,%llu) = %.0lf\n", points[i*ndim+0], points[i*ndim+1], data[i]);
+        }
+
+        adios_selection_delete (sel1);
+    }
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+#ifdef WITH_NCSU_TIMER
+    timer_finalize();
+#endif
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/transforms/adios_read_subv.c b/examples/C/transforms/adios_read_subv.c
new file mode 100644
index 0000000..74f3c48
--- /dev/null
+++ b/examples/C/transforms/adios_read_subv.c
@@ -0,0 +1,99 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: read global arrays from a BP file
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef WITH_NCSU_TIMER
+#include <timer.h>
+#endif
+#include "mpi.h"
+#include "adios_read.h"
+
+int main (int argc, char ** argv)
+{
+    char        filename [256];
+    int         i, j, datasize, if_any;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+    ADIOS_SELECTION * sel1, * sel2;
+    ADIOS_VARCHUNK * chunk = 0;
+    double * data = NULL;
+    uint64_t start[2], count[2], npoints, * points;
+
+    MPI_Init (&argc, &argv);
+#ifdef WITH_NCSU_TIMER
+    timer_init();
+#endif
+
+    adios_read_init_method (method, comm, NULL);
+
+    ADIOS_FILE * f = adios_read_open_file ("adios_global.bp", method, comm);
+    ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
+    if (varinfo)
+    {
+        int nranks;
+
+        assert(varinfo->ndim == 2);
+
+        nranks = varinfo->dims[0];
+        assert(nranks % 4 == 0);
+        assert(varinfo->dims[1] == 10);
+
+        datasize = (nranks / 2) * varinfo->dims[1] * sizeof(double);
+        data = malloc (datasize);
+
+        start[0] = nranks / 4;
+        start[1] = 2;
+        count[0] = nranks / 2;
+        count[1] = 6;
+
+        sel1 = adios_selection_boundingbox (varinfo->ndim, start, count);
+
+        adios_schedule_read (f, sel1, "temperature", 0, 1, data);
+        adios_perform_reads (f, 1);
+
+        printf("Subvolume at (%llu,%llu) of size (%llu,%llu):\n", start[0], start[1], count[0], count[1]);
+        for (i = 0; i < count[0]; i++) {
+            printf("[ ");
+            for (j = 0; j < count[1]; j++) {
+                printf("%.0lf ", data[i * count[1] + j]);
+            }
+            printf("]\n");
+        }
+
+        adios_selection_delete (sel1);
+    }
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+
+
+#ifdef WITH_NCSU_TIMER
+    printf("[TIMERS] ");
+    timer_result_t *results = timer_get_results_sorted();
+    for (i = 0; i < timer_get_num_timers(); i++) {
+        printf("%s: %0.4lf ", results[i].name, results[i].time);
+    }
+    printf("\n");
+    free(results);
+#endif
+
+#ifdef WITH_NCSU_TIMER
+    timer_finalize();
+#endif
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/transforms/adios_read_wb_subpg.c b/examples/C/transforms/adios_read_wb_subpg.c
new file mode 100644
index 0000000..86e2fc1
--- /dev/null
+++ b/examples/C/transforms/adios_read_wb_subpg.c
@@ -0,0 +1,91 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: read global arrays from a BP file
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "mpi.h"
+#include "adios_read.h"
+
+#ifdef WITH_NCSU_TIMER
+#include <timer.h>
+#endif
+
+int main (int argc, char ** argv)
+{
+    char        filename [256];
+    int         i, j, datasize, if_any, ndim;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    enum ADIOS_READ_METHOD method = ADIOS_READ_METHOD_BP;
+    ADIOS_SELECTION * wbsel, * sel2;
+    ADIOS_VARCHUNK * chunk = 0;
+    double * data = NULL;
+    uint64_t start[2], count[2], npoints, * points;
+
+    MPI_Init (&argc, &argv);
+#ifdef WITH_NCSU_TIMER
+    timer_init();
+#endif
+
+    adios_read_init_method (method, comm, NULL);
+
+    ADIOS_FILE * f = adios_read_open_file ("adios_global.bp", method, comm);
+    ADIOS_VARINFO * varinfo = adios_inq_var (f, "temperature");
+    adios_inq_var_blockinfo(f, varinfo);
+    if (varinfo)
+    {
+        int nranks;
+
+        ndim = varinfo->ndim;
+        assert(ndim == 2);
+
+        nranks = varinfo->dims[0];
+        assert(varinfo->dims[1] == 10);
+
+        assert(varinfo->nsteps >= 1);
+        assert(varinfo->nblocks[0] >= 3);
+        assert(varinfo->blockinfo[2].count[0] == 1);
+        assert(varinfo->blockinfo[2].count[1] == 10);
+        assert(varinfo->blockinfo[2].start[0] == 2);
+        assert(varinfo->blockinfo[2].start[1] == 0);
+
+        datasize = 1 * 6 * sizeof(double);
+        data = (double *)malloc(datasize);
+
+        wbsel = adios_selection_writeblock(2);
+        wbsel->u.block.is_sub_pg_selection = 1;
+        wbsel->u.block.element_offset = 2;
+        wbsel->u.block.nelements = 6;
+
+        adios_schedule_read (f, wbsel, "temperature", 0, 1, data);
+        adios_perform_reads (f, 1);
+
+        printf("Sub-PG writeblock for block %d reading elements in linear range [%llu, %llu):\n",
+               wbsel->u.block.index, wbsel->u.block.element_offset, wbsel->u.block.element_offset + wbsel->u.block.nelements);
+        printf("[ ");
+        for (i = 0; i < wbsel->u.block.nelements; i++)
+            printf("%.0lf ", data[i]);
+        printf("]\n");
+
+        adios_selection_delete (wbsel);
+    }
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+#ifdef WITH_NCSU_TIMER
+    timer_finalize();
+#endif
+    MPI_Finalize ();
+    return 0;
+}
diff --git a/examples/C/transforms/adios_write_all_3D.c b/examples/C/transforms/adios_write_all_3D.c
new file mode 100644
index 0000000..ebdf3ac
--- /dev/null
+++ b/examples/C/transforms/adios_write_all_3D.c
@@ -0,0 +1,198 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write a global array from N processors with gwrite
+ *
+ * How to run: mpirun -np <N> adios_global
+ * Output: adios_global.bp
+ * ADIOS config file: adios_global.xml
+ *
+*/
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <core/adios_internals.h>
+
+#define MAX_DIMS 5
+
+struct dimensions {
+    uint8_t ndims;
+    uint32_t dims [MAX_DIMS];
+    uint8_t element_size;
+};
+
+typedef struct dimensions dim_t;
+
+// Given the input file, you want to divide the data into different PG sizes,
+// with different transforms
+
+void adios_write_pg (char transform [], char input_dir [], uint8_t nvars, char **vars,
+                       dim_t data_dim, dim_t pg_dim)
+{
+    int         rank, size;
+    int         i = 0;
+    int         t = 0;
+    uint32_t    pg_var_size = pg_dim.element_size;
+    uint32_t    data_var_size = data_dim.element_size;
+
+    uint32_t    ntimesteps = 1;
+    char        varfile [nvars][256];
+    FILE        *fp [nvars];
+
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+
+    char input_xml [256];
+    char output_bp_file [256];
+
+    MPI_Comm    comm = MPI_COMM_WORLD;
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    printf ("pg_var_size = %u, data_var_size = %u\n", pg_var_size, data_var_size);
+    // Get the var size and the pg size
+    for (i = 0; i < pg_dim.ndims; i ++) {
+        pg_var_size *= pg_dim.dims [i];
+    }
+
+    for (i = 0; i < data_dim.ndims; i ++) {
+        data_var_size *= data_dim.dims [i];
+    }
+    printf ("pg_var_size = %u, data_var_size = %u\n", pg_var_size, data_var_size);
+
+    // Read the XML file specific to this transform and PG size
+    sprintf (input_xml, "%s/%s.xml", input_dir, transform);
+    adios_init (input_xml, comm);
+
+    // Name the output bp file based on the name of the transform
+    sprintf (output_bp_file, "%s/%s_%d.bp", input_dir, transform, pg_var_size);
+
+    size = ntimesteps = data_var_size / pg_var_size;
+
+    // Open the input raw data file for each variable
+    for (i = 0; i < nvars; i ++) {
+        sprintf (varfile [i], "%s/%s", input_dir, vars [i]);
+        fp [i] = fopen (varfile [i], "rb");
+
+        assert (fp [i] != 0);
+    }
+
+    // Calculate the length, and allocate memory
+    uint32_t NX = data_dim.dims [0];
+    uint32_t NY = data_dim.dims [1];
+    uint32_t NZ = data_dim.dims [2];
+    uint32_t DX = pg_dim.dims [0];
+    uint32_t DY = pg_dim.dims [1];
+    uint32_t DZ = pg_dim.dims [2];
+
+    char *pg_var_data = (char *) malloc (pg_var_size);
+
+    printf ("ntimesteps = %d, NX = %u, NY = %u, NZ = %u\n", ntimesteps, NX, NY, NZ);
+
+    assert (rank == 0);
+
+    adios_groupsize = 4 \
+                    + 4 \
+                    + 4 * 3 \
+                    + 4 * 3 \
+                    + 4 * 3 \
+                    + 8 * (1) * (DX * DY * DZ) \
+                    + 8 * (1) * (DX * DY * DZ) \
+                    + 8 * (1) * (DX * DY * DZ) \
+                    + 8 * (1) * (DX * DY * DZ) ;
+
+
+    for (t = 0; t < 2; t ++) {
+
+        uint32_t OX = (t / ((data_dim.dims [1] * data_dim.dims [2]) / (pg_dim.dims [1] * pg_dim.dims [2]))) * pg_dim.dims [0];
+        uint32_t OY = ((t / (data_dim.dims [2] / pg_dim.dims [2])) * pg_dim.dims [1]) % data_dim.dims [1];
+        uint32_t OZ = (t * pg_dim.dims [2]) % data_dim.dims [2];
+
+        rank = t;
+
+        adios_pin_timestep(1);
+        if (t == 0) {
+            adios_open (&adios_handle, "S3D", output_bp_file, "w", comm);
+        } else {
+            adios_open (&adios_handle, "S3D", output_bp_file, "a", comm);
+        }
+
+        // OX = OY = OZ = 0;
+        // NX = DX;
+        // NY = DY;
+        // NZ = DZ;
+        adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+
+        adios_write (adios_handle, "NX", &NX);
+        adios_write (adios_handle, "NY", &NY);
+        adios_write (adios_handle, "NZ", &NZ);
+        adios_write (adios_handle, "DX", &DX);
+        adios_write (adios_handle, "DY", &DY);
+        adios_write (adios_handle, "DZ", &DZ);
+        adios_write (adios_handle, "OX", &OX);
+        adios_write (adios_handle, "OY", &OY);
+        adios_write (adios_handle, "OZ", &OZ);
+        adios_write (adios_handle, "size", &size);
+        adios_write (adios_handle, "rank", &rank);
+
+        printf ("Start: %u %u %u\n", OX, OY, OZ);
+        // fread and adios_write for each variable
+        for (i = 0; i < nvars; i ++) {
+            fread (pg_var_data, sizeof (char), pg_var_size, fp [i]);
+            adios_write (adios_handle, vars [i], pg_var_data);
+        }
+
+        adios_close (adios_handle);
+    }
+
+    free (pg_var_data);
+    for (i = 0; i < nvars; i ++) {
+        fclose (fp [i]);
+    }
+
+    adios_finalize (rank);
+
+    return ;
+}
+
+int main (int argc, char ** argv)
+{
+    MPI_Init (&argc, &argv);
+
+    dim_t data_dim;
+    dim_t pg_dim;
+
+    data_dim.ndims = 3;
+    data_dim.dims [0] = 1024;
+    data_dim.dims [1] = 512;
+    data_dim.dims [2] = 512;
+    data_dim.element_size = 8;
+
+    pg_dim.ndims = 3;
+
+    pg_dim.dims [0] = 128;
+    pg_dim.dims [1] = 128;
+    pg_dim.dims [2] = 128;
+    pg_dim.element_size = 8;
+
+    char *vars [4] = {"temp", "uvel", "vvel", "wvel"};
+    if (argc >= 2) {
+        adios_write_pg (argv [2], argv [1], 4, vars, data_dim, pg_dim);
+    } else {
+        printf ("Usage: %s <base directory> <transform> \n", argv [0]);
+    }
+
+    MPI_Finalize ();
+    return 0;
+}
+
diff --git a/examples/C/transforms/gread_temperature.ch b/examples/C/transforms/gread_temperature.ch
new file mode 100644
index 0000000..4c16e85
--- /dev/null
+++ b/examples/C/transforms/gread_temperature.ch
@@ -0,0 +1,4 @@
+s = adios_selection_writeblock (rank);
+adios_schedule_read (fp, s, "temperature", 1, 1, t);
+adios_perform_reads (fp, 1);
+adios_selection_delete (s);
diff --git a/examples/C/manual/gwrite_temperature.ch b/examples/C/transforms/gwrite_temperature.ch
similarity index 51%
copy from examples/C/manual/gwrite_temperature.ch
copy to examples/C/transforms/gwrite_temperature.ch
index d47b677..1c8b279 100644
--- a/examples/C/manual/gwrite_temperature.ch
+++ b/examples/C/transforms/gwrite_temperature.ch
@@ -1,5 +1,9 @@
 adios_groupsize = 4 \
-                + 8 * (NX);
+                + 4 \
+                + 4 \
+                + 8 * (1) * (NX);
 adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
 adios_write (adios_handle, "NX", &NX);
+adios_write (adios_handle, "size", &size);
+adios_write (adios_handle, "rank", &rank);
 adios_write (adios_handle, "temperature", t);
diff --git a/examples/Fortran/Makefile.in b/examples/Fortran/Makefile.in
index 69950f5..50931d5 100644
--- a/examples/Fortran/Makefile.in
+++ b/examples/Fortran/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = examples/Fortran
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/examples/Fortran/arrays/Makefile.am b/examples/Fortran/arrays/Makefile.am
index 92fa8d3..56d9b87 100644
--- a/examples/Fortran/arrays/Makefile.am
+++ b/examples/Fortran/arrays/Makefile.am
@@ -3,6 +3,9 @@ INCLUDES += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = arrays_write arrays_read
 
 arrays_write_SOURCES = arrays_write.F90
diff --git a/examples/Fortran/arrays/Makefile.in b/examples/Fortran/arrays/Makefile.in
index 5d3dea9..78cb9d1 100644
--- a/examples/Fortran/arrays/Makefile.in
+++ b/examples/Fortran/arrays/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
 subdir = examples/Fortran/arrays
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -117,12 +125,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -185,6 +202,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -257,7 +277,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -482,7 +511,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -581,19 +610,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/Fortran/arrays/arrays.xml b/examples/Fortran/arrays/arrays.xml
index 1b5c6b7..70115cf 100644
--- a/examples/Fortran/arrays/arrays.xml
+++ b/examples/Fortran/arrays/arrays.xml
@@ -1,16 +1,16 @@
 <?xml version="1.0"?>
 <adios-config host-language="Fortran">
 
-    <adios-group name="arrays" coordination-communicator="comm">
+    <adios-group name="arrays">
         <var name="NX" type="integer"/>
         <var name="NY" type="integer"/>
         <var name="var_double_2Darray"  gwrite="t"  type="double"  dimensions="NX,NY"/>
         <var name="var_int_1Darray"     gwrite="p"  type="integer" dimensions="NX"/>
     </adios-group>
 
-<method group="arrays"  method="MPI"/>
+    <method group="arrays"  method="MPI"/>
 
-<buffer size-MB="20" allocate-time="now"/>
+    <buffer size-MB="20" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/Fortran/global-array-time/Makefile.am b/examples/Fortran/global-array-time/Makefile.am
index 4777406..c6e8470 100644
--- a/examples/Fortran/global-array-time/Makefile.am
+++ b/examples/Fortran/global-array-time/Makefile.am
@@ -3,6 +3,9 @@ INCLUDES += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = adios_globaltime
 
 adios_globaltime_SOURCES = adios_globaltime.F90
diff --git a/examples/Fortran/global-array-time/Makefile.in b/examples/Fortran/global-array-time/Makefile.in
index 61a5c2d..e1d57b9 100644
--- a/examples/Fortran/global-array-time/Makefile.in
+++ b/examples/Fortran/global-array-time/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = adios_globaltime$(EXEEXT)
 subdir = examples/Fortran/global-array-time
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -110,12 +118,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -178,6 +195,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -250,7 +270,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -469,7 +498,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -568,19 +597,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/Fortran/global-array-time/adios_globaltime.xml b/examples/Fortran/global-array-time/adios_globaltime.xml
index e383612..c7cc978 100644
--- a/examples/Fortran/global-array-time/adios_globaltime.xml
+++ b/examples/Fortran/global-array-time/adios_globaltime.xml
@@ -1,24 +1,31 @@
 <?xml version="1.0"?>
-<adios-config host-language="Fortran">
-    <adios-group name="restart" coordination-communicator="comm" time-index="iter">
+<adios-config host-language="Fortran"> 
+  <!--
+      There are no tricks here compared to the global-array example
+      to have multiple steps of an array recorded in a file.
+      Just do append in the code itself ('a' mode in adios_open())
+      Use the 'bpls' utils to see how multiple steps of an array
+      is represented. 
+  -->
+  <adios-group name="restart">
     <var name="NX" type="integer"/>
     <var name="NY" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="NX,size" offsets="0,rank">
-       <var name="temperature" gwrite="t" type="double" dimensions="NX,1,iter"/>
+       <var name="temperature" gwrite="t" type="double" dimensions="NX,1"/>
     </global-bounds>
     <global-bounds dimensions="NY,size" offsets="0,rank">
-       <var name="pressure" gwrite="p" type="double" dimensions="NY,1,iter"/>
+       <var name="pressure" gwrite="p" type="double" dimensions="NY,1"/>
     </global-bounds>
-    <attribute name="description" path="/temperature" 
+    <attribute name="temperature/description" 
         value="Global array written from 'size' processes over several timesteps" 
         type="string"/>
-</adios-group>
+  </adios-group>
 
-<method group="restart" method="MPI"/>
+  <method group="restart" method="MPI"/>
 
-<buffer size-MB="2" allocate-time="now"/>
+  <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/Fortran/global-array/Makefile.am b/examples/Fortran/global-array/Makefile.am
index 7b2c7ac..eca4851 100644
--- a/examples/Fortran/global-array/Makefile.am
+++ b/examples/Fortran/global-array/Makefile.am
@@ -3,6 +3,9 @@ INCLUDES += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = adios_global adios_global_no_xml no_xml_write_byid
 
 adios_global_SOURCES = adios_global.F90
diff --git a/examples/Fortran/global-array/Makefile.in b/examples/Fortran/global-array/Makefile.in
index 10c2c7d..a7ce745 100644
--- a/examples/Fortran/global-array/Makefile.in
+++ b/examples/Fortran/global-array/Makefile.in
@@ -39,7 +39,11 @@ noinst_PROGRAMS = adios_global$(EXEEXT) adios_global_no_xml$(EXEEXT) \
 subdir = examples/Fortran/global-array
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -127,12 +135,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -195,6 +212,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -267,7 +287,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -499,7 +528,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -598,19 +627,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/Fortran/global-array/adios_global.xml b/examples/Fortran/global-array/adios_global.xml
index e8382ff..ba89106 100644
--- a/examples/Fortran/global-array/adios_global.xml
+++ b/examples/Fortran/global-array/adios_global.xml
@@ -1,18 +1,21 @@
 <?xml version="1.0"?>
 <adios-config host-language="Fortran">
-    <adios-group name="temperature" coordination-communicator="comm">
+  <adios-group name="temperature">
     <var name="NX" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
     <global-bounds dimensions="NX,size" offsets="0,rank">
-       <var name="temperature" gwrite="t" type="double" dimensions="NX,1"/>
+         <var name="temperature" gwrite="t" 
+              type="double" dimensions="NX,1"/>
     </global-bounds>
-    <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
-</adios-group>
+    <attribute name="temperature/description" 
+               value="Global array written from 'size' processes" 
+               type="string"/>
+  </adios-group>
 
-<method group="temperature" method="MPI"/>
+  <method group="temperature" method="MPI"/>
 
-<buffer size-MB="2" allocate-time="now"/>
+  <buffer size-MB="2" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/Fortran/scalars/Makefile.am b/examples/Fortran/scalars/Makefile.am
index a75b440..025167f 100644
--- a/examples/Fortran/scalars/Makefile.am
+++ b/examples/Fortran/scalars/Makefile.am
@@ -3,6 +3,9 @@ INCLUDES += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS = scalars_write scalars_read
 
 scalars_write_SOURCES = scalars_write.F90
diff --git a/examples/Fortran/scalars/Makefile.in b/examples/Fortran/scalars/Makefile.in
index ff03677..163b0f7 100644
--- a/examples/Fortran/scalars/Makefile.in
+++ b/examples/Fortran/scalars/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = scalars_write$(EXEEXT) scalars_read$(EXEEXT)
 subdir = examples/Fortran/scalars
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -117,12 +125,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -185,6 +202,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -257,7 +277,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -483,7 +512,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -582,19 +611,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/examples/Fortran/scalars/scalars.xml b/examples/Fortran/scalars/scalars.xml
index f7a70bf..6da498c 100644
--- a/examples/Fortran/scalars/scalars.xml
+++ b/examples/Fortran/scalars/scalars.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <adios-config host-language="Fortran">
 
-    <adios-group name="scalars" coordination-communicator="comm">
+    <adios-group name="scalars">
         <!-- name    defines the variable name in the output file
              gwrite  defines the variable name in the code to write out
              gread   defines the variable name in the code to read the value into
@@ -22,9 +22,9 @@
         <var name="var_double_complex"  gwrite="v13" gread="v13" type="double complex"/>
     </adios-group>
 
-<method group="scalars" method="MPI"/>
+    <method group="scalars" method="MPI"/>
 
-<buffer size-MB="20" allocate-time="now"/>
+    <buffer size-MB="20" allocate-time="now"/>
 
 </adios-config>
 
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 6a6f84b..03baa51 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = examples
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/examples/coupling/.gitignore b/examples/coupling/.gitignore
new file mode 100644
index 0000000..00d2b36
--- /dev/null
+++ b/examples/coupling/.gitignore
@@ -0,0 +1,4 @@
+coupling_reader_2D
+coupling_reader_2d_comm.mod
+coupling_writer_2D
+coupling_writer_2d_comm.mod
diff --git a/examples/coupling/coupling_reader_2D.F90 b/examples/coupling/coupling_reader_2D.F90
index 67ca5be..20f10b9 100644
--- a/examples/coupling/coupling_reader_2D.F90
+++ b/examples/coupling/coupling_reader_2D.F90
@@ -93,7 +93,7 @@ program coupling
     if (rank==0)    print *, " Input file: "//trim(infn)
 
 
-    call adios_read_init_method (read_method, group_comm, "verbose=3; app_id=2; poll_interval=1000", ierr);
+    call adios_read_init_method (read_method, group_comm, "verbose=4; app_id=2; poll_interval=1000", ierr);
     call adios_init("coupling_reader_2D.xml", group_comm, ierr)
     !call MPI_Barrier (group_comm, ierr)
 
@@ -103,7 +103,7 @@ program coupling
     call adios_read_open (inh, infn, read_method, group_comm, ADIOS_LOCKMODE_CURRENT, 180.0, ierr)
     if (ierr .ne. 0) then
         print '(" Failed to open stream: ",a)', infn
-        print '(" open stream ierr=: ",i)', ierr
+        print '(" open stream ierr=: ",i0)', ierr
         call exit(1)
     endif
 
@@ -159,6 +159,7 @@ subroutine readArrays()
     print '("rank=",i0,": Read in gdx and gdy, step",i0," from ",a)', rank, wts, trim(infn)
     call adios_get_scalar (inh,"gdx",gdx, ierr)
     call adios_get_scalar (inh,"gdy",gdy, ierr)
+    print '("rank=",i0,": Got scalars gdx ",i0," gdy ",i0)', rank, gdx, gdy
 
     ! Calculate the local x,y offsets
     if (read_mode == 0) then
diff --git a/examples/coupling/coupling_reader_2D.xml b/examples/coupling/coupling_reader_2D.xml
index 29c1422..98a19b2 100644
--- a/examples/coupling/coupling_reader_2D.xml
+++ b/examples/coupling/coupling_reader_2D.xml
@@ -3,20 +3,20 @@
 
   <!-- Group to write the whole array from a single processor -->
   <adios-group name="reader2D" coordination-communicator="group_comm">
-    <var name="rank" path="/info" type="integer"/>
-    <var name="gdx"  path="" type="integer"/>
-    <attribute name="description" path="/gdx" value="Global array size in x dimension"/>
-    <var name="gdy"  path="" type="integer"/>
-    <attribute name="description" path="/gdy" value="Global array size in y dimension"/>
-    <var name="ldx" path="/aux" type="integer"/>
-    <var name="ldy" path="/aux" type="integer"/>
-    <var name="ox" path="/aux" type="integer"/>
-    <var name="oy" path="/aux" type="integer"/>
+    <var name="rank" path="info" type="integer"/>
+    <var name="gdx" type="integer"/>
+    <attribute name="gdx/description" value="Global array size in x dimension"/>
+    <var name="gdy" type="integer"/>
+    <attribute name="gdy/description" value="Global array size in y dimension"/>
+    <var name="ldx" type="integer"/>
+    <var name="ldy" type="integer"/>
+    <var name="ox"  type="integer"/>
+    <var name="oy"  type="integer"/>
 
     <!-- 2D array to write with block,block decomposition -->
     <global-bounds dimensions="gdx,gdy" offsets="ox,oy">
-        <var name="xy"  path="" type="double" dimensions="ldx,ldy"/>
-        <var name="xy2" path="" type="double" dimensions="ldx,ldy"/>
+        <var name="xy"  type="double" dimensions="ldx,ldy"/>
+        <var name="xy2" type="double" dimensions="ldx,ldy"/>
     </global-bounds>
   </adios-group>
 
diff --git a/examples/coupling/coupling_writer_2D.xml b/examples/coupling/coupling_writer_2D.xml
index 9882777..2583751 100644
--- a/examples/coupling/coupling_writer_2D.xml
+++ b/examples/coupling/coupling_writer_2D.xml
@@ -2,29 +2,29 @@
 <adios-config host-language="Fortran">
   <adios-group name="writer2D">
 
-    <var name="nproc" path="/info" type="integer"/>
-    <attribute name="description" path="/info/nproc" value="Number of writers"/>
-    <var name="npx"   path="/info" type="integer"/>
-    <attribute name="description" path="/info/npx" value="Number of processors in x dimension"/>
-    <var name="npy"   path="/info" type="integer"/>
-    <attribute name="description" path="/info/npy" value="Number of processors in y dimension"/>
-
-    <var name="gdx"  path="" type="integer"/>
-    <attribute name="description" path="/gdx" value="Global array size in x dimension"/>
-    <var name="gdy"  path="" type="integer"/>
-    <attribute name="description" path="/gdy" value="Global array size in y dimension"/>
+    <var name="nproc" path="info" type="integer"/>
+    <attribute name="info/nproc/description" value="Number of writers"/>
+    <var name="npx"   path="info" type="integer"/>
+    <attribute name="info/npx/description" value="Number of processors in x dimension"/>
+    <var name="npy"   path="info" type="integer"/>
+    <attribute name="info/npy/description" value="Number of processors in y dimension"/>
+
+    <var name="gdx"  type="integer"/>
+    <attribute name="gdx/description" value="Global array size in x dimension"/>
+    <var name="gdy"  type="integer"/>
+    <attribute name="gdx/description" value="Global array size in y dimension"/>
 
     <!-- Auxiliary variables for global array indexing written (overwritten) by each process -->
-    <var name="ox"   path="/aux" type="integer"/>
-    <var name="oy"   path="/aux" type="integer"/>
-    <var name="ldx"  path="/aux" type="integer"/>
-    <var name="ldy"  path="/aux" type="integer"/>
+    <var name="ox"   type="integer"/>
+    <var name="oy"   type="integer"/>
+    <var name="ldx"  type="integer"/>
+    <var name="ldy"  type="integer"/>
 
     <!-- 2D array to write with block,block decomposition -->
     <global-bounds dimensions="gdx,gdy" offsets="ox,oy">
-        <var name="xy" path="" type="double" dimensions="ldx,ldy"/>
+        <var name="xy" type="double" dimensions="ldx,ldy"/>
     </global-bounds>
-    <attribute name="description" path="/xy" 
+    <attribute name="xy/description" 
                value="2D array with 2D decomposition"/>
 
   </adios-group>
@@ -33,9 +33,9 @@
        DART for memory-to-memory coupling or
        MPI  for file-based coupling
   -->
-  <transport group="writer2D" method="MPI">verbose=3</transport>
+  <!--transport group="writer2D" method="MPI">verbose=3</transport-->
   <!--transport group="writer2D" method="VAR_MERGE">io_method=MPI</transport-->
-  <!--transport group="writer2D" method="DATASPACES">verbose=3</transport-->
+  <transport group="writer2D" method="DATASPACES">verbose=3</transport>
   <!--transport group="writer2D" method="FLEXPATH">QUEUE_SIZE=10;verbose=3</transport-->
 
   <buffer size-MB="40" allocate-time="now"/>
diff --git a/examples/coupling/job1 b/examples/coupling/job1
new file mode 100755
index 0000000..cdb40ae
--- /dev/null
+++ b/examples/coupling/job1
@@ -0,0 +1,89 @@
+#!/bin/bash
+#PBS -A STF006
+#PBS -N genarray
+#PBS -j oe
+#PBS -l walltime=1:00:00,size=20
+## On jaguarpf, you need size=48 (4 nodes * 12cores for 4 apruns)
+
+#cd $PBS_O_WORKDIR
+
+# Number of writers (WPX*WPY = WRITEPROC)
+WRITEPROC=1
+WPX=1
+WPY=1
+# Number of staging processes, if staging is used
+STAGINGPROC=1
+# Number of readers (RPX*RPY = READPROC)
+READPROC=1
+RPX=1
+RPY=1
+
+
+let "WP=WPX*WPY"
+if [ $WP -ne $WRITEPROC ]; then
+    echo "WPX*WPY != WRITEPROC: " $WP and $WRITEPROC
+    exit 1
+fi
+
+let "RP=RPX*RPY"
+if [ $RP -ne $READPROC ]; then
+    echo "RPX*RPY != READPROC: " $RP and $READPROC
+    exit 1
+fi
+
+
+# clean-up
+rm -f log.* draw* core* conf dataspaces.conf srv.lck
+rm -f writer.bp reader_0*.bp
+
+METHOD=`grep "<transport .*method=" coupling_writer_2D.xml | sed -e "s/^.*method=\"\([A-Z]*\).*/\1/"`
+echo "The selected coupling method in coupling_writer_2D.xml is: $METHOD"
+
+if [ "x$METHOD" == "xDATASPACES" ]; then
+    READMETHOD="DATASPACES"
+    let "PROCALL=WRITEPROC+READPROC"
+
+    # Prepare config file for DataSpaces
+    echo "## Config file for DataSpaces
+ndim = 3
+dimx = 1000
+dimy = 1000
+dimz = 1000
+max_versions = 10
+" > dataspaces.conf
+
+    # Run DataSpaces
+    SERVER=/ccs/proj/e2e/dataspaces/sith/pgi/bin/dataspaces_server
+    echo "-- Start DataSpaces server "$SERVER" on $STAGINGPROC PEs, -s$STAGINGPROC -c$PROCALL"
+    mpirun -np $STAGINGPROC $SERVER -s$STAGINGPROC -c$PROCALL &> log.server &
+
+    ## Give some time for the servers to load and startup
+    sleep 1s
+    while [ ! -f conf ]; do
+        echo "-- File conf is not yet available from server. Sleep more"
+        sleep 1s
+    done
+    sleep 10s  # wait server to fill up the conf file
+
+    ## Export the main server config to the environment
+    while read line; do
+        export set "${line}"
+    done < conf
+
+    echo "-- DataSpaces Portals IDs: P2TNID = $P2TNID   P2TPID = $P2TPID"
+else
+    READMETHOD="FILE"
+fi
+
+# Start WRITER
+echo "-- Start WRITER on $WRITEPROC PEs"
+mpirun -np $WRITEPROC ./coupling_writer_2D $WPX $WPY 10 10 2 >& log.writer &
+
+# Start READER
+echo "-- Start READER on $READPROC PEs."
+mpirun -np $READPROC ./coupling_reader_2D $RPX $RPY $READMETHOD 1 >& log.reader &
+
+echo "-- Wait until all applications exit. Run ./check.sh to see status"
+wait
+rm -f conf
+
diff --git a/examples/coupling/read.F90 b/examples/coupling/read.F90
deleted file mode 100644
index de54b05..0000000
--- a/examples/coupling/read.F90
+++ /dev/null
@@ -1,320 +0,0 @@
-!  
-!  ADIOS is freely available under the terms of the BSD license described
-!  in the COPYING file in the top level directory of this source distribution.
-!
-!  Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
-!
-
-!
-!  Coupling writer/reader
-!
-!  Read a 2D array 
-!  to/from a file or from/to another coupling code using DataSpaces/ADIOS
-!
-!  npx * npy     processes write a 2D array, where each process writes an
-!  
-!  Data written
-!    xy          2D global array as received from the writers
-!    xy2         2D array with block,* decomp
-!
-!    All data are real*8 type
-!
-! (c) Oak Ridge National Laboratory, 2009
-! Author: Norbert Podhorszki
-!
-module coupling_reader_2D_comm
-    ! arguments
-    integer :: npx, npy, npz  ! # of processors in x-y-z direction
-    integer :: read_method    ! 0=bp, 1=hdf5, 2=dart, 3=dimes
-    integer :: read_mode      ! 0=whole array on each process
-                              ! 1=1D decomposition on 1st dim
-
-    integer :: nproc          ! number of processors
-
-    real*8, dimension(:,:),   allocatable :: xy, xy2
-
-    ! Offsets and sizes
-    integer :: ox, oy
-    integer :: ldx, ldy
-    integer :: gdx, gdy
-
-    ! MPI variables
-    integer :: group_comm, self_comm
-    integer :: rank
-    integer :: ierr
-
-    ! ADIOS variables
-    character (len=200) :: group
-    !character (len=6)   :: nprocstr
-    integer*8 :: adios_totalsize, adios_groupsize, adios_buf_size
-    integer   :: adios_err
-    integer*8 :: inh ! input file handle
-    integer*8 :: adios_handle ! output file handle (used by gwrite too)
-    character(len=256)  :: infn ! filename
-    
-    integer   :: wts  ! writer's output timestep index (read from 1,2...)
-    logical, parameter   :: dump_text = .true.
-
-end module coupling_reader_2D_comm
-
-
-program coupling
-    use coupling_reader_2D_comm
-    use adios_read_mod
-    use adios_write_mod
-    implicit none
-    include 'mpif.h'
-
-    call MPI_Init (ierr)
-    call MPI_Comm_dup (MPI_COMM_WORLD, group_comm, ierr)
-    call MPI_Comm_dup (MPI_COMM_SELF, self_comm, ierr)
-    call MPI_Comm_rank (MPI_COMM_WORLD, rank, ierr)
-    call MPI_Comm_size (group_comm, nproc , ierr)
-
-    call processArgs()
-    if (rank == 0) then
-        print '(" Process number        : ",i0," x ",i0)',  npx,npy
-        print '(" Method for reading: ",i0)',  read_method
-
-        if (nproc .ne. npx*npy) then
-            print '(" Error: Number of processors ",i0,"does not match N*M=",i0)', nproc, npx*npy
-            call exit(1)
-        endif
-    endif
-
-    write (infn,'("writer.bp")')
-    if (rank==0)    print *, " Input file: "//trim(infn)
-
-
-    call adios_read_init_method (read_method, group_comm, "verbose=2; app_id=2; poll_interval=1377", ierr);
-    call adios_init("coupling_reader_2D.xml", group_comm, ierr)
-    !call MPI_Barrier (group_comm, ierr)
-
-    !write (*,*) 'rank ', rank, "init completed"
-    !write (nprocstr,'(i0)') nproc
-
-    call adios_read_open_stream (inh, infn, read_method, group_comm, ADIOS_LOCKMODE_CURRENT, 30.0, ierr)
-    if (ierr .ne. 0) then
-        print '(" Failed to open stream: ",a)', infn
-        print '(" open stream ierr=: ",i0)', ierr
-        call exit(1)
-    endif
-
-    call MPI_Barrier (MPI_COMM_WORLD, ierr)
-    wts = 1  ! start reading from writer's 1st step
-    do while (ierr==0)
-        call readArrays()
-        call adios_release_step(inh, ierr)
-        call printArrays()
-        call advanceArrays()
-        call sleep(2)
-        call MPI_Barrier (MPI_COMM_WORLD, ierr)
-        call adios_advance_step(inh, 0, 10.0, ierr)
-        if (ierr==err_end_of_stream .and. rank==0) then
-            print *, " Stream has terminated. Quit reader"
-        elseif (ierr==err_step_notready .and. rank==0) then
-            print *, " Next step has not arrived for a while. Assume termination" 
-        endif
-        wts = wts+1
-    enddo
-    call adios_read_close (inh, ierr)
-
-    ! Terminate
-    call MPI_Barrier (MPI_COMM_WORLD, ierr)
-    call adios_read_finalize_method (read_method, ierr)
-    call adios_finalize (rank, ierr)
-    call MPI_Finalize (ierr)
-end program coupling
-
-
-
-!!***************************
-subroutine readArrays()
-    use coupling_reader_2D_comm
-    use adios_read_mod
-    implicit none
-    integer             :: i,j,k
-    integer*8           :: sel
-    integer*8, dimension(3) :: offset, readsize
-
-
-    ! read gdx and gdy
-    print '("rank=",i0,": Read in gdx and gdy, step",i0," from ",a)', rank, wts, trim(infn)
-    call adios_get_scalar(inh, "gdx", gdx, ierr)
-    call adios_get_scalar(inh, "gdy", gdy, ierr)
-
-    ! Calculate the local x,y offsets
-    if (read_mode == 0) then
-        ! each process reads the whole array
-        ldx = gdx
-        ldy = gdy
-        ox = 0
-        oy = 0
-    elseif (read_mode == 1) then
-        ldx = gdx / nproc 
-        ldy = gdy
-        ox = rank * ldx
-        oy = 0
-        ! last process should read all the rest of columns
-        if (rank == nproc-1) then
-            ldx = gdx - ldx*(nproc-1)
-        endif
-    endif
-
-
-    if (.not. allocated(xy)) then
-        allocate( xy  (1:ldx, 1:ldy) )
-        allocate( xy2 (1:ldx, 1:ldy) )
-    endif
-    xy = -1.0 ! should be overwritten at reading the array next
-
-
-    ! Read in the whole xy array
-    readsize(1) = ldx
-    readsize(2) = ldy
-    offset(1)   = ox
-    offset(2)   = oy
-    call adios_selection_boundingbox (sel, 2, offset, readsize)
-    print '("rank=",i0,": Read in xy(",i0,":",i0,",",i0,":",i0,") from ",a)', rank, &
-            offset(1)+1, offset(1)+readsize(1), &
-            offset(2)+1, offset(2)+readsize(2),trim(infn)
-    call adios_schedule_read (inh, sel, "xy", 0, 1, xy, ierr)
-    call adios_perform_reads (inh, ierr)
-    call adios_selection_delete (sel)
-
-    do j=1,ldy
-        do i=1,ldx
-            xy2(i,j) = rank*1.0 + xy(i,j)/100.0
-        enddo
-    enddo
-    
-
-    print '("rank=",i0,": Read done")', rank
-    call MPI_Barrier (group_comm, ierr)
-
-end subroutine readArrays
-
-!!***************************
-subroutine printArrays()
-    use coupling_reader_2D_comm
-    use adios_write_mod
-    implicit none
-    integer, parameter  :: u=20
-    character(len=256)  :: outfn
-    integer             :: i,j,k,writer
-
-    if (read_mode == 0) then
-
-        writer = mod(wts,nproc)
-        if (writer == rank) then
-    
-            write (outfn, '("reader_",i3.3,".bp")') wts
-            call adios_open (adios_handle, "reader2D", outfn, "w", self_comm, adios_err)
-#include "gwrite_reader2D.fh"
-            ! start streaming from buffer to disk
-            call adios_close (adios_handle, adios_err)
-            print '("rank=",i0,": One process wrote xy and new xy2 to ",a)', rank, trim(outfn)
-    
-        endif
-    
-        if (dump_text) then
-    
-            write (outfn, '("reader_",i3.3,"_",i0,".txt")') wts, rank
-            open (u, FILE=outfn, STATUS='NEW', FORM="FORMATTED")
-    
-            ! print xyz_bbb
-            write (u,'("xy(1:",i0,",1:",i0,") = ")') ldx, ldy
-            do j=1,ldy
-                do i=1,ldx
-                    write (u, '(f6.2," ",$)') xy(i,j)
-                enddo
-                write (u,*) " "  ! new line
-            enddo
-    
-            close (u)
-    
-        endif
-
-    elseif (read_mode ==1) then
-            write (outfn, '("reader_",i3.3,".bp")') wts
-            call adios_open (adios_handle, "reader2D", outfn, "w", group_comm, adios_err)
-#include "gwrite_reader2D.fh"
-            ! start streaming from buffer to disk
-            call adios_close (adios_handle, adios_err)
-            print '("rank=",i0,": Collectively wrote xy and new xy2 to ",a)', rank, trim(outfn)
-    endif
-
-end subroutine printArrays
-
-!!***************************
-subroutine advanceArrays()
-    use coupling_reader_2D_comm
-    implicit none
-
-    xy = 0.9 * xy
-    xy2 = 0.9 * xy2
-
-end subroutine advanceArrays
-
-
-!!***************************
-subroutine usage()
-    print *, "Usage: coupling_reader_2D N M method read-mode"
-    print *, "N:           number of processes in X dimension"
-    print *, "M:           number of processes in Y dimension"
-    print *, "read method: DATASPACES or DIMES for memory-to-memory coupling,"
-    print *, "             otherwise file-based"
-    print *, "read-mode:   0: each process reads whole global array"
-    print *, "             1: 1D decomposition in 1st dimension"
-end subroutine usage
-
-!!***************************
-subroutine processArgs()
-    use coupling_reader_2D_comm
-
-#ifndef __GFORTRAN__
-#ifndef __GNUC__
-    interface
-         integer function iargc()
-         end function iargc
-    end interface
-#endif
-#endif
-
-    character(len=256) :: npx_str, npy_str, method_str, mode_str, ts_str
-    integer :: numargs
-
-    !! process arguments
-    numargs = iargc()
-    !print *,"Number of arguments:",numargs
-    if ( numargs < 4 ) then
-        call usage()
-        call exit(1)
-    endif
-    call getarg(1, npx_str)
-    call getarg(2, npy_str)
-    read (npx_str,'(i5)') npx
-    read (npy_str,'(i5)') npy
-
-    call getarg(3, method_str)
-    !print '("Requested method: [",a,"]")', trim(method_str)
-    if (trim(method_str) .eq. "DATASPACES") then
-        read_method = 3 ! ADIOS_READ_METHOD_DATASPACES
-    elseif (trim(method_str) .eq. "DIMES") then
-        read_method = 4 ! ADIOS_READ_METHOD_DIMES
-    elseif (trim(method_str) .eq. "FLEXPATH") then
-        read_method = 5 ! ADIOS_READ_METHOD_FLEXPATH
-    else
-        read_method = 0
-    endif
-
-    call getarg(4, mode_str)
-    read (mode_str,'(i5)') read_mode
-    if (read_mode < 0 .or. read_mode > 1) then
-        print *, "Argument error: read_mode must be 0 or 1"
-        call usage()
-        call exit(2)
-    endif
-
-
-end subroutine processArgs
diff --git a/examples/skel/picongpu/picongpu.xml b/examples/skel/picongpu/picongpu.xml
new file mode 100644
index 0000000..2835f2c
--- /dev/null
+++ b/examples/skel/picongpu/picongpu.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="fields" coordination-communicator="comm" stats="On">
+        <var name="iter" type="integer"/>
+        <var name="npx" type="integer"/>
+        <var name="npy" type="integer"/>
+        <var name="npz" type="integer"/>
+        <var name="size_x" type="integer"/>
+        <var name="size_y" type="integer"/>
+        <var name="size_z" type="integer"/>
+        <var name="total_size_x" type="integer" />
+        <var name="total_size_y" type="integer" />
+        <var name="total_size_z" type="integer" />
+        <var name="offset_x" type="integer" />
+        <var name="offset_y" type="integer" />
+        <var name="offset_z" type="integer" />
+        <global-bounds dimensions="total_size_x,total_size_y,total_size_z" offsets="offset_x,offset_y,offset_z">
+           <var path="/data" name="fields_FieldE_x" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldE_y" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldE_z" type="float" dimensions="size_x,size_y,size_z"/>
+           
+           <var path="/data" name="fields_FieldB_x" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldB_y" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldB_z" type="float" dimensions="size_x,size_y,size_z"/>
+           
+           <var path="/data" name="fields_Density_e" type="float" dimensions="size_x,size_y,size_z"/>
+        </global-bounds>
+    </adios-group>
+
+    <method group="fields" method="MPI" />
+
+    <buffer size-MB="32" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/skel/picongpu/picongpu_params.xml b/examples/skel/picongpu/picongpu_params.xml
new file mode 100644
index 0000000..ac2c14b
--- /dev/null
+++ b/examples/skel/picongpu/picongpu_params.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<skel-config application="picongpu">
+
+<!--
+  Within each group, use the scalar elements to control things like array sizes and offsets.
+  Simply adjust the value attribute as needed. The type is provided for convenience.
+  Note that there are 2 special values that you can use:
+    skel_mpi_size refers to the number of processes participating in this run, and
+    skel_mpi_rank is used to indicate the rank of the local process
+  -->
+
+
+  <adios-group name="fields">
+    <scalar name="npx" type="integer" value="8" />
+    <scalar name="npy" type="integer" value="8" />
+    <scalar name="npz" type="integer" value="8" />
+    <scalar name="size_x" type="integer" value="64" />
+    <scalar name="size_y" type="integer" value="64" />
+    <scalar name="size_z" type="integer" value="64" />
+    <scalar name="total_size_x" type="integer" value="npx*size_x" />
+    <scalar name="total_size_y" type="integer" value="npy*size_y" />
+    <scalar name="total_size_z" type="integer" value="npz*size_z" />
+    <scalar name="iter" type="integer" value="1" />
+    <scalar name="offset_z" type="integer" value="size_x*(skel_mpi_rank%npx)" />
+    <scalar name="offset_y" type="integer" value="size_y*((skel_mpi_rank/npx)%npy)" />
+    <scalar name="offset_x" type="integer" value="size_z*(skel_mpi_rank/(npx*npy))" />
+    <array name="fields_FieldE_x" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_FieldE_z" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_Density_e" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_FieldB_z" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_FieldB_x" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_FieldE_y" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+    <array name="fields_FieldB_y" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+  </adios-group>
+
+  <batch name="writes" cores="16" walltime="0:30:00">
+    <test type="write" group="fields" method="POSIX" iterations="10" rm="pre" tags="name1:val1,name2:val2" />
+  </batch>
+
+</skel-config>
diff --git a/examples/skel/picongpu/picongpu_skel.xml b/examples/skel/picongpu/picongpu_skel.xml
new file mode 100644
index 0000000..e7d5a49
--- /dev/null
+++ b/examples/skel/picongpu/picongpu_skel.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" ?>
+<adios-config host-language="C">
+    <adios-group coordination-communicator="comm" name="fields" stats="On">
+        <var name="iter" type="integer"/>
+        <var name="npx" type="integer"/>
+        <var name="npy" type="integer"/>
+        <var name="npz" type="integer"/>
+        <var name="size_x" type="integer"/>
+        <var name="size_y" type="integer"/>
+        <var name="size_z" type="integer"/>
+        <var name="total_size_x" type="integer"/>
+        <var name="total_size_y" type="integer"/>
+        <var name="total_size_z" type="integer"/>
+        <var name="offset_x" type="integer"/>
+        <var name="offset_y" type="integer"/>
+        <var name="offset_z" type="integer"/>
+        <global-bounds dimensions="total_size_x,total_size_y,total_size_z" offsets="offset_x,offset_y,offset_z">
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldE_x" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldE_y" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldE_z" path="/data" type="float"/>
+           
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldB_x" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldB_y" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" name="fields_FieldB_z" path="/data" type="float"/>
+           
+           <var dimensions="size_x,size_y,size_z" name="fields_Density_e" path="/data" type="float"/>
+        </global-bounds>
+    </adios-group>
+
+    <method group="fields" method="MPI">***skel-parameters***</method>
+
+    <buffer allocate-time="now" size-MB="32"/>
+
+</adios-config>
\ No newline at end of file
diff --git a/utils/skel/etc/templates/Makefile.default.tpl b/examples/skel/picongpu/test/Makefile
similarity index 59%
copy from utils/skel/etc/templates/Makefile.default.tpl
copy to examples/skel/picongpu/test/Makefile
index 76518ae..1e642dc 100644
--- a/utils/skel/etc/templates/Makefile.default.tpl
+++ b/examples/skel/picongpu/test/Makefile
@@ -2,19 +2,19 @@
 # To modify this Makefile, edit Makefile_default.tpl file in ~/.skel/templates/
 # and run skel makefile  
 
-include $$INCLUDE$$
+include /ccs/proj/e2e/pnorbert/ADIOS/sith.pgi/bin/../etc/skel/compiler_fragment.mk
 
-ADIOS_DIR=`adios_config -d`
-LDFLAGS += `adios_config -l`
-CFLAGS += `adios_config -c`
-FCFLAGS += `adios_config -fc`          
-FCLIBS += `adios_config -fl` -L${ADIOS_DIR}/lib/skel -lskel
+ADIOS_DIR=/ccs/proj/e2e/pnorbert/ADIOS/sith.pgi
+LDFLAGS += `${ADIOS_DIR}/bin/adios_config -l`
+CFLAGS += `${ADIOS_DIR}/bin/adios_config -c`
+FCFLAGS += `${ADIOS_DIR}/bin/adios_config -fc`          
+FCLIBS += `${ADIOS_DIR}/bin/adios_config -fl` -L${ADIOS_DIR}/lib/skel -lskel
                
-APP=$$APP$$
-CTESTS=$$CTESTS$$
-FTESTS=$$FTESTS$$
+APP=picongpu
+CTESTS=picongpu_skel_fields_write 
+FTESTS=
 
-DEST_DIR=$$DEPLOY_DIR$$/$(APP)/$$CORES_USED$$
+DEST_DIR=~/skel-deploy-dir/$(APP)/128
 
 all: $(FTESTS) $(CTESTS)
 
diff --git a/examples/skel/picongpu/test/picongpu.xml b/examples/skel/picongpu/test/picongpu.xml
new file mode 100644
index 0000000..49cce2e
--- /dev/null
+++ b/examples/skel/picongpu/test/picongpu.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="fields" coordination-communicator="comm" stats="On">
+        <var name="iter" type="integer"/>
+        <var name="npx" type="integer"/>
+        <var name="npy" type="integer"/>
+        <var name="npz" type="integer"/>
+        <var name="size_x" type="integer"/>
+        <var name="size_y" type="integer"/>
+        <var name="size_z" type="integer"/>
+        <var name="total_size_x" type="integer" />
+        <var name="total_size_y" type="integer" />
+        <var name="total_size_z" type="integer" />
+        <var name="offset_x" type="integer" />
+        <var name="offset_y" type="integer" />
+        <var name="offset_z" type="integer" />
+        <global-bounds dimensions="total_size_x,total_size_y,total_size_z" offsets="offset_x,offset_y,offset_z">
+           <var path="/data" name="fields_FieldE_x" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldE_y" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldE_z" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           
+           <var path="/data" name="fields_FieldB_x" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldB_y" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           <var path="/data" name="fields_FieldB_z" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+           
+           <var path="/data" name="fields_Density_e" gwrite="t" type="float" dimensions="size_x,size_y,size_z"/>
+        </global-bounds>
+    </adios-group>
+
+    <method group="fields" method="MPI" />
+
+    <buffer size-MB="32" allocate-time="now"/>
+
+</adios-config>
diff --git a/examples/skel/picongpu/test/picongpu_params.xml b/examples/skel/picongpu/test/picongpu_params.xml
new file mode 100644
index 0000000..d2a9b59
--- /dev/null
+++ b/examples/skel/picongpu/test/picongpu_params.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<skel-config application="picongpu">
+
+<!--
+  Within each group, use the scalar elements to control things like array sizes and offsets.
+  Simply adjust the value attribute as needed. The type is provided for convenience.
+  Note that there are 2 special values that you can use:
+    skel_mpi_size refers to the number of processes participating in this run, and
+    skel_mpi_rank is used to indicate the rank of the local process
+  -->
+
+
+  <adios-group name="fields">
+    <scalar name="npx" type="integer" value="8" />
+    <scalar name="npy" type="integer" value="8" />
+    <scalar name="npz" type="integer" value="8" />
+    <scalar name="size_x" type="integer" value="64" />
+    <scalar name="size_y" type="integer" value="64" />
+    <scalar name="size_z" type="integer" value="64" />
+    <scalar name="total_size_x" type="integer" value="npx*size_x" />
+    <scalar name="total_size_y" type="integer" value="npy*size_y" />
+    <scalar name="total_size_z" type="integer" value="npz*size_z" />
+    <scalar name="iter" type="integer" value="1" />
+    <scalar name="offset_z" type="integer" value="size_x*(skel_mpi_rank%npx)" />
+    <scalar name="offset_y" type="integer" value="size_y*((skel_mpi_rank/npx)%npy)" />
+    <scalar name="offset_x" type="integer" value="size_z*(skel_mpi_rank/(npx*npy))" />
+    <array name="t" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+  </adios-group>
+
+  <batch name="writes" cores="128" walltime="0:30:00">
+    <test type="write" group="fields" method="POSIX" iterations="10" rm="pre" tags="name1:val1,name2:val2" />
+  </batch>
+
+</skel-config>
diff --git a/examples/skel/picongpu/test/picongpu_params.xml.default b/examples/skel/picongpu/test/picongpu_params.xml.default
new file mode 100644
index 0000000..d2a9b59
--- /dev/null
+++ b/examples/skel/picongpu/test/picongpu_params.xml.default
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<skel-config application="picongpu">
+
+<!--
+  Within each group, use the scalar elements to control things like array sizes and offsets.
+  Simply adjust the value attribute as needed. The type is provided for convenience.
+  Note that there are 2 special values that you can use:
+    skel_mpi_size refers to the number of processes participating in this run, and
+    skel_mpi_rank is used to indicate the rank of the local process
+  -->
+
+
+  <adios-group name="fields">
+    <scalar name="npx" type="integer" value="8" />
+    <scalar name="npy" type="integer" value="8" />
+    <scalar name="npz" type="integer" value="8" />
+    <scalar name="size_x" type="integer" value="64" />
+    <scalar name="size_y" type="integer" value="64" />
+    <scalar name="size_z" type="integer" value="64" />
+    <scalar name="total_size_x" type="integer" value="npx*size_x" />
+    <scalar name="total_size_y" type="integer" value="npy*size_y" />
+    <scalar name="total_size_z" type="integer" value="npz*size_z" />
+    <scalar name="iter" type="integer" value="1" />
+    <scalar name="offset_z" type="integer" value="size_x*(skel_mpi_rank%npx)" />
+    <scalar name="offset_y" type="integer" value="size_y*((skel_mpi_rank/npx)%npy)" />
+    <scalar name="offset_x" type="integer" value="size_z*(skel_mpi_rank/(npx*npy))" />
+    <array name="t" type="float" dims="size_x,size_y,size_z" fill-method="rank"></array>
+  </adios-group>
+
+  <batch name="writes" cores="128" walltime="0:30:00">
+    <test type="write" group="fields" method="POSIX" iterations="10" rm="pre" tags="name1:val1,name2:val2" />
+  </batch>
+
+</skel-config>
diff --git a/examples/skel/picongpu/test/picongpu_skel.xml b/examples/skel/picongpu/test/picongpu_skel.xml
new file mode 100644
index 0000000..2536509
--- /dev/null
+++ b/examples/skel/picongpu/test/picongpu_skel.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" ?>
+
+<adios-config host-language="C">
+    <adios-group coordination-communicator="comm" name="fields" stats="On">
+        <var name="iter" type="integer"/>
+        <var name="npx" type="integer"/>
+        <var name="npy" type="integer"/>
+        <var name="npz" type="integer"/>
+        <var name="size_x" type="integer"/>
+        <var name="size_y" type="integer"/>
+        <var name="size_z" type="integer"/>
+        <var name="total_size_x" type="integer"/>
+        <var name="total_size_y" type="integer"/>
+        <var name="total_size_z" type="integer"/>
+        <var name="offset_x" type="integer"/>
+        <var name="offset_y" type="integer"/>
+        <var name="offset_z" type="integer"/>
+        <global-bounds dimensions="total_size_x,total_size_y,total_size_z" offsets="offset_x,offset_y,offset_z">
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldE_x" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldE_y" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldE_z" path="/data" type="float"/>
+           
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldB_x" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldB_y" path="/data" type="float"/>
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_FieldB_z" path="/data" type="float"/>
+           
+           <var dimensions="size_x,size_y,size_z" gwrite="t" name="fields_Density_e" path="/data" type="float"/>
+        </global-bounds>
+    </adios-group>
+
+    <method group="fields" method="MPI">***skel-parameters***</method>
+
+    <buffer allocate-time="now" size-MB="32"/>
+
+</adios-config>
\ No newline at end of file
diff --git a/examples/skel/picongpu/test/picongpu_skel_fields_write.c b/examples/skel/picongpu/test/picongpu_skel_fields_write.c
new file mode 100644
index 0000000..5ba8782
--- /dev/null
+++ b/examples/skel/picongpu/test/picongpu_skel_fields_write.c
@@ -0,0 +1,184 @@
+//
+// Automatically generated by skel. Modify at your own risk.
+
+#include "adios.h"
+#include "mpi.h"
+#include "skel/skel_xml_output.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+int main (int argc, char ** argv)
+{
+
+MPI_Init (&argc, &argv);
+
+double skel_init_timer = 0;
+double skel_open_timer = 0;
+double skel_access_timer = 0;
+double skel_close_timer = 0;
+double skel_total_timer = 0;
+
+// Time the init
+MPI_Barrier (MPI_COMM_WORLD);
+skel_init_timer -= MPI_Wtime();
+
+adios_init ("picongpu_skel.xml", MPI_WORLD_COMM);
+skel_init_timer += MPI_Wtime();
+
+int skel_mpi_size, skel_mpi_rank, skel_i;
+uint64_t adios_groupsize;
+MPI_Comm_rank (MPI_COMM_WORLD, &skel_mpi_rank);
+MPI_Comm_size (MPI_COMM_WORLD, &skel_mpi_size);
+
+int64_t adios_handle;
+uint64_t skel_total_size;
+
+// Scalar declarations
+int total_size_x;
+int total_size_y;
+int size_z;
+int total_size_z;
+int npz;
+int offset_z;
+int npy;
+int offset_y;
+int offset_x;
+int npx;
+int size_x;
+int iter;
+int size_y;
+iter = 1;
+npx = 8;
+npy = 8;
+npz = 8;
+size_x = 64;
+size_y = 64;
+size_z = 64;
+total_size_x = npx*size_x;
+total_size_y = npy*size_y;
+total_size_z = npz*size_z;
+offset_x = size_z*(skel_mpi_rank/(npx*npy));
+offset_y = size_y*((skel_mpi_rank/npx)%npy);
+offset_z = size_x*(skel_mpi_rank%npx);
+
+// Array declarations
+
+float * t;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+t = (float*) malloc (size_x*size_y*size_z * sizeof (float) );
+for (skel_i = 0; skel_i < size_x*size_y*size_z; skel_i++) 
+    t[skel_i] = (float) skel_mpi_rank;
+
+for (skel_i = 0; skel_i < 1; skel_i++){
+
+// Time the opens
+MPI_Barrier (MPI_COMM_WORLD);
+skel_open_timer -= MPI_Wtime();
+skel_total_timer -= MPI_Wtime();
+MPI_Comm comm = MPI_COMM_WORLD;
+adios_open(&adios_handle, "fields", "out_fields_write.bp", "w", comm);
+skel_open_timer += MPI_Wtime();
+
+// Time the writes
+skel_access_timer -= MPI_Wtime();
+
+// Set the adios group size
+adios_groupsize =
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) +
+                     4 * (size_x) * (size_y) * (size_z) ;
+adios_group_size (adios_handle, adios_groupsize, &skel_total_size);
+
+// Write each variable
+adios_write (adios_handle, "iter", &iter);
+adios_write (adios_handle, "npx", &npx);
+adios_write (adios_handle, "npy", &npy);
+adios_write (adios_handle, "npz", &npz);
+adios_write (adios_handle, "size_x", &size_x);
+adios_write (adios_handle, "size_y", &size_y);
+adios_write (adios_handle, "size_z", &size_z);
+adios_write (adios_handle, "total_size_x", &total_size_x);
+adios_write (adios_handle, "total_size_y", &total_size_y);
+adios_write (adios_handle, "total_size_z", &total_size_z);
+adios_write (adios_handle, "offset_x", &offset_x);
+adios_write (adios_handle, "offset_y", &offset_y);
+adios_write (adios_handle, "offset_z", &offset_z);
+adios_write (adios_handle, "fields_FieldE_x", t);
+adios_write (adios_handle, "fields_FieldE_y", t);
+adios_write (adios_handle, "fields_FieldE_z", t);
+adios_write (adios_handle, "fields_FieldB_x", t);
+adios_write (adios_handle, "fields_FieldB_y", t);
+adios_write (adios_handle, "fields_FieldB_z", t);
+adios_write (adios_handle, "fields_Density_e", t);
+
+// Stop timing the writes
+skel_access_timer += MPI_Wtime();
+
+// Time the closes
+skel_close_timer -= MPI_Wtime();
+adios_close (adios_handle);
+skel_close_timer += MPI_Wtime();}
+skel_total_timer += MPI_Wtime();
+
+// Output results
+
+ skel_write_coarse_xml_data ();
+double skel_total_init, skel_total_open, skel_total_access, skel_total_close, skel_total_total;
+MPI_Reduce (&skel_init_timer, &skel_total_init, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+MPI_Reduce (&skel_open_timer, &skel_total_open, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+MPI_Reduce (&skel_access_timer, &skel_total_access, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+MPI_Reduce (&skel_close_timer, &skel_total_close, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+MPI_Reduce (&skel_total_timer, &skel_total_total, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
+if (skel_mpi_rank == 0) {
+    fprintf (stdout, "\n");
+    fprintf (stdout, "\n*************************");
+    fprintf (stdout, "\n   Groupsize: %lli", adios_groupsize);
+    fprintf (stdout, "\n  Open Time: %f", skel_total_open);
+    fprintf (stdout, "\nAccess Time: %f", skel_total_access);
+    fprintf (stdout, "\n Close Time: %f", skel_total_close);
+    fprintf (stdout, "\n Total Time: %f", skel_total_total);
+    fprintf (stdout, "\n*************************");
+    fprintf (stdout, "\n");
+}
+
+// Free the arrays
+free (t);
+
+// Clean up
+adios_finalize(0);
+MPI_Finalize();
+}
diff --git a/examples/staging/stage_write/Makefile b/examples/staging/stage_write/Makefile
index 398c102..9e5b118 100644
--- a/examples/staging/stage_write/Makefile
+++ b/examples/staging/stage_write/Makefile
@@ -1,41 +1,22 @@
-## mpicc SETTINGS
-CC=mpicc
-CFLAGS=-g 
-LDFLAGS=-g
 
-## cc SETTINGS
-#CC=cc
-#CFLAGS = -O3
-#LDFLAGS =
+# Change setup in make.settings
 
-#TARGET=gnu
-TARGET=pgi
-
-## Set ADIOS_DIR here or before doing make
-override ADIOS_DIR=/ccs/proj/e2e/pnorbert/ADIOS/sith.${TARGET}
-override ADIOS_INC=`${ADIOS_DIR}/bin/adios_config -c`
-override ADIOS_CLIB=`${ADIOS_DIR}/bin/adios_config -l`
-
-
-default: stage_write 
+default: genarray_stream stage_write 
 all: default
 
-OBJS = utils.o decompose_block.o 
-
-%.o: %.c
-	${CC} ${CFLAGS} -c ${ADIOS_INC} $<
+stage_write: stage_write.c
+	make -f Makefile.stage_write 
 
-stage_write: ${OBJS} stage_write.o
-	${CC} ${LDFLAGS} -o stage_write ${OBJS} stage_write.o ${ADIOS_CLIB}
-
-test_decompose: ${OBJS} test_decompose.o 
-	${CC} ${LDFLAGS} -o test_decompose ${OBJS} test_decompose.o ${ADIOS_CLIB}
+genarray_stream: genarray_stream.F90
+	make -f Makefile.genarray_stream
 
 clean:
-	rm -f *.o *.mod *.fh core.*
-	rm -f stage_write
-
-
-distclean: clean
-	rm -f log.* dataspaces.conf conf srv.lck *.bp
+	make -f Makefile.stage_write clean
+	make -f Makefile.genarray_stream clean
+	rm -f staging.o[0-9]*
+
+distclean: 
+	make -f Makefile.stage_write distclean
+	make -f Makefile.genarray_stream distclean
+	rm -f staging.o[0-9]*
 
diff --git a/examples/staging/stage_write/Makefile.genarray_stream b/examples/staging/stage_write/Makefile.genarray_stream
index c1b45de..5c5c962 100644
--- a/examples/staging/stage_write/Makefile.genarray_stream
+++ b/examples/staging/stage_write/Makefile.genarray_stream
@@ -1,16 +1,6 @@
-## MPIF90 SETTINGS
-FC=mpif90
-FFLAGS=-g
-
-## FTN SETTINGS
-#FC=ftn
-#FFLAGS = -O3
-
-#TARGET=gnu
-TARGET=pgi
+include make.settings
 
 ## Set ADIOS_DIR here or before doing make
-override ADIOS_DIR=/ccs/proj/e2e/pnorbert/ADIOS/sith.${TARGET}
 override ADIOS_INC=`${ADIOS_DIR}/bin/adios_config -c -f`
 override ADIOS_FLIB=`${ADIOS_DIR}/bin/adios_config -l -f`
 
@@ -27,4 +17,6 @@ genarray_stream:  genarray_stream.o
 clean:
 	rm -f *.o *.mod *.fh core.*
 	rm -f genarray_stream
-        
+
+distclean: clean
+
diff --git a/examples/staging/stage_write/Makefile b/examples/staging/stage_write/Makefile.stage_write
similarity index 77%
copy from examples/staging/stage_write/Makefile
copy to examples/staging/stage_write/Makefile.stage_write
index 398c102..572f9ee 100644
--- a/examples/staging/stage_write/Makefile
+++ b/examples/staging/stage_write/Makefile.stage_write
@@ -1,18 +1,6 @@
-## mpicc SETTINGS
-CC=mpicc
-CFLAGS=-g 
-LDFLAGS=-g
-
-## cc SETTINGS
-#CC=cc
-#CFLAGS = -O3
-#LDFLAGS =
-
-#TARGET=gnu
-TARGET=pgi
+include make.settings
 
 ## Set ADIOS_DIR here or before doing make
-override ADIOS_DIR=/ccs/proj/e2e/pnorbert/ADIOS/sith.${TARGET}
 override ADIOS_INC=`${ADIOS_DIR}/bin/adios_config -c`
 override ADIOS_CLIB=`${ADIOS_DIR}/bin/adios_config -l`
 
diff --git a/examples/staging/stage_write/genarray_stream.F90 b/examples/staging/stage_write/genarray_stream.F90
index 351e1e8..5592e82 100644
--- a/examples/staging/stage_write/genarray_stream.F90
+++ b/examples/staging/stage_write/genarray_stream.F90
@@ -202,28 +202,28 @@ subroutine writeArray()
         call adios_open (adios_handle, group, outputfile, mode, app_comm, adios_err)
         adios_groupsize = 13*4 + 9*8*ndx*ndy*ndz
         call adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)
-        call adios_write (adios_handle, "gndx", gndx, adios_err)
-        call adios_write (adios_handle, "gndy", gndy, adios_err)
-        call adios_write (adios_handle, "gndz", gndz, adios_err)
-        call adios_write (adios_handle, "nproc", nproc, adios_err)
-        call adios_write (adios_handle, "npx", npx, adios_err)
-        call adios_write (adios_handle, "npy", npy, adios_err)
-        call adios_write (adios_handle, "npz", npz, adios_err)
-        call adios_write (adios_handle, "offx", offx, adios_err)
-        call adios_write (adios_handle, "offy", offy, adios_err)
-        call adios_write (adios_handle, "offz", offz, adios_err)
-        call adios_write (adios_handle, "ndx", ndx, adios_err)
-        call adios_write (adios_handle, "ndy", ndy, adios_err)
-        call adios_write (adios_handle, "ndz", ndz, adios_err)
-        call adios_write (adios_handle, "var1", double_xyz, adios_err)
-        call adios_write (adios_handle, "var2", double_xyz, adios_err)
-        call adios_write (adios_handle, "var3", double_xyz, adios_err)
-        call adios_write (adios_handle, "var4", double_xyz, adios_err)
-        call adios_write (adios_handle, "var5", double_xyz, adios_err)
-        call adios_write (adios_handle, "var6", double_xyz, adios_err)
-        call adios_write (adios_handle, "var7", double_xyz, adios_err)
-        call adios_write (adios_handle, "var8", double_xyz, adios_err)
-        call adios_write (adios_handle, "var9", double_xyz, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndx", gndx, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndy", gndy, adios_err)
+        call adios_write (adios_handle, "/dimensions/gndz", gndz, adios_err)
+        call adios_write (adios_handle, "/info/nproc", nproc, adios_err)
+        call adios_write (adios_handle, "/info/npx", npx, adios_err)
+        call adios_write (adios_handle, "/info/npy", npy, adios_err)
+        call adios_write (adios_handle, "/info/npz", npz, adios_err)
+        call adios_write (adios_handle, "/aux/offx", offx, adios_err)
+        call adios_write (adios_handle, "/aux/offy", offy, adios_err)
+        call adios_write (adios_handle, "/aux/offz", offz, adios_err)
+        call adios_write (adios_handle, "/aux/ndx", ndx, adios_err)
+        call adios_write (adios_handle, "/aux/ndy", ndy, adios_err)
+        call adios_write (adios_handle, "/aux/ndz", ndz, adios_err)
+        call adios_write (adios_handle, "/var/var1", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var2", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var3", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var4", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var5", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var6", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var7", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var8", double_xyz, adios_err)
+        call adios_write (adios_handle, "/var/var9", double_xyz, adios_err)
         call adios_close (adios_handle, adios_err)
         call MPI_BARRIER(app_comm ,adios_err)
         io_end_time = MPI_WTIME()
diff --git a/examples/staging/stage_write/genarray_stream.xml b/examples/staging/stage_write/genarray_stream.xml
index 9f5c8f7..981c0b0 100644
--- a/examples/staging/stage_write/genarray_stream.xml
+++ b/examples/staging/stage_write/genarray_stream.xml
@@ -24,16 +24,26 @@
     <var name="ndz" path="/aux" type="integer"/>
 
     <!-- 3D array written by genarray with 1 timesteps -->
-    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
-        <var name="var1" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var2" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var3" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var4" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var5" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var6" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var7" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var8" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var9" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
+    <global-bounds dimensions="/dimensions/gndx,/dimensions/gndy,/dimensions/gndz" 
+                   offsets="/aux/offx,/aux/offy,/aux/offz">
+        <var name="var1" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var2" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var3" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var4" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var5" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var6" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var7" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var8" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var9" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" 
+             dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
     </global-bounds>
     <attribute name="description" path="/var/double_xyz"
                value="3D array with 3D decomposition"/>
@@ -41,7 +51,7 @@
 
   </adios-group>
 
-  <method group="genarray" method="DATASPACES">verbose=2</method>
+  <method group="genarray" method="DATASPACES">verbose=3</method>
 
   <buffer size-MB="20" allocate-time="now"/>
 
diff --git a/examples/staging/stage_write/job b/examples/staging/stage_write/job
index e3820cc..121d9d9 100755
--- a/examples/staging/stage_write/job
+++ b/examples/staging/stage_write/job
@@ -2,12 +2,15 @@
 #PBS -A STF006
 #PBS -N genarray
 #PBS -j oe
-#PBS -l walltime=1:00:00,size=20
+#PBS -q debug
+#PBS -l walltime=0:10:00,nodes=3
 ## On the Cray, you need at least 3 nodes for 3 separate application runs
 
 cd $PBS_O_WORKDIR
 
-SERVER=/ccs/proj/e2e/dataspaces/sith/pgi/bin/dataspaces_server
+#RUNCMD="mpirun -np"
+RUNCMD="aprun -n"
+SERVER=./dataspaces_server
 
 WRITEPROC=1
 STAGINGPROC=1
@@ -31,7 +34,7 @@ max_versions = 10
 
 # Run DataSpaces
 echo "-- Start DataSpaces server "$SERVER" on $STAGINGPROC PEs, -s$STAGINGPROC -c$PROCALL"
-mpirun -np $STAGINGPROC $SERVER -s$STAGINGPROC -c$PROCALL &> log.server &
+$RUNCMD $STAGINGPROC $SERVER -s$STAGINGPROC -c$PROCALL &> log.server &
 
 ## Give some time for the servers to load and startup
 sleep 1s
@@ -50,11 +53,11 @@ echo "-- DataSpaces IDs: P2TNID = $P2TNID   P2TPID = $P2TPID"
 
 # Start GENARRAY
 echo "-- Start GENARRAY on $WRITEPROC PEs"
-mpirun -np $WRITEPROC ./genarray_stream genarray.bp $WRITEPROC 1 1 16 32 64 5 10 >& log.genarray &
+$RUNCMD $WRITEPROC ./genarray_stream genarray.bp $WRITEPROC 1 1 16 32 64 5 10 >& log.genarray &
 
 # Start STAGE_WRITE
 echo "-- Start STAGE_WRITE on $READPROC PEs"
-mpirun -np $READPROC ./stage_write genarray.bp staged.bp MPI \"\" $READPROC 1 1 >& log.stage_write &
+$RUNCMD $READPROC ./stage_write genarray.bp staged.bp DATASPACES \"\" MPI \"\" $READPROC 1 1 >& log.stage_write &
 
 echo "-- Wait until all applications exit. Run ./check.sh to see status"
 wait
diff --git a/examples/staging/stage_write/job b/examples/staging/stage_write/job.32
similarity index 78%
copy from examples/staging/stage_write/job
copy to examples/staging/stage_write/job.32
index e3820cc..0cccdf4 100755
--- a/examples/staging/stage_write/job
+++ b/examples/staging/stage_write/job.32
@@ -2,16 +2,18 @@
 #PBS -A STF006
 #PBS -N genarray
 #PBS -j oe
-#PBS -l walltime=1:00:00,size=20
+#PBS -q debug
+#PBS -l walltime=0:20:00,size=48
 ## On the Cray, you need at least 3 nodes for 3 separate application runs
 
 cd $PBS_O_WORKDIR
 
 SERVER=/ccs/proj/e2e/dataspaces/sith/pgi/bin/dataspaces_server
 
-WRITEPROC=1
-STAGINGPROC=1
-READPROC=1
+WRITEPROC=32
+STAGINGPROC=2
+STAGINGPROC_PER_NODE=2
+READPROC=8
 let "PROCALL=WRITEPROC+READPROC"
 
 # clean-up previous run
@@ -21,9 +23,9 @@ rm staged.bp genarray.bp
 # Prepare config file for DataSpaces
 echo "## Config file for DataSpaces
 ndim = 3
-dimx = 128
-dimy = 32768
-dimz = 128
+dimx = 512
+dimy = 512
+dimz = 512
 max_versions = 10
 #max_readers =" $READPROC " 
 #lock_type = 2
@@ -31,7 +33,7 @@ max_versions = 10
 
 # Run DataSpaces
 echo "-- Start DataSpaces server "$SERVER" on $STAGINGPROC PEs, -s$STAGINGPROC -c$PROCALL"
-mpirun -np $STAGINGPROC $SERVER -s$STAGINGPROC -c$PROCALL &> log.server &
+mpirun -np $STAGINGPROC -npernode $STAGINGPROC_PER_NODE $SERVER -s$STAGINGPROC -c$PROCALL &> log.server &
 
 ## Give some time for the servers to load and startup
 sleep 1s
@@ -54,7 +56,7 @@ mpirun -np $WRITEPROC ./genarray_stream genarray.bp $WRITEPROC 1 1 16 32 64 5 10
 
 # Start STAGE_WRITE
 echo "-- Start STAGE_WRITE on $READPROC PEs"
-mpirun -np $READPROC ./stage_write genarray.bp staged.bp MPI \"\" $READPROC 1 1 >& log.stage_write &
+mpirun -np $READPROC ./stage_write genarray.bp staged.bp DATASPACES \"\" MPI \"\" $READPROC 1 1 >& log.stage_write &
 
 echo "-- Wait until all applications exit. Run ./check.sh to see status"
 wait
diff --git a/examples/staging/stage_write/make.settings b/examples/staging/stage_write/make.settings
new file mode 100644
index 0000000..3b26f8b
--- /dev/null
+++ b/examples/staging/stage_write/make.settings
@@ -0,0 +1,17 @@
+TARGET=pgi
+
+## Set ADIOS_DIR here or before doing make
+override ADIOS_DIR=/ccs/proj/e2e/pnorbert/ADIOS/sith.${TARGET}
+
+## mpicc and mpif90 SETTINGS
+CC=mpicc
+FC=mpif90
+CFLAGS=-g
+LDFLAGS=-g
+
+## cc/ftn SETTINGS
+#CC=cc
+#FC=ftn
+#CFLAGS = -O3
+#LDFLAGS =
+
diff --git a/examples/staging/stage_write/stage_write.c b/examples/staging/stage_write/stage_write.c
index af6f1e9..0f24fc8 100644
--- a/examples/staging/stage_write/stage_write.c
+++ b/examples/staging/stage_write/stage_write.c
@@ -28,19 +28,19 @@
 #include "adios_read.h"
 #include "adios_error.h"
 
-//static enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_BP;
-static enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_DATASPACES;
-
 // Input arguments
 char   infilename[256];    // File/stream to read 
 char   outfilename[256];   // File to write
-char   methodname[16];     // ADIOS write method
-char   methodparams[256];  // ADIOS write method
+char   wmethodname[16];     // ADIOS write method
+char   wmethodparams[256];  // ADIOS write method
+char   rmethodname[16];     // ADIOS read method
+char   rmethodparams[256];  // ADIOS read method
+enum ADIOS_READ_METHOD read_method;
 
 static const int max_read_buffer_size  = 1024*1024*1024;
 static const int max_write_buffer_size = 1024*1024*1024;
 
-static int timeout_sec = 600; // will stop if no data found for this time (-1: never stop)
+static int timeout_sec = 30; // will stop if no data found for this time (-1: never stop)
 
 
 // Global variables
@@ -61,10 +61,13 @@ int read_write(int step);
 
 void printUsage(char *prgname)
 {
-    print0("Usage: %s input output method \"params\" <decomposition>\n"
+    print0("Usage: %s input output rmethod \"params\" wmethod \"params\" <decomposition>\n"
            "    input   Input stream path\n"
            "    output  Output file path\n"
-           "    method  ADIOS method to write with\n"
+           "    rmethod ADIOS method to read with\n"
+           "            Supported read methods: BP, DATASPACES, DIMES, FLEXPATH\n"
+           "    params  Read method parameters (in quotes; comma-separated list)\n"
+           "    wmethod ADIOS method to write with\n"
            "    params  Write method parameters (in quotes; comma-separated list)\n"
            "    <decomposition>    list of numbers e.g. 32 8 4\n"
            "            Decomposition values in each dimension of an array\n"
@@ -88,12 +91,14 @@ int processArgs(int argc, char ** argv)
     }
     strncpy(infilename,     argv[1], sizeof(infilename));
     strncpy(outfilename,    argv[2], sizeof(outfilename));
-    strncpy(methodname,     argv[3], sizeof(methodname));
-    strncpy(methodparams,   argv[4], sizeof(methodparams));
+    strncpy(rmethodname,    argv[3], sizeof(rmethodname));
+    strncpy(rmethodparams,  argv[4], sizeof(rmethodparams));
+    strncpy(wmethodname,    argv[5], sizeof(wmethodname));
+    strncpy(wmethodparams,  argv[6], sizeof(wmethodparams));
     
     nd = 0;
-    j = 5;
-    while (argc > j && j<11) { // get max 6 dimensions
+    j = 7;
+    while (argc > j && j<13) { // get max 6 dimensions
         errno = 0; 
         decomp_values[nd] = strtol(argv[j], &end, 10); 
         if (errno || (end != 0 && *end != '\0')) { 
@@ -127,6 +132,25 @@ int processArgs(int argc, char ** argv)
         return 1; 
     }
 
+    if (!strcmp(rmethodname,"BP")) {
+        read_method = ADIOS_READ_METHOD_BP;
+    } else if (!strcmp(rmethodname,"DATASPACES")) {
+        read_method = ADIOS_READ_METHOD_DATASPACES;
+    } else if (!strcmp(rmethodname,"DIMES")) {
+        read_method = ADIOS_READ_METHOD_DIMES;
+    } else if (!strcmp(rmethodname,"FLEXPATH")) {
+        read_method = ADIOS_READ_METHOD_FLEXPATH;
+    } else {
+        print0 ("ERROR: Supported read methods are: BP, DATASPACES, DIMES, FLEXPATH. You selected %s\n", rmethodname);
+    }
+    
+    if (!strcmp(rmethodparams,"")) {
+        strcpy (rmethodparams, "max_chunk_size=100; "
+                               "app_id =32767; \n"
+                               "verbose= 3;"
+                               "poll_interval  =  100;");
+    }
+
     return 0;
 }
 
@@ -146,10 +170,12 @@ int main (int argc, char ** argv)
         return 1;
     }
     
-    print0("Input stream      = %s\n", infilename);
-    print0("Output stream     = %s\n", outfilename);
-    print0("Method            = %s\n", methodname);
-    print0("Method parameters = %s\n", methodparams);
+    print0("Input stream            = %s\n", infilename);
+    print0("Output stream           = %s\n", outfilename);
+    print0("Read method             = %s (id=%d)\n", rmethodname, read_method);
+    print0("Read method parameters  = \"%s\"\n", rmethodparams);
+    print0("Write method            = %s\n", wmethodname);
+    print0("Write method parameters = \"%s\"\n", wmethodparams);
     
 
     err = adios_read_init_method(read_method, comm, 
@@ -191,7 +217,8 @@ int main (int argc, char ** argv)
                    rank, f->current_step);
         }
 
-        while (adios_errno != err_end_of_stream) {
+        while (1)
+        {
             steps++; // start counting from 1
 
             print0 ("File info:\n");
@@ -209,14 +236,19 @@ int main (int argc, char ** argv)
             curr_step = f->current_step; // save for final bye print
             adios_advance_step (f, 0, timeout_sec);
 
-            if (adios_errno == err_step_notready) 
+            if (adios_errno == err_end_of_stream) 
+            {
+                break; // quit while loop
+            }
+            else if (adios_errno == err_step_notready) 
             {
                 print ("rank %d: No new step arrived within the timeout. Quit. %s\n", 
-                       rank, adios_errmsg());
+                        rank, adios_errmsg());
                 break; // quit while loop
             } 
             else if (f->current_step != curr_step+1) 
             {
+                // we missed some steps
                 print ("rank %d: WARNING: steps %d..%d were missed when advancing.\n", 
                         rank, curr_step+1, f->current_step-1);
             }
@@ -338,7 +370,7 @@ int process_metadata(int step)
     }
 
     // Select output method
-    adios_select_method (gh, methodname, methodparams, "");
+    adios_select_method (gh, wmethodname, wmethodparams, "");
 
     // Define variables for output based on decomposition
     char *vpath, *vname;
@@ -384,9 +416,18 @@ int process_metadata(int step)
         {
             adios_get_attr_byid (f, i, &attr_type, &attr_size, &attr_value);
             attr_value_str = (char *)value_to_string (attr_type, attr_value, 0);
-            adios_define_attribute (gh, f->attr_namelist[i], "",
-                                    attr_type, attr_value_str, "");
-            free (attr_value);
+            getbasename (f->attr_namelist[i], &vpath, &vname);
+            if (vpath && !strcmp(vpath,"/__adios__")) { 
+                // skip on /__adios/... attributes 
+                print ("rank %d: Ignore this attribute path=\"%s\" name=\"%s\" value=\"%s\"\n",
+                        rank, vpath, vname, attr_value_str);
+            } else {
+                adios_define_attribute (gh, vname, vpath,
+                        attr_type, attr_value_str, "");
+                print ("rank %d: Define attribute path=\"%s\" name=\"%s\" value=\"%s\"\n",
+                        rank, vpath, vname, attr_value_str);
+                free (attr_value);
+            }
         }
     }
 
diff --git a/examples/staging/stage_write/utils.c b/examples/staging/stage_write/utils.c
index c03583c..c815940 100644
--- a/examples/staging/stage_write/utils.c
+++ b/examples/staging/stage_write/utils.c
@@ -140,7 +140,7 @@ void getbasename (char *path, char **dirname, char **basename)
         *basename = strdup(ptr+1);
     } else if (ptr == work) {
         // found / as the first character 
-        *dirname = strdup("");
+        *dirname = strdup("/");
         *basename = strdup(ptr+1);
     } else {
         *dirname = NULL; //strdup(".");
diff --git a/examples/staging/stage_write/x.bp.dir/x.bp.0 b/examples/staging/stage_write/x.bp.dir/x.bp.0
deleted file mode 100644
index 3e0fbc3..0000000
Binary files a/examples/staging/stage_write/x.bp.dir/x.bp.0 and /dev/null differ
diff --git a/runconf b/runconf
index 8df501a..1250bbc 100755
--- a/runconf
+++ b/runconf
@@ -4,6 +4,8 @@
 # You can study it to figure out how to configure adios on your system
 #
 
+SRCDIR=`dirname ${BASH_SOURCE[0]}`
+
 if [ `hostname | cut -c 1-4` == "sith" ]; then
 
     ########
@@ -16,7 +18,7 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         echo "Cannot determine Programming environment. Exit"
         exit 1
     fi
-    echo "Configure on SITH for $TARGET env."
+    echo "Configure on SITH for $TARGET env. for user $USER"
     source /etc/profile.d/modules.sh
     module unload hdf5
     module unload netcdf
@@ -28,6 +30,8 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     module unload python
     module load PE-$TARGET
     module load mxml
+    MXMLDIR=$MXML_DIR
+    module unload mxml
     module load python
     # Use both seq hdf5 (for utils) and 
     #   parallel hdf5 (for PHDF5 method)
@@ -48,6 +52,8 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
     PAR_NC_DIR=$NETCDF_DIR
     PAR_NC_CLIB=$NETCDF_CLIB
     module unload netcdf
+    module load szip
+    module load bzip2
     export MPICC=mpicc
     export MPICXX=mpiCC
     export MPIFC=mpif90
@@ -76,12 +82,11 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-g -fPIC" 
-    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/sith.$TARGET \
+    $SRCDIR/configure --prefix=/ccs/proj/e2e/$USER/ADIOS/sith.$TARGET \
         --enable-dependency-tracking \
         --enable-research-transports \
         --with-lustre=/usr/lib64 \
-        $WITHDART \
-        $WITHFLEX \
+        --with-mxml=$MXMLDIR \
         --with-hdf5=${SEQ_HDF5_DIR} \
         --with-hdf5-libs="${SEQ_HDF5_CLIB}" \
         --with-phdf5=${PAR_HDF5_DIR} \
@@ -89,7 +94,14 @@ if [ `hostname | cut -c 1-4` == "sith" ]; then
         --with-netcdf=${SEQ_NC_DIR} \
         --with-netcdf-libs="${SEQ_NC_CLIB}" \
         --with-nc4par=${PAR_NC_DIR} \
-        --with-nc4par-libs="${PAR_NC_CLIB}" 
+        --with-nc4par-libs="${PAR_NC_CLIB}" \
+        --with-zlib=/lib64 \
+        --with-szip=$SZIP_DIR \
+        --with-bzip2=$BZIP2_DIR \
+        $WITHDART \
+        $WITHFLEX \
+        --with-aplod=/ccs/proj/e2e/ncsu/sith.gnu \
+        --with-isobar=/ccs/proj/e2e/ncsu/sith.gnu
         #--with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.sith.$TARGET 
         #--with-dmalloc=/ccs/proj/e2e/pnorbert/dmalloc.$TARGET 
         #--enable-shared --disable-static
@@ -165,7 +177,7 @@ elif [ `hostname | cut -c 1-4` == "yona" ]; then
     fi
         
     export CFLAGS="-g -fPIC" 
-    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/yona.$TARGET \
         --enable-dependency-tracking \
         --enable-research-transports  \
         --with-hdf5=${SEQ_HDF5_DIR} \
@@ -231,7 +243,7 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
     fi
 
     export CFLAGS="-g -fPIC"
-    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/lens.$TARGET \
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/lens.$TARGET \
         --enable-dependency-tracking \
         --enable-research-transports  \
         --with-hdf5=${SEQ_HDF5_DIR} \
@@ -239,10 +251,9 @@ elif [ `hostname | cut -c 1-4` == "lens" ]; then
         --without-datatap
         #--with-mxml=/ccs/proj/e2e/pnorbert/mxml \
 
-
 elif [ `hostname | cut -c 1-5` == "titan" ]; then
 
-    BUILD_STAGING=true
+    BUILD_STAGING=false
     if [ $BUILD_STAGING == "false" ]; then
     
         ################
@@ -267,6 +278,8 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         module unload PrgEnv-cray
         #module unload papi
         module load PrgEnv-$TARGET
+        #module unload intel
+        #module load intel/13.1.3.192
         module swap xtpe-interlagos xtpe-istanbul
         #module load szip
         #module load xt-papi
@@ -274,9 +287,8 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         # use the two lines below for openmpi
         #export CC=mpicc
         #export FC=mpif90
-        CFLAGS="-g -fPIC" ./configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
-            --host=titan --host_alias=titan  \
-            --enable-dependency-tracking \
+        CFLAGS="-g -fPIC -O0" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
+            --enable-dependency-tracking
             #--with-hdf5=/opt/cray/hdf5/1.8.7/pgi/109 \
             #--with-phdf5=/opt/cray/hdf5-parallel/1.8.7/pgi/109 \
 #            --with-lustre=/opt/xt-lustre-ss/2.2_1.6.5/usr
@@ -342,13 +354,14 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
         #export FC=mpif90
         export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DDART_DO_VERSIONING" 
         export CFLAGS="-fPIC -g -O0" 
-        #./configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
-        ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/titan.$TARGET \
+        #${SRCDIR}/configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
+        ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/titan.$TARGET \
         --enable-dependency-tracking \
         --with-cray-pmi=/opt/cray/pmi/default \
         --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
         --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
-        --with-dataspaces=$DATASPACES_DIR 
+        --with-dataspaces=$DATASPACES_DIR \
+        --with-dimes=$DATASPACES_DIR 
         #--with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
         #--with-hdf5=/sw/xt5/hdf5/1.8.2/cnl2.1_gnu4.2.0 \
         #--with-nc4par=/opt/cray/netcdf-hdf5parallel/4.0.1.3/netcdf-hdf5parallel-$TARGET \
@@ -362,6 +375,52 @@ elif [ `hostname | cut -c 1-5` == "titan" ]; then
     
 
 
+elif [ `hostname | cut -c 1-4` == "eos-" ]; then
+
+      #################
+      # EOS Cray XC30 #
+      #################
+      TARGET=`module list 2>&1 | grep "PrgEnv"- | sed "s/^.*PrgEnv-\([a-z]*\).*/\1/"`
+      echo "Configure on EOS (Cray XC30) for $TARGET env."
+      export CC=cc
+      #export CFLAGS="-Wall -g" 
+      export FC=ftn
+      export CXX=CC
+      source /opt/modules/default/etc/modules.sh
+      module unload szip
+      module unload hdf5
+      module unload netcdf
+      module unload netcdf-hdf5parallel
+      module unload hdf5-parallel
+      module unload PrgEnv-gnu
+      module unload PrgEnv-pgi
+      module unload PrgEnv-intel
+      module unload PrgEnv-cray
+      module unload papi
+      module unload pmi
+      module load PrgEnv-$TARGET
+      if [ "$TARGET" == "pgi" ]; then
+          # NSSI needs -pgcpplibs flag 
+          export LDFLAGS="-pgcpplibs" 
+          unset EXTRA_LIBS 
+      elif [ "$TARGET" == "gnu" ]; then
+          # NSSI needs libstdc++
+          unset LDFLAGS 
+          export EXTRA_LIBS="/opt/gcc/4.8.1/snos/lib64/libstdc++.a"
+          module swap gcc gcc/4.8.1
+      else
+          unset LDFLAGS 
+          unset EXTRA_LIBS 
+      fi
+      module load mxml
+      module load pmi
+      CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/chester.$TARGET \
+          --enable-dependency-tracking \
+          --with-cray-pmi=/opt/cray/pmi/default \
+          --with-cray-ugni-incdir=/opt/cray/gni-headers/default/include \
+          --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
+            
+
 elif [ `hostname | cut -c 1-7` == "chester" ]; then
 
       ###############
@@ -386,13 +445,14 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       module unload papi
       module unload pmi
       module load PrgEnv-$TARGET
-      module load dataspaces/1.0.0
+      #module load dataspaces/1.0.0
       if [ "$TARGET" == "pgi" ]; then
           module swap pgi pgi/11.8.0
           # NSSI needs -pgcpplibs flag 
           export LDFLAGS="-pgcpplibs" 
           unset EXTRA_LIBS 
-          WITHDART="--with-dataspaces=$DATASPACES_DIR"
+          #WITHDART="--with-dataspaces=$DATASPACES_DIR"
+          WITHDART="--with-dataspaces=/ccs/proj/e2e/dataspaces/chester/pgi --with-dimes=/ccs/proj/e2e/dataspaces/chester/pgi"
       elif [ "$TARGET" == "gnu" ]; then
           # NSSI needs libstdc++
           unset LDFLAGS 
@@ -411,12 +471,12 @@ elif [ `hostname | cut -c 1-7` == "chester" ]; then
       # use the two lines below for openmpi
       #export CC=mpicc
       #export FC=mpif90
-      CFLAGS="-g -fPIC" ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/chester.$TARGET \
-          --enable-dependency-tracking 
-#          --with-cray-pmi=/opt/cray/pmi/default \
-#          --with-cray-ugni-incdir=/opt/cray/gni-headers/2.1-1.0400.4351.3.1.gem/include \
-#          --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
-#          $WITHDART
+      CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/chester.$TARGET \
+          --enable-dependency-tracking \
+          --with-cray-pmi=/opt/cray/pmi/default \
+          --with-cray-ugni-incdir=/opt/cray/gni-headers/2.1-1.0400.4351.3.1.gem/include \
+          --with-cray-ugni-libdir=/opt/cray/ugni/default/lib \
+          $WITHDART
 #            --with-lustre=/opt/xt-lustre-ss/2.2_1.6.5/usr \
 #            --with-dmalloc=/ccs/proj/e2e/qliu/dmalloc.$TARGET \
 #            --enable-research-transports \
@@ -476,7 +536,7 @@ elif [ `hostname | cut -c 1-5` == "smoky" ]; then
     fi
         
     export CFLAGS="-g -fPIC" 
-    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/smoky.$TARGET \
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/smoky.$TARGET \
         --enable-dependency-tracking \
         --enable-research-transports  \
         --with-mxml=/ccs/proj/e2e/pnorbert/mxml.smoky.$TARGET \
@@ -527,7 +587,7 @@ elif [ `hostname | cut -c 1-6` == "jaguar" ]; then
         # use the two lines below for openmpi
         #export CC=mpicc
         #export FC=mpif90
-        CFLAGS="-g -fPIC" ./configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
+        CFLAGS="-g -fPIC" ${SRCDIR}/configure --prefix=/ccs/proj/e2e/qliu/ADIOS/test.$TARGET \
             --enable-dependency-tracking \
             --with-mxml=/ccs/proj/e2e/pnorbert/mxml.xt5.pgi \
             --with-hdf5=/opt/cray/hdf5/1.8.7/pgi/109 \
@@ -591,8 +651,8 @@ elif [ `hostname | cut -c 1-6` == "jaguar" ]; then
         #export FC=mpif90
         export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DDART_DO_VERSIONING" 
         export CFLAGS="-fPIC -g -O0" 
-        #./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/xt5.$TARGET \
-        ./configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
+        #${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/xt5.$TARGET \
+        ${SRCDIR}/configure --prefix=/ccs/proj/fus022/norbert/RMP/adios.xt5.$TARGET \
         --enable-dependency-tracking \
         --with-portals=/opt/xt-pe/2.2.41A \
         --with-netcdf=/opt/cray/netcdf/3.6.2/netcdf-${TARGET} \
@@ -618,10 +678,48 @@ elif [ "x"`hostname -f | cut -c 8-15` == "xintrepid" ]; then
     export FC=xlf90
     export CC=xlc_r
 
-    ./configure --prefix=/home/qliu/ADIOS \
+    ${SRCDIR}/configure --prefix=/home/qliu/ADIOS \
             --enable-dependency-tracking \
             --with-mxml=/home/qliu/mxml
 
+elif [ `hostname -f | cut -c 1-4` == "mira" ]; then
+    #####################
+    #  MIRA   BlueGene  #
+    #####################
+    echo "Configure on Mira (BlueGene/Q)"
+    #export MPICC=mpicc
+    #export MPIFC=mpif90
+    #export CFLAGS=""
+    #export FC=gfortran
+    #export CC=gcc
+    #export FCFLAGS="-funderscoring"
+    export MPICC=mpixlc_r
+    export MPIFC=mpixlf90_r
+    export CFLAGS=""
+    export FC=xlf90_r
+    export CC=xlc_r
+
+    ${SRCDIR}/configure --prefix=/home/qliu/4se/ADIOS \
+            --enable-dependency-tracking \
+            --with-mxml=/home/qliu/mxml \
+            --without-datatap --without-infiniband --with-bgq
+
+elif [ `hostname -f | cut -c 1-5` == "vesta" ]; then
+    ######################
+    #  VESTA   BlueGene  #
+    ######################
+    echo "Configure on Vesta (BlueGene/Q)"
+    export MPICC=mpixlc_r
+    export MPIFC=mpixlf90
+    export CFLAGS=""
+    export FC=bgxlf90
+    export CC=bgxlc
+
+    ${SRCDIR}/configure --prefix=/home/qliu/ADIOS \
+            --enable-dependency-tracking \
+            --with-mxml=/home/qliu/mxml \
+            --without-datatap --without-infiniband --with-bgq
+
 elif [ `hostname | cut -c 1-4` == "euge" ]; then
     ###################
     # Eugene BlueGene #
@@ -645,7 +743,7 @@ elif [ `hostname | cut -c 1-4` == "euge" ]; then
     export HDF5_CLIB="-I/sw/bgp/hdf5/1.8.5/sles10.2_xlc9.0xlf11.1/install/include -L/sw/bgp/hdf5/1.8.5/sles10.2_xlc9.0xlf11.1/install/lib -lhdf5_hl -lhdf5 -L/sw/bgp/szip/2.1/sles10.1_xlc9.0/lib -lsz /usr/lib/libz.a"
     module load mxml
 
-    ./configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/eugene \
+    ${SRCDIR}/configure --prefix=/ccs/proj/e2e/pnorbert/ADIOS/eugene \
             --enable-dependency-tracking \
             --with-hdf5=$HDF5_DIR \
             --with-hdf5-libs="$HDF5_CLIB" \
@@ -676,8 +774,8 @@ elif [ `hostname | cut -c 1-4` == "nid0" ]; then
     export LDFLAGS="-pgcpplibs"
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
-    #./configure --prefix=/project/projectdirs/m499/adios \
-    ./configure --prefix=/global/homes/p/pnorbert/adios \
+    #${SRCDIR}/configure --prefix=/project/projectdirs/m499/adios \
+    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios \
         --enable-dependency-tracking \
         --with-mxml=$HOME/mxml \
         --with-hdf5=/opt/cray/hdf5/1.8.5.0/hdf5-${TARGET} \
@@ -731,7 +829,7 @@ elif [ `hostname | cut -c 1-6` == "hopper" ]; then
     fi
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK"
     export CFLAGS="-fPIC"
-    ./configure --prefix=/global/homes/p/pnorbert/adios/1.4.1/hopper/$TARGET \
+    ${SRCDIR}/configure --prefix=/global/homes/p/pnorbert/adios/1.4.1/hopper/$TARGET \
         --enable-dependency-tracking \
         --with-mxml=$HOME/mxml/mxml.hopper \
         --with-lustre=/usr \
@@ -784,11 +882,11 @@ elif [ `hostname | cut -c 1-6` == "kraken" ]; then
     module load subversion
     export CPPFLAGS="-DMPICH_IGNORE_CXX_SEEK" 
     export CFLAGS="-fPIC -g -O0" 
-    ./configure --prefix=/${HOME}/adios/$TARGET \
+    ${SRCDIR}/configure --prefix=/${HOME}/adios/$TARGET \
         --enable-dependency-tracking \
         --with-portals=yes \
         --without-netcdf --without-nc4par --without-hdf5 --without-phdf5 \
-        --with-dataspaces=${HOME}/dataspaces/1.0.0/$TARGET
+        --with-dataspaces=${HOME}/dataspaces/1.3.0/$TARGET
 
 
 elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ]; then
@@ -805,7 +903,7 @@ elif [ `hostname | cut -c 1-4` == "dyn9" -o `hostname | cut -c 1-3` == "pnb" ];
     export MPICC=/opt/local/bin/openmpicc
     export MPIFC=/opt/local/bin/openmpif90
     export MPICXX=/opt/local/bin/openmpicxx
-    CFLAGS="-g -DO_LARGEFILE=0 -fno-common" ./configure --prefix=/opt/adios \
+    CFLAGS="-g -DO_LARGEFILE=0 -fno-common" ${SRCDIR}/configure --prefix=/opt/adios \
         --with-mxml=/opt/mxml \
         --with-netcdf=/opt/netcdf \
         --with-phdf5=/opt/hdf5 \
@@ -819,7 +917,7 @@ elif [ `hostname | cut -c 1-7` == "ubuntu" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
-    ./configure --prefix=/usr/local/adios \
+    ${SRCDIR}/configure --prefix=/usr/local/adios \
         --enable-dependency-tracking \
         --with-mxml=/usr/local/adios 
         #--with-hdf5=/usr/local/hdf5-serial\
@@ -827,6 +925,22 @@ elif [ `hostname | cut -c 1-7` == "ubuntu" ]; then
         #--with-netcdf=/usr 
 
 
+elif [ `hostname | cut -c 1-7` == "nostril" ]; then
+
+    #########################
+    # Dave's workstation    #
+    #########################
+    echo "Configure on Nostril"
+    export CC=mpicc
+    export CFLAGS="-fPIC"
+    ${SRCDIR}/configure --prefix=/apps/adios/trunk \
+        --enable-dependency-tracking \
+        --with-mxml=/usr \
+        --without-netcdf --without-nc4par --without-hdf5 --without-phdf5
+        #--with-hdf5=/usr/local/hdf5-serial\
+        #--with-phdf5=/usr/local \
+
+
 elif [ `hostname | cut -c 1-6` == "tomato" ]; then
 
     #########################
@@ -834,7 +948,7 @@ elif [ `hostname | cut -c 1-6` == "tomato" ]; then
     #########################
     echo "Configure on UBUNTU"
     export CC=mpicc
-    ./configure --prefix=/home/thkorde/local \
+    ${SRCDIR}/configure --prefix=/home/thkorde/local \
         --enable-dependency-tracking \
         --with-mxml=/home/thkorde/local \
         --with-phdf5=/home/thkorde/local \
@@ -850,10 +964,10 @@ elif [ `hostname | cut -c 1-4` == "qliu" ]; then
     echo "Configure on UBUNTU"
     export CC=mpicc
     export CFLAGS="-g -O0 -fPIC"
-    ./configure --prefix=/home/qliu/ADIOS \
+    ${SRCDIR}/configure --prefix=/home/qliu/ADIOS \
         --enable-dependency-tracking \
         --with-mxml=/home/qliu/mxml \
-        #--with-phdf5=/home/thkorde/local \
+    --with-phdf5=/home/thkorde/local \
         #--with-hdf5=/home/thkorde/local \
         #--with-netcdf=/home/thkorde/local
 
@@ -870,14 +984,15 @@ elif [ `hostname | cut -c 1-7` == "esimmon" ]; then
     export CXX=g++
     export FC=gfortran
 
-    #export CFLAGS="-g -fPIC" 
-    ./configure --prefix=/opt/adios/1.5.0 \
+    #export CFLAGS="-g -O0 -fPIC" 
+    ${SRCDIR}/configure --prefix=/opt/adios/1.6 \
         --enable-dependency-tracking \
         --with-mxml=/opt/mxml \
         --with-hdf5=/opt/hdf5 \
         --with-phdf5=/opt/phdf5 \
         --with-netcdf=/opt/netcdf3 \
         --with-nc4par=/opt/nc4par \
+        --with-zlib=/usr \
         --with-flexpath=/opt/chaos
 
 else
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9828bc2..2ee45ca 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,6 @@
-include_directories(${PROJECT_SOURCE_DIR}/src)
-include_directories(${PROJECT_BINARY_DIR}/src)
 include_directories(${PROJECT_BINARY_DIR})
+include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/core ${PROJECT_SOURCE_DIR}/src/core/transforms)
+include_directories(${PROJECT_BINARY_DIR}/src)
 link_directories(${PROJECT_BINARY_DIR}/src)
 
 if(HAVE_NSSI)
@@ -28,6 +28,66 @@ set(libadiosreadf_a_CFLAGS "")
 set(libadiosread_nompi_a_CFLAGS "")
 set(libadiosreadf_nompi_a_CFLAGS "")
 
+set (transforms_common_HDRS core/adios_copyspec.h 
+                         core/adios_subvolume.h 
+                         core/adios_selection_util.h 
+                         core/transforms/adios_transforms_common.h 
+                         core/transforms/adios_transforms_hooks.h 
+                         core/transforms/adios_transforms_util.h 
+                         core/adios_subvolume.h)
+
+set (transforms_read_HDRS core/transforms/adios_transforms_transinfo.h 
+                       core/transforms/adios_transforms_read.h 
+                       core/transforms/adios_transforms_hooks_read.h 
+                       core/transforms/adios_transforms_reqgroup.h 
+                       core/transforms/adios_transforms_datablock.h
+		               core/transforms/adios_patchdata.h)
+
+set (transforms_write_HDRS  core/transforms/adios_transforms_write.h 
+                        core/transforms/adios_transforms_hooks_write.h 
+                        core/transforms/adios_transforms_specparse.h)
+
+set (transforms_common_SOURCES  ${transforms_common_HDRS} 
+                            core/transforms/adios_transforms_common.c 
+                            core/transforms/adios_transforms_hooks.c 
+                            core/adios_copyspec.c 
+                            core/adios_subvolume.c 
+                            core/transforms/plugindetect/detect_plugin_infos.h 
+                            core/transforms/plugindetect/detect_plugin_types.h 
+                            core/transforms/plugindetect/plugin_info_types.h)
+
+set (transforms_read_SOURCES ${transforms_read_HDRS} 
+                          core/transforms/adios_transforms_read.c 
+                          core/transforms/adios_transforms_hooks_read.c 
+                          core/transforms/adios_transforms_reqgroup.c 
+                          core/transforms/adios_transforms_datablock.c 
+                          core/transforms/adios_patchdata.c 
+              			  transforms/adios_transform_alacrity_read.c 
+			              transforms/adios_transform_isobar_read.c 
+               			  transforms/adios_transform_aplod_read.c 
+			              transforms/adios_transform_szip_read.c 
+               			  transforms/adios_transform_bzip2_read.c 
+               			  transforms/adios_transform_template_read.c 
+               			  transforms/adios_transform_identity_read.c 
+               			  transforms/adios_transform_zlib_read.c 
+                          core/adios_selection_util.c 
+                          ${transforms_read_method_SOURCES})
+
+set (transforms_write_SOURCES ${transforms_write_HDRS} 
+                           core/transforms/adios_transforms_write.c 
+                           core/transforms/adios_transforms_hooks_write.c 
+                           core/transforms/adios_transforms_util.c 
+                           core/transforms/adios_transforms_specparse.c 
+               			   transforms/adios_transform_alacrity_write.c
+               			   transforms/adios_transform_aplod_write.c
+               			   transforms/adios_transform_bzip2_write.c
+               			   transforms/adios_transform_identity_write.c
+               			   transforms/adios_transform_isobar_write.c
+               			   transforms/adios_transform_szip_write.c
+               			   transforms/adios_transform_template_write.c
+               			   transforms/adios_transform_zlib_write.c
+                           ${transforms_write_method_SOURCES})
+
 #start adios.a and adios_nompi.a
 if(BUILD_WRITE)
   set(libadios_a_SOURCES core/adios.c 
@@ -49,7 +109,12 @@ if(BUILD_WRITE)
                      core/adios_transport_hooks.c 
                      core/adios_socket.c 
                      core/adios_logger.c 
+                     core/qhashtbl.c 
+                     ${transforms_common_SOURCES} 
+                     ${transforms_read_SOURCES} 
+                     ${transforms_write_SOURCES} 
                      core/util.c 
+                     core/qhashtbl.c 
                      read/read_bp.c 
                      read/read_bp_staged.c 
                      read/read_bp_staged1.c
@@ -60,10 +125,17 @@ if(BUILD_WRITE)
                      write/adios_posix1.c
                      write/adios_var_merge.c)
 
-set(libadios_nompi_a_SOURCES core/adios.c 
+  if(HAVE_BGQ)
+    set(libadios_a_SOURCES ${libadios_a_SOURCES} write/adios_mpi_bgq.c)
+  endif()
+
+  set(libadios_nompi_a_SOURCES core/adios.c 
                      core/common_adios.c 
                      core/adios_internals.c 
                      core/adios_internals_mxml.c 
+                     ${transforms_common_SOURCES} 
+                     ${transforms_read_SOURCES} 
+                     ${transforms_write_SOURCES} 
                      core/buffer.c 
                      core/adios_bp_v1.c  
                      core/adios_endianness.c 
@@ -81,6 +153,7 @@ set(libadios_nompi_a_SOURCES core/adios.c
                      core/adios_socket.c 
                      core/adios_logger.c 
                      core/util.c 
+                     core/qhashtbl.c 
                      read/read_bp.c 
                      read/read_bp_staged.c 
                      read/read_bp_staged1.c 
@@ -93,6 +166,9 @@ set(libadios_nompi_a_SOURCES core/adios.c
                        core/common_adios.c 
                        core/adios_internals.c 
                        core/adios_internals_mxml.c
+                       ${transforms_common_SOURCES} 
+        		       ${transforms_read_SOURCES} 
+                       ${transforms_write_SOURCES} 
                        core/buffer.c 
                        core/adios_bp_v1.c  
                        core/adios_endianness.c
@@ -107,6 +183,7 @@ set(libadios_nompi_a_SOURCES core/adios.c
                        core/adios_socket.c 
                        core/adios_logger.c 
                        core/util.c 
+                       core/qhashtbl.c 
                        read/read_bp.c 
                        read/read_bp_staged.c 
                        read/read_bp_staged1.c 
@@ -117,7 +194,9 @@ set(libadios_nompi_a_SOURCES core/adios.c
                          write/adios_mpi_lustre.c
 	                 write/adios_mpi_amr.c
                          write/adios_var_merge.c)
-
+    if(HAVE_BGQ)
+      set(FortranLibMPISources ${FortranLibMPISources} write/adios_mpi_bgq.c)
+    endif(HAVE_BGQ)
     set(FortranLibSEQSources core/mpidummy.c)
   endif(BUILD_FORTRAN)
 
@@ -216,23 +295,23 @@ set(libadios_nompi_a_SOURCES core/adios.c
 
 
   if(RESEARCH_TRANSPORTS)
-    set(libadios_a_SOURCES ${libadios_a_SOURCES}
-                      write/adios_mpi_stagger.c 
-                      write/adios_mpi_aggregate.c 
-                      write/adios_provenance.c 
-                      write/adios_mpi_cio.c 
-                      write/adios_mpi_stripe.c 
-                      write/adios_mpi_amr1.c 
-                      write/adios_adaptive.ci)
+#    set(libadios_a_SOURCES ${libadios_a_SOURCES}
+#                      write/adios_mpi_stagger.c 
+#                      write/adios_mpi_aggregate.c 
+#                      write/adios_provenance.c 
+#                      write/adios_mpi_cio.c 
+#                      write/adios_mpi_stripe.c 
+#                      write/adios_mpi_amr1.c 
+#                      write/adios_adaptive.c)
     if(BUILD_FORTRAN)
-      set(FortranLibMPISources ${FortranLibMPISources}
-                          write/adios_mpi_stagger.c
-                          write/adios_mpi_aggregate.c
-                          write/adios_provenance.c
-                          write/adios_mpi_cio.c
-                          write/adios_mpi_stripe.c 
-                          write/adios_mpi_amr1.c 
-                          write/adios_adaptive.c)
+#      set(FortranLibMPISources ${FortranLibMPISources}
+#                          write/adios_mpi_stagger.c
+#                          write/adios_mpi_aggregate.c
+#                          write/adios_provenance.c
+#                          write/adios_mpi_cio.c
+#                          write/adios_mpi_stripe.c 
+#                          write/adios_mpi_amr1.c 
+#                          write/adios_adaptive.c)
     endif(BUILD_FORTRAN)
   else(RESEARCH_TRANSPORTS)
     set(libadios_a_CPPFLAGS "${libadios_a_CPPFLAGS} ${MACRODEFFLAG}NO_RESEARCH_TRANSPORTS")
@@ -335,7 +414,8 @@ set(include_HEADERS ${include_HEADERS} public/adios.h
                    public/adios_read_v1.h 
                    public/adios_read_v1_defs.h 
                    public/adios_read_v2.h 
-                   public/adios_selection.h) 
+                   public/adios_selection.h
+                   public/adios_schema.h) 
 
 set(libadiosread_a_SOURCES core/adios_bp_v1.c
                       core/adios_endianness.c 
@@ -345,10 +425,13 @@ set(libadiosread_a_SOURCES core/adios_bp_v1.c
                       core/adios_read.c 
                       core/adios_read_v1.c 
                       core/common_read.c 
+                      ${transforms_common_SOURCES} 
+                      ${transforms_read_SOURCES} 
                       core/globals.c 
                       core/adios_read_hooks.c 
                       core/adios_logger.c 
                       core/util.c 
+                      core/qhashtbl.c 
                       read/read_bp.c 
                       read/read_bp_staged.c 
                       read/read_bp_staged1.c)
@@ -399,10 +482,13 @@ if(BUILD_FORTRAN)
                       core/futils.c 
                       core/adios_error.c 
                       core/common_read.c 
+                      ${transforms_common_SOURCES} 
+                      ${transforms_read_SOURCES} 
                       core/globals.c 
                       core/adios_read_hooks.c 
                       core/adios_logger.c 
                       core/util.c 
+                      core/qhashtbl.c 
                       read/read_bp.c 
                       read/read_bp_staged.c 
                       read/read_bp_staged1.c)
@@ -487,6 +573,8 @@ set(libadiosread_nompi_a_SOURCES core/mpidummy.c
                       core/adios_read.c 
                       core/adios_read_v1.c 
                       core/common_read.c 
+                      ${transforms_common_SOURCES} 
+                      ${transforms_read_SOURCES} 
 #                      core/adios_internals.c 
                       core/adios_logger.c 
                       core/buffer.c 
@@ -494,6 +582,7 @@ set(libadiosread_nompi_a_SOURCES core/mpidummy.c
                       core/adios_read_hooks.c 
 #                      core/adios_transport_hooks.c 
                       core/util.c 
+                      core/qhashtbl.c 
                       read/read_bp.c)
 
 if(HAVE_DMALLOC)
@@ -541,9 +630,12 @@ if(BUILD_FORTRAN)
                           core/adios_error.c 
                           core/adios_logger.c 
                           core/common_read.c 
+                          ${transforms_common_SOURCES} 
+                          ${transforms_read_SOURCES} 
                           core/globals.c 
                           core/adios_read_hooks.c 
                           core/util.c 
+            			  core/qhashtbl.c 
                           read/read_bp.c)
   if(HAVE_DATASPACES)
     set(FortranReadSeqLibSource ${FortranReadSeqLibSource} read/read_dataspaces.c)
@@ -593,12 +685,15 @@ set(libadios_internal_nompi_a_SOURCES core/mpidummy.c
                                     core/adios_endianness.c 
                                     core/bp_utils.c 
                                     core/adios_internals.c 
+                                    ${transforms_common_SOURCES} 
+                                    ${transforms_write_SOURCES} 
                                     core/buffer.c 
                                     core/adios_error.c 
                                     core/adios_logger.c 
                                     core/adios_internals_mxml.c 
                                     core/adios_timing.c 
                                     core/util.c 
+	                			    core/qhashtbl.c 
                                     core/futils.c 
                                     core/adios_transport_hooks.c)
 
@@ -620,8 +715,8 @@ install(FILES ${PROJECT_BINARY_DIR}/src/libadios.a
 	${PROJECT_BINARY_DIR}/src/libadiosreadf_nompi.a
 	${PROJECT_BINARY_DIR}/src/libadiosreadf_nompi_v1.a
 	${PROJECT_BINARY_DIR}/src/libadiosreadf_v1.a
-        ${PROJECT_BINARY_DIR}/src/libadiosf_nompi.a
-        ${PROJECT_BINARY_DIR}/src/libadiosf_nompi_v1.a
+    ${PROJECT_BINARY_DIR}/src/libadiosf_nompi.a
+    ${PROJECT_BINARY_DIR}/src/libadiosf_nompi_v1.a
 	DESTINATION ${libdir})
 
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 32325b9..682456d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-INCLUDES=-I$(top_srcdir) 
+INCLUDES=-I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
 
 AUTOMAKE_OPTIONS = no-dependencies
 METASOURCES=AUTO
@@ -41,6 +41,63 @@ libadiosreadf_a_CFLAGS=
 libadiosread_nompi_a_CFLAGS= 
 libadiosreadf_nompi_a_CFLAGS= 
 
+## Transform plugin source files
+
+transforms_write_method_SOURCES=
+transforms_read_method_SOURCES=
+
+include transforms/Makefile.plugins
+
+##
+## Core transform framework source files
+##
+transforms_common_HDRS = core/adios_copyspec.h \
+                         core/adios_subvolume.h \
+                         core/adios_selection_util.h \
+                         core/transforms/adios_transforms_common.h \
+                         core/transforms/adios_transforms_hooks.h \
+                         core/transforms/adios_transforms_util.h 
+
+transforms_read_HDRS = core/transforms/adios_transforms_transinfo.h \
+                       core/transforms/adios_transforms_read.h \
+                       core/transforms/adios_transforms_hooks_read.h \
+                       core/transforms/adios_transforms_reqgroup.h \
+                       core/transforms/adios_transforms_datablock.h \
+                       core/transforms/adios_patchdata.h
+
+transforms_write_HDRS = core/transforms/adios_transforms_write.h \
+                        core/transforms/adios_transforms_hooks_write.h \
+                        core/transforms/adios_transforms_specparse.h
+
+transforms_common_SOURCES = $(transforms_common_HDRS) \
+                            core/transforms/adios_transforms_common.c \
+                            core/transforms/adios_transforms_hooks.c \
+                            core/adios_copyspec.c \
+                            core/adios_subvolume.c \
+                            core/transforms/plugindetect/detect_plugin_infos.h \
+                            core/transforms/plugindetect/detect_plugin_types.h \
+                            core/transforms/plugindetect/plugin_info_types.h
+
+transforms_read_SOURCES = $(transforms_read_HDRS) \
+                          core/transforms/adios_transforms_read.c \
+                          core/transforms/adios_transforms_hooks_read.c \
+                          core/transforms/adios_transforms_reqgroup.c \
+                          core/transforms/adios_transforms_datablock.c \
+                          core/transforms/adios_patchdata.c \
+                          core/adios_selection_util.c \
+                          core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+                          core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+                          $(transforms_read_method_SOURCES)
+
+transforms_write_SOURCES = $(transforms_write_HDRS) \
+                           core/transforms/adios_transforms_write.c \
+                           core/transforms/adios_transforms_hooks_write.c \
+                           core/transforms/adios_transforms_util.c \
+                           core/transforms/adios_transforms_specparse.c \
+                           core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+                           core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+                           $(transforms_write_method_SOURCES)
+
 if BUILD_WRITE
 lib_LIBRARIES += libadios.a libadios_nompi.a
 libadios_a_SOURCES = core/adios.c \
@@ -63,6 +120,10 @@ libadios_a_SOURCES = core/adios.c \
                      core/adios_socket.c \
                      core/adios_logger.c \
                      core/util.c \
+                     core/qhashtbl.c \
+                     $(transforms_common_SOURCES) \
+                     $(transforms_read_SOURCES) \
+                     $(transforms_write_SOURCES) \
                      read/read_bp.c \
                      read/read_bp_staged.c \
                      read/read_bp_staged1.c \
@@ -72,12 +133,16 @@ libadios_a_SOURCES = core/adios.c \
                      write/adios_posix.c \
                      write/adios_posix1.c \
                      write/adios_var_merge.c 
-
-
+if HAVE_BGQ
+libadios_a_SOURCES += write/adios_mpi_bgq.c 
+endif
 libadios_nompi_a_SOURCES = core/adios.c \
                      core/common_adios.c \
                      core/adios_internals.c \
                      core/adios_internals_mxml.c \
+                     $(transforms_common_SOURCES) \
+                     $(transforms_read_SOURCES) \
+                     $(transforms_write_SOURCES) \
                      core/buffer.c \
                      core/adios_bp_v1.c  \
                      core/adios_endianness.c \
@@ -95,6 +160,7 @@ libadios_nompi_a_SOURCES = core/adios.c \
                      core/adios_socket.c \
                      core/adios_logger.c \
                      core/util.c \
+                     core/qhashtbl.c \
                      read/read_bp.c \
                      read/read_bp_staged.c \
                      read/read_bp_staged1.c \
@@ -109,6 +175,9 @@ FortranLibSources = core/adiosf.c \
                      core/common_adios.c \
                      core/adios_internals.c \
                      core/adios_internals_mxml.c \
+                     $(transforms_common_SOURCES) \
+                     $(transforms_read_SOURCES) \
+                     $(transforms_write_SOURCES) \
                      core/buffer.c \
                      core/adios_bp_v1.c  \
                      core/adios_endianness.c\
@@ -123,6 +192,7 @@ FortranLibSources = core/adiosf.c \
                      core/adios_socket.c \
                      core/adios_logger.c \
                      core/util.c \
+                     core/qhashtbl.c \
                      read/read_bp.c \
                      read/read_bp_staged.c \
                      read/read_bp_staged1.c \
@@ -133,7 +203,9 @@ FortranLibMPISources =  write/adios_mpi.c \
                      write/adios_mpi_lustre.c \
                      write/adios_mpi_amr.c \
                      write/adios_var_merge.c
-
+if HAVE_BGQ
+FortranLibMPISources += write/adios_mpi_bgq.c  
+endif
 FortranLibSEQSources = core/mpidummy.c
 
 endif # BUILD_FORTRAN
@@ -234,21 +306,21 @@ endif # HAVE_NSSI
 
 
 if RESEARCH_TRANSPORTS
-libadios_a_SOURCES += write/adios_mpi_stagger.c \
-                      write/adios_mpi_aggregate.c \
-                      write/adios_provenance.c \
-                      write/adios_mpi_cio.c \
-                      write/adios_mpi_stripe.c \
-                      write/adios_mpi_amr1.c \
-                      write/adios_adaptive.c 
+#libadios_a_SOURCES += write/adios_mpi_stagger.c \
+#                      write/adios_mpi_aggregate.c \
+#                      write/adios_provenance.c \
+#                      write/adios_mpi_cio.c \
+#                      write/adios_mpi_stripe.c \
+#                      write/adios_mpi_amr1.c \
+#                      write/adios_adaptive.c 
 if BUILD_FORTRAN
-FortranLibMPISources += write/adios_mpi_stagger.c \
-                       write/adios_mpi_aggregate.c \
-                       write/adios_provenance.c \
-                       write/adios_mpi_cio.c \
-                       write/adios_mpi_stripe.c \
-                       write/adios_mpi_amr1.c \
-                       write/adios_adaptive.c 
+#FortranLibMPISources += write/adios_mpi_stagger.c \
+#                       write/adios_mpi_aggregate.c \
+#                       write/adios_provenance.c \
+#                       write/adios_mpi_cio.c \
+#                       write/adios_mpi_stripe.c \
+#                       write/adios_mpi_amr1.c \
+#                       write/adios_adaptive.c 
 endif
 else
 libadios_a_CPPFLAGS += $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
@@ -304,7 +376,8 @@ include_HEADERS += public/adios.h \
                    public/adios_read_v1.h \
                    public/adios_read_v1_defs.h \
                    public/adios_read_v2.h \
-                   public/adios_selection.h
+                   public/adios_selection.h \
+				   public/adios_schema.h
 
 
 lib_LIBRARIES += libadiosread.a
@@ -316,10 +389,13 @@ libadiosread_a_SOURCES = core/adios_bp_v1.c \
                       core/adios_read.c \
                       core/adios_read_v1.c \
                       core/common_read.c \
+                      $(transforms_common_SOURCES) \
+                      $(transforms_read_SOURCES) \
                       core/globals.c \
                       core/adios_read_hooks.c \
                       core/adios_logger.c \
                       core/util.c \
+                      core/qhashtbl.c \
                       read/read_bp.c \
                       read/read_bp_staged.c \
                       read/read_bp_staged1.c 
@@ -354,10 +430,13 @@ FortranReadLibSource = core/adios_bp_v1.c \
                       core/futils.c \
                       core/adios_error.c \
                       core/common_read.c \
+                      $(transforms_common_SOURCES) \
+                      $(transforms_read_SOURCES) \
                       core/globals.c \
                       core/adios_read_hooks.c \
                       core/adios_logger.c \
                       core/util.c \
+                      core/qhashtbl.c \
                       read/read_bp.c \
                       read/read_bp_staged.c \
                       read/read_bp_staged1.c 
@@ -413,13 +492,17 @@ libadiosread_nompi_a_SOURCES = core/mpidummy.c\
                       core/adios_read.c \
                       core/adios_read_v1.c \
                       core/common_read.c \
+                      $(transforms_common_SOURCES) \
+                      $(transforms_read_SOURCES) \
                       core/adios_logger.c \
                       core/buffer.c \
                       core/globals.c \
                       core/adios_read_hooks.c \
                       core/util.c \
+                      core/qhashtbl.c \
                       read/read_bp.c 
 
+					  
 if HAVE_DATASPACES
 libadiosread_nompi_a_SOURCES += read/read_dataspaces.c
 endif
@@ -455,9 +538,12 @@ FortranReadSeqLibSource = core/mpidummy.c\
                           core/adios_error.c \
                           core/adios_logger.c \
                           core/common_read.c \
+                          $(transforms_common_SOURCES) \
+                          $(transforms_read_SOURCES) \
                           core/globals.c \
                           core/adios_read_hooks.c \
                           core/util.c \
+                          core/qhashtbl.c \
                           read/read_bp.c 
 if HAVE_DATASPACES
 FortranReadSeqLibSource += read/read_dataspaces.c
@@ -494,12 +580,15 @@ libadios_internal_nompi_a_SOURCES = core/mpidummy.c \
                                     core/adios_endianness.c \
                                     core/bp_utils.c \
                                     core/adios_internals.c \
+                                    $(transforms_common_SOURCES) \
+                                    $(transforms_write_SOURCES) \
                                     core/buffer.c \
                                     core/adios_error.c \
                                     core/adios_logger.c \
                                     core/adios_internals_mxml.c \
                                     core/adios_timing.c \
                                     core/util.c \
+                                    core/qhashtbl.c \
                                     core/futils.c \
                                     core/adios_transport_hooks.c 
 
@@ -543,9 +632,12 @@ CXX=$(MPICXX)
 EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              core/adios_internals.h core/adios_internals_mxml.h core/adios_logger.h \
              core/adios_read_hooks.h core/adios_socket.h core/adios_timing.h \
-             core/adios_transport_hooks.h \
+             $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
+             transforms/transform_plugins.h transforms/adios_transform_identity_read.h \
+	     transforms/adios_transform_szip.h \
+             core/adios_socket.h core/adios_transport_hooks.h \
              core/bp_types.h core/bp_utils.h core/buffer.h core/common_adios.h \
              core/common_read.h core/futils.h core/globals.h core/ds_metadata.h \
-             core/util.h core/flexpath.h \
+             core/util.h core/flexpath.h core/qhashtbl.h \
              nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 3bd65bc..febfc87 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -39,47 +39,50 @@ host_triplet = @host@
 bin_PROGRAMS = $(am__EXEEXT_1)
 @HAVE_NSSI_TRUE at am__append_1 = nssi-staging-server \
 @HAVE_NSSI_TRUE@	nssi-coupling-server
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/transforms/Makefile.plugins
 @BUILD_WRITE_TRUE at am__append_2 = libadios.a libadios_nompi.a
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_3 = libadiosf.a libadiosf_v1.a libadiosf_nompi.a libadiosf_nompi_v1.a
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_4 = write/adios_dataspaces.c read/read_dataspaces.c
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_5 = write/adios_dataspaces.c read/read_dataspaces.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_6 = write/adios_dataspaces.c read/read_dataspaces.c
- at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_7 = write/adios_dimes.c read/read_dimes.c
- at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_8 = write/adios_dimes.c read/read_dimes.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_9 = write/adios_dimes.c read/read_dimes.c
- at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_10 = write/adios_datatap.c read/read_datatap.c
- at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_11 = write/adios_datatap.c read/read_datatap.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_12 = write/adios_datatap.c read/read_datatap.c
- at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_13 = write/adios_phdf5.c 
- at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_14 = $(MACRODEFFLAG)PHDF5 $(MACRODEFFLAG)H5_USE_16_API 
- at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_15 = $(PHDF5_CPPFLAGS)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_16 = write/adios_phdf5.c 
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_17 = $(PHDF5_CPPFLAGS)
- at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_18 = write/adios_nc4.c 
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_19 = write/adios_nc4.c 
- at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_20 = write/adios_flexpath.c  read/read_flexpath.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_21 = write/adios_flexpath.c read/read_flexpath.c
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_22 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_23 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_24 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_25 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_26 = adios_nssi_args.c adios_nssi_args.h
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE at am__append_27 = write/adios_mpi_stagger.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_mpi_aggregate.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_provenance.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_mpi_cio.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_mpi_stripe.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_mpi_amr1.c \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                      write/adios_adaptive.c 
-
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE at am__append_28 = write/adios_mpi_stagger.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_mpi_aggregate.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_provenance.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_mpi_cio.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_mpi_stripe.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_mpi_amr1.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@                       write/adios_adaptive.c 
-
+ at BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__append_3 = write/adios_mpi_bgq.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__append_4 = libadiosf.a libadiosf_v1.a libadiosf_nompi.a libadiosf_nompi_v1.a
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__append_5 = write/adios_mpi_bgq.c  
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_6 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_7 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__append_8 = write/adios_dataspaces.c read/read_dataspaces.c
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_9 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_10 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__append_11 = write/adios_dimes.c read/read_dimes.c
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_12 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_13 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__append_14 = write/adios_datatap.c read/read_datatap.c
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_15 = write/adios_phdf5.c 
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_16 = $(MACRODEFFLAG)PHDF5 $(MACRODEFFLAG)H5_USE_16_API 
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_17 = $(PHDF5_CPPFLAGS)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_18 = write/adios_phdf5.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__append_19 = $(PHDF5_CPPFLAGS)
+ at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_20 = write/adios_nc4.c 
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__append_21 = write/adios_nc4.c 
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_22 = write/adios_flexpath.c  read/read_flexpath.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__append_23 = write/adios_flexpath.c read/read_flexpath.c
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_24 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_25 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_26 = nssi/adios_nssi_config.c write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_27 = $(MACRODEFFLAG)PTL_IFACE_CLIENT=CRAY_USER_NAL $(MACRODEFFLAG)PTL_IFACE_SERVER=CRAY_USER_NAL
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__append_28 = adios_nssi_args.c adios_nssi_args.h
+
+#libadios_a_SOURCES += write/adios_mpi_stagger.c \
+#                      write/adios_mpi_aggregate.c \
+#                      write/adios_provenance.c \
+#                      write/adios_mpi_cio.c \
+#                      write/adios_mpi_stripe.c \
+#                      write/adios_mpi_amr1.c \
+#                      write/adios_adaptive.c 
+#FortranLibMPISources += write/adios_mpi_stagger.c \
+#                       write/adios_mpi_aggregate.c \
+#                       write/adios_provenance.c \
+#                       write/adios_mpi_cio.c \
+#                       write/adios_mpi_stripe.c \
+#                       write/adios_mpi_amr1.c \
+#                       write/adios_adaptive.c 
 @BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_29 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 @BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_30 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
 @BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_FALSE at am__append_31 = $(MACRODEFFLAG)NO_RESEARCH_TRANSPORTS
@@ -138,10 +141,12 @@ bin_PROGRAMS = $(am__EXEEXT_1)
 @HAVE_DMALLOC_TRUE at am__append_69 = $(MACRODEFFLAG)DMALLOC 
 @HAVE_DMALLOC_TRUE at am__append_70 = $(MACRODEFFLAG)DMALLOC 
 subdir = src
-DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -151,14 +156,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -202,41 +211,112 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.c \
 	core/adios_read.c core/adios_read_v1.c core/common_read.c \
 	core/globals.c core/adios_timing.c core/adios_read_hooks.c \
 	core/adios_transport_hooks.c core/adios_socket.c \
-	core/adios_logger.c core/util.c read/read_bp.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c \
+	core/adios_copyspec.h core/adios_subvolume.h \
+	core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c read/read_bp.c \
 	read/read_bp_staged.c read/read_bp_staged1.c write/adios_mpi.c \
 	write/adios_mpi_lustre.c write/adios_mpi_amr.c \
 	write/adios_posix.c write/adios_posix1.c \
-	write/adios_var_merge.c write/adios_dataspaces.c \
-	read/read_dataspaces.c write/adios_dimes.c read/read_dimes.c \
-	write/adios_datatap.c read/read_datatap.c write/adios_phdf5.c \
-	write/adios_nc4.c write/adios_flexpath.c read/read_flexpath.c \
+	write/adios_var_merge.c write/adios_mpi_bgq.c \
+	write/adios_dataspaces.c read/read_dataspaces.c \
+	write/adios_dimes.c read/read_dimes.c write/adios_datatap.c \
+	read/read_datatap.c write/adios_phdf5.c write/adios_nc4.c \
+	write/adios_flexpath.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c write/adios_nssi.c \
-	nssi/adios_nssi_filter.c read/read_nssi.c \
-	write/adios_mpi_stagger.c write/adios_mpi_aggregate.c \
-	write/adios_provenance.c write/adios_mpi_cio.c \
-	write/adios_mpi_stripe.c write/adios_mpi_amr1.c \
-	write/adios_adaptive.c
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_1 = libadios_a-adios_dataspaces.$(OBJEXT) \
+	nssi/adios_nssi_filter.c read/read_nssi.c
+am__objects_1 =
+am__objects_2 = $(am__objects_1) \
+	libadios_a-adios_transforms_common.$(OBJEXT) \
+	libadios_a-adios_transforms_hooks.$(OBJEXT) \
+	libadios_a-adios_copyspec.$(OBJEXT) \
+	libadios_a-adios_subvolume.$(OBJEXT)
+am__objects_3 = libadios_a-adios_transform_identity_read.$(OBJEXT) \
+	libadios_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadios_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadios_a-adios_transform_szip_read.$(OBJEXT) \
+	libadios_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadios_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadios_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_4 = $(am__objects_1) \
+	libadios_a-adios_transforms_read.$(OBJEXT) \
+	libadios_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadios_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadios_a-adios_transforms_datablock.$(OBJEXT) \
+	libadios_a-adios_patchdata.$(OBJEXT) \
+	libadios_a-adios_selection_util.$(OBJEXT) $(am__objects_3)
+am__objects_5 = libadios_a-adios_transform_identity_write.$(OBJEXT) \
+	libadios_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadios_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadios_a-adios_transform_szip_write.$(OBJEXT) \
+	libadios_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadios_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadios_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_6 = $(am__objects_1) \
+	libadios_a-adios_transforms_write.$(OBJEXT) \
+	libadios_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadios_a-adios_transforms_util.$(OBJEXT) \
+	libadios_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_5)
+ at BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_7 = libadios_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_8 = libadios_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadios_a-read_dataspaces.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_2 = libadios_a-adios_dimes.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_9 = libadios_a-adios_dimes.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadios_a-read_dimes.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_3 = libadios_a-adios_datatap.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_10 = libadios_a-adios_datatap.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadios_a-read_datatap.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_4 = libadios_a-adios_phdf5.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_5 = libadios_a-adios_nc4.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_6 = libadios_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_11 = libadios_a-adios_phdf5.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_12 = libadios_a-adios_nc4.$(OBJEXT)
+ at BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_13 = libadios_a-adios_flexpath.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadios_a-read_flexpath.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_7 = libadios_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_14 = libadios_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadios_a-adios_nssi.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadios_a-adios_nssi_filter.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadios_a-read_nssi.$(OBJEXT)
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE at am__objects_8 = libadios_a-adios_mpi_stagger.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_mpi_aggregate.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_provenance.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_mpi_cio.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_mpi_stripe.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_mpi_amr1.$(OBJEXT) \
- at BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadios_a-adios_adaptive.$(OBJEXT)
 @BUILD_WRITE_TRUE at am_libadios_a_OBJECTS = libadios_a-adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-common_adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_internals.$(OBJEXT) \
@@ -257,6 +337,9 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.c \
 @BUILD_WRITE_TRUE@	libadios_a-adios_socket.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_logger.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-util.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_a-qhashtbl.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	$(am__objects_2) $(am__objects_4) \
+ at BUILD_WRITE_TRUE@	$(am__objects_6) \
 @BUILD_WRITE_TRUE@	libadios_a-read_bp.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-read_bp_staged.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-read_bp_staged1.$(OBJEXT) \
@@ -266,10 +349,10 @@ am__libadios_a_SOURCES_DIST = core/adios.c core/common_adios.c \
 @BUILD_WRITE_TRUE@	libadios_a-adios_posix.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_posix1.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_a-adios_var_merge.$(OBJEXT) \
- at BUILD_WRITE_TRUE@	$(am__objects_1) $(am__objects_2) \
- at BUILD_WRITE_TRUE@	$(am__objects_3) $(am__objects_4) \
- at BUILD_WRITE_TRUE@	$(am__objects_5) $(am__objects_6) \
- at BUILD_WRITE_TRUE@	$(am__objects_7) $(am__objects_8)
+ at BUILD_WRITE_TRUE@	$(am__objects_7) $(am__objects_8) \
+ at BUILD_WRITE_TRUE@	$(am__objects_9) $(am__objects_10) \
+ at BUILD_WRITE_TRUE@	$(am__objects_11) $(am__objects_12) \
+ at BUILD_WRITE_TRUE@	$(am__objects_13) $(am__objects_14)
 am__dist_libadios_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadios_a_OBJECTS =
 @BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at nodist_libadios_a_OBJECTS = libadios_a-adios_nssi_args.$(OBJEXT)
@@ -277,18 +360,38 @@ libadios_a_OBJECTS = $(am_libadios_a_OBJECTS) \
 	$(dist_libadios_a_OBJECTS) $(nodist_libadios_a_OBJECTS)
 libadios_internal_nompi_a_AR = $(AR) $(ARFLAGS)
 libadios_internal_nompi_a_LIBADD =
+am__objects_15 = $(am__objects_1) \
+	libadios_internal_nompi_a-adios_transforms_common.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transforms_hooks.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_copyspec.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_subvolume.$(OBJEXT)
+am__objects_16 = libadios_internal_nompi_a-adios_transform_identity_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_szip_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_17 = $(am__objects_1) \
+	libadios_internal_nompi_a-adios_transforms_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transforms_util.$(OBJEXT) \
+	libadios_internal_nompi_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_16)
 am_libadios_internal_nompi_a_OBJECTS =  \
 	libadios_internal_nompi_a-mpidummy.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_bp_v1.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_endianness.$(OBJEXT) \
 	libadios_internal_nompi_a-bp_utils.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_internals.$(OBJEXT) \
+	$(am__objects_15) $(am__objects_17) \
 	libadios_internal_nompi_a-buffer.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_error.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_logger.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_internals_mxml.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_timing.$(OBJEXT) \
 	libadios_internal_nompi_a-util.$(OBJEXT) \
+	libadios_internal_nompi_a-qhashtbl.$(OBJEXT) \
 	libadios_internal_nompi_a-futils.$(OBJEXT) \
 	libadios_internal_nompi_a-adios_transport_hooks.$(OBJEXT)
 libadios_internal_nompi_a_OBJECTS =  \
@@ -297,28 +400,112 @@ libadios_nompi_a_AR = $(AR) $(ARFLAGS)
 libadios_nompi_a_LIBADD =
 am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.c \
 	core/adios_internals.c core/adios_internals_mxml.c \
-	core/buffer.c core/adios_bp_v1.c core/adios_endianness.c \
-	core/bp_utils.c core/futils.c core/adios_error.c \
-	core/adios_read.c core/adios_read_v1.c core/common_read.c \
-	core/globals.c core/mpidummy.c core/adios_timing.c \
-	core/adios_read_hooks.c core/adios_transport_hooks.c \
-	core/adios_socket.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
+	core/adios_copyspec.h core/adios_subvolume.h \
+	core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/bp_utils.c \
+	core/futils.c core/adios_error.c core/adios_read.c \
+	core/adios_read_v1.c core/common_read.c core/globals.c \
+	core/mpidummy.c core/adios_timing.c core/adios_read_hooks.c \
+	core/adios_transport_hooks.c core/adios_socket.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_bp_staged.c read/read_bp_staged1.c \
 	write/adios_posix.c write/adios_posix1.c \
 	write/adios_dataspaces.c read/read_dataspaces.c \
 	write/adios_dimes.c read/read_dimes.c write/adios_datatap.c \
 	read/read_datatap.c
- at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_9 = libadios_nompi_a-adios_dataspaces.$(OBJEXT) \
+am__objects_18 = $(am__objects_1) \
+	libadios_nompi_a-adios_transforms_common.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_hooks.$(OBJEXT) \
+	libadios_nompi_a-adios_copyspec.$(OBJEXT) \
+	libadios_nompi_a-adios_subvolume.$(OBJEXT)
+am__objects_19 =  \
+	libadios_nompi_a-adios_transform_identity_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_szip_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_20 = $(am__objects_1) \
+	libadios_nompi_a-adios_transforms_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_datablock.$(OBJEXT) \
+	libadios_nompi_a-adios_patchdata.$(OBJEXT) \
+	libadios_nompi_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_19)
+am__objects_21 =  \
+	libadios_nompi_a-adios_transform_identity_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_szip_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_22 = $(am__objects_1) \
+	libadios_nompi_a-adios_transforms_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_util.$(OBJEXT) \
+	libadios_nompi_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_21)
+ at BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_23 = libadios_nompi_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadios_nompi_a-read_dataspaces.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_10 = libadios_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_24 = libadios_nompi_a-adios_dimes.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadios_nompi_a-read_dimes.$(OBJEXT)
- at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_11 = libadios_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_25 = libadios_nompi_a-adios_datatap.$(OBJEXT) \
 @BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadios_nompi_a-read_datatap.$(OBJEXT)
 @BUILD_WRITE_TRUE at am_libadios_nompi_a_OBJECTS =  \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-common_adios.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_internals.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_internals_mxml.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	$(am__objects_18) $(am__objects_20) \
+ at BUILD_WRITE_TRUE@	$(am__objects_22) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-buffer.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_endianness.$(OBJEXT) \
@@ -336,24 +523,72 @@ am__libadios_nompi_a_SOURCES_DIST = core/adios.c core/common_adios.c \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_socket.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_logger.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-util.$(OBJEXT) \
+ at BUILD_WRITE_TRUE@	libadios_nompi_a-qhashtbl.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-read_bp.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-read_bp_staged.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-read_bp_staged1.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_posix.$(OBJEXT) \
 @BUILD_WRITE_TRUE@	libadios_nompi_a-adios_posix1.$(OBJEXT) \
- at BUILD_WRITE_TRUE@	$(am__objects_9) $(am__objects_10) \
- at BUILD_WRITE_TRUE@	$(am__objects_11)
+ at BUILD_WRITE_TRUE@	$(am__objects_23) $(am__objects_24) \
+ at BUILD_WRITE_TRUE@	$(am__objects_25)
 libadios_nompi_a_OBJECTS = $(am_libadios_nompi_a_OBJECTS)
 libadiosf_a_AR = $(AR) $(ARFLAGS)
 libadiosf_a_LIBADD =
 am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	core/adios_internals.c core/adios_internals_mxml.c \
-	core/buffer.c core/adios_bp_v1.c core/adios_endianness.c \
-	core/futils.c core/adios_error.c core/bp_utils.c \
-	core/common_read.c core/globals.c core/adios_timing.c \
-	core/adios_read_hooks.c core/adios_transport_hooks.c \
-	core/adios_socket.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
+	core/adios_copyspec.h core/adios_subvolume.h \
+	core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/futils.c \
+	core/adios_error.c core/bp_utils.c core/common_read.c \
+	core/globals.c core/adios_timing.c core/adios_read_hooks.c \
+	core/adios_transport_hooks.c core/adios_socket.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_bp_staged.c read/read_bp_staged1.c \
 	write/adios_posix.c write/adios_posix1.c \
 	write/adios_dataspaces.c read/read_dataspaces.c \
 	write/adios_dimes.c read/read_dimes.c write/adios_datatap.c \
@@ -362,29 +597,60 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	write/adios_mpi.c write/adios_mpi_lustre.c \
 	write/adios_mpi_amr.c write/adios_var_merge.c \
-	write/adios_phdf5.c write/adios_nc4.c \
-	write/adios_mpi_stagger.c write/adios_mpi_aggregate.c \
-	write/adios_provenance.c write/adios_mpi_cio.c \
-	write/adios_mpi_stripe.c write/adios_mpi_amr1.c \
-	write/adios_adaptive.c core/adiosf_read.c \
-	core/adiosf_defs_mod.f90 core/adiosf_write_mod.f90 \
-	core/adiosf_read_mod.f90
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_12 = libadiosf_a-adios_dataspaces.$(OBJEXT) \
+	write/adios_mpi_bgq.c write/adios_phdf5.c write/adios_nc4.c \
+	core/adiosf_read.c core/adiosf_defs_mod.f90 \
+	core/adiosf_write_mod.f90 core/adiosf_read_mod.f90
+am__objects_26 = $(am__objects_1) \
+	libadiosf_a-adios_transforms_common.$(OBJEXT) \
+	libadiosf_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosf_a-adios_copyspec.$(OBJEXT) \
+	libadiosf_a-adios_subvolume.$(OBJEXT)
+am__objects_27 = libadiosf_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosf_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_28 = $(am__objects_1) \
+	libadiosf_a-adios_transforms_read.$(OBJEXT) \
+	libadiosf_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosf_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosf_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosf_a-adios_patchdata.$(OBJEXT) \
+	libadiosf_a-adios_selection_util.$(OBJEXT) $(am__objects_27)
+am__objects_29 = libadiosf_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_szip_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadiosf_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_30 = $(am__objects_1) \
+	libadiosf_a-adios_transforms_write.$(OBJEXT) \
+	libadiosf_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadiosf_a-adios_transforms_util.$(OBJEXT) \
+	libadiosf_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_29)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_31 = libadiosf_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadiosf_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_13 = libadiosf_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_32 = libadiosf_a-adios_dimes.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadiosf_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_14 = libadiosf_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_33 = libadiosf_a-adios_datatap.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadiosf_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_15 = libadiosf_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_34 = libadiosf_a-adios_flexpath.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadiosf_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_16 = libadiosf_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_35 = libadiosf_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_a-adios_nssi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_a-adios_nssi_filter.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_17 = libadiosf_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_36 = libadiosf_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_internals_mxml.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_26) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_28) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_30) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-buffer.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_endianness.$(OBJEXT) \
@@ -399,35 +665,30 @@ am__libadiosf_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_socket.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-read_bp_staged1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_posix.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_posix1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_12) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_13) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_14) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_15) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_16)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_18 = libadiosf_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_19 = libadiosf_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE at am__objects_20 = libadiosf_a-adios_mpi_stagger.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_mpi_aggregate.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_provenance.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_mpi_cio.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_mpi_stripe.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_mpi_amr1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_a-adios_adaptive.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_21 = libadiosf_a-adios_mpi.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_31) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_32) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_33) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_34) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_35)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_37 = libadiosf_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_38 = libadiosf_a-adios_phdf5.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_39 = libadiosf_a-adios_nc4.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_40 = libadiosf_a-adios_mpi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_mpi_lustre.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_mpi_amr.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adios_var_merge.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_18) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_19) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_20)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_37) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_38) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_39)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_17) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_21) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_36) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_40) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_a-adiosf_read.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_write_mod.$(OBJEXT) \
@@ -441,12 +702,59 @@ libadiosf_nompi_a_AR = $(AR) $(ARFLAGS)
 libadiosf_nompi_a_LIBADD =
 am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	core/adios_internals.c core/adios_internals_mxml.c \
-	core/buffer.c core/adios_bp_v1.c core/adios_endianness.c \
-	core/futils.c core/adios_error.c core/bp_utils.c \
-	core/common_read.c core/globals.c core/adios_timing.c \
-	core/adios_read_hooks.c core/adios_transport_hooks.c \
-	core/adios_socket.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
+	core/adios_copyspec.h core/adios_subvolume.h \
+	core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/futils.c \
+	core/adios_error.c core/bp_utils.c core/common_read.c \
+	core/globals.c core/adios_timing.c core/adios_read_hooks.c \
+	core/adios_transport_hooks.c core/adios_socket.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_bp_staged.c read/read_bp_staged1.c \
 	write/adios_posix.c write/adios_posix1.c \
 	write/adios_dataspaces.c read/read_dataspaces.c \
 	write/adios_dimes.c read/read_dimes.c write/adios_datatap.c \
@@ -455,22 +763,60 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	core/mpidummy.c core/adiosf_read.c core/adiosf_defs_mod.f90 \
 	core/adiosf_write_mod.f90 core/adiosf_read_mod.f90
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_22 = libadiosf_nompi_a-adios_dataspaces.$(OBJEXT) \
+am__objects_41 = $(am__objects_1) \
+	libadiosf_nompi_a-adios_transforms_common.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosf_nompi_a-adios_copyspec.$(OBJEXT) \
+	libadiosf_nompi_a-adios_subvolume.$(OBJEXT)
+am__objects_42 =  \
+	libadiosf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_43 = $(am__objects_1) \
+	libadiosf_nompi_a-adios_transforms_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosf_nompi_a-adios_patchdata.$(OBJEXT) \
+	libadiosf_nompi_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_42)
+am__objects_44 =  \
+	libadiosf_nompi_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_szip_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_45 = $(am__objects_1) \
+	libadiosf_nompi_a-adios_transforms_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_util.$(OBJEXT) \
+	libadiosf_nompi_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_44)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_46 = libadiosf_nompi_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadiosf_nompi_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_23 = libadiosf_nompi_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_47 = libadiosf_nompi_a-adios_dimes.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadiosf_nompi_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_24 = libadiosf_nompi_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_48 = libadiosf_nompi_a-adios_datatap.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadiosf_nompi_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_25 = libadiosf_nompi_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_49 = libadiosf_nompi_a-adios_flexpath.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadiosf_nompi_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_26 = libadiosf_nompi_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_50 = libadiosf_nompi_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_a-adios_nssi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_a-adios_nssi_filter.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_27 = libadiosf_nompi_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_51 = libadiosf_nompi_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_internals_mxml.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_41) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_43) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_45) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-buffer.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_endianness.$(OBJEXT) \
@@ -485,20 +831,21 @@ am__libadiosf_nompi_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_socket.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-read_bp_staged1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_posix.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adios_posix1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_22) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_23) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_24) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_25) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_26)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_28 = libadiosf_nompi_a-mpidummy.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_46) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_47) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_48) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_49) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_50)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_52 = libadiosf_nompi_a-mpidummy.$(OBJEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_nompi_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_27) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_28) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_51) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_52) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_a-adiosf_read.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_write_mod.$(OBJEXT) \
@@ -508,12 +855,58 @@ libadiosf_nompi_v1_a_AR = $(AR) $(ARFLAGS)
 libadiosf_nompi_v1_a_LIBADD =
 am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.c \
 	core/common_adios.c core/adios_internals.c \
-	core/adios_internals_mxml.c core/buffer.c core/adios_bp_v1.c \
-	core/adios_endianness.c core/futils.c core/adios_error.c \
-	core/bp_utils.c core/common_read.c core/globals.c \
-	core/adios_timing.c core/adios_read_hooks.c \
+	core/adios_internals_mxml.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/futils.c \
+	core/adios_error.c core/bp_utils.c core/common_read.c \
+	core/globals.c core/adios_timing.c core/adios_read_hooks.c \
 	core/adios_transport_hooks.c core/adios_socket.c \
-	core/adios_logger.c core/util.c read/read_bp.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c read/read_bp.c \
 	read/read_bp_staged.c read/read_bp_staged1.c \
 	write/adios_posix.c write/adios_posix1.c \
 	write/adios_dataspaces.c read/read_dataspaces.c \
@@ -523,22 +916,60 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	core/mpidummy.c core/adiosf_read_v1.c core/adiosf_defs_mod.f90 \
 	core/adiosf_write_mod.f90
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_29 = libadiosf_nompi_v1_a-adios_dataspaces.$(OBJEXT) \
+am__objects_53 = $(am__objects_1) \
+	libadiosf_nompi_v1_a-adios_transforms_common.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_copyspec.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_subvolume.$(OBJEXT)
+am__objects_54 =  \
+	libadiosf_nompi_v1_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_55 = $(am__objects_1) \
+	libadiosf_nompi_v1_a-adios_transforms_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_patchdata.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_54)
+am__objects_56 =  \
+	libadiosf_nompi_v1_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_szip_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_57 = $(am__objects_1) \
+	libadiosf_nompi_v1_a-adios_transforms_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_util.$(OBJEXT) \
+	libadiosf_nompi_v1_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_56)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_58 = libadiosf_nompi_v1_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadiosf_nompi_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_30 = libadiosf_nompi_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_59 = libadiosf_nompi_v1_a-adios_dimes.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadiosf_nompi_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_31 = libadiosf_nompi_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_60 = libadiosf_nompi_v1_a-adios_datatap.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadiosf_nompi_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_32 = libadiosf_nompi_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_61 = libadiosf_nompi_v1_a-adios_flexpath.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadiosf_nompi_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_33 = libadiosf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_62 = libadiosf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_v1_a-adios_nssi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_v1_a-adios_nssi_filter.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_nompi_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_34 = libadiosf_nompi_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_63 = libadiosf_nompi_v1_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_internals_mxml.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_53) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_55) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_57) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-buffer.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_endianness.$(OBJEXT) \
@@ -553,20 +984,21 @@ am__libadiosf_nompi_v1_a_SOURCES_DIST = core/adiosf.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_socket.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-read_bp_staged1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_posix.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adios_posix1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_29) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_30) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_31) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_32) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_33)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_35 = libadiosf_nompi_v1_a-mpidummy.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_58) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_59) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_60) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_61) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_62)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_64 = libadiosf_nompi_v1_a-mpidummy.$(OBJEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_nompi_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_34) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_35) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_63) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_64) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_nompi_v1_a-adiosf_read_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_write_mod.$(OBJEXT)
@@ -575,12 +1007,59 @@ libadiosf_v1_a_AR = $(AR) $(ARFLAGS)
 libadiosf_v1_a_LIBADD =
 am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	core/adios_internals.c core/adios_internals_mxml.c \
-	core/buffer.c core/adios_bp_v1.c core/adios_endianness.c \
-	core/futils.c core/adios_error.c core/bp_utils.c \
-	core/common_read.c core/globals.c core/adios_timing.c \
-	core/adios_read_hooks.c core/adios_transport_hooks.c \
-	core/adios_socket.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
+	core/adios_copyspec.h core/adios_subvolume.h \
+	core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c \
+	core/transforms/adios_transforms_write.h \
+	core/transforms/adios_transforms_hooks_write.h \
+	core/transforms/adios_transforms_specparse.h \
+	core/transforms/adios_transforms_write.c \
+	core/transforms/adios_transforms_hooks_write.c \
+	core/transforms/adios_transforms_util.c \
+	core/transforms/adios_transforms_specparse.c \
+	core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c core/buffer.c \
+	core/adios_bp_v1.c core/adios_endianness.c core/futils.c \
+	core/adios_error.c core/bp_utils.c core/common_read.c \
+	core/globals.c core/adios_timing.c core/adios_read_hooks.c \
+	core/adios_transport_hooks.c core/adios_socket.c \
+	core/adios_logger.c core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_bp_staged.c read/read_bp_staged1.c \
 	write/adios_posix.c write/adios_posix1.c \
 	write/adios_dataspaces.c read/read_dataspaces.c \
 	write/adios_dimes.c read/read_dimes.c write/adios_datatap.c \
@@ -589,28 +1068,63 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 	write/adios_nssi.c nssi/adios_nssi_filter.c read/read_nssi.c \
 	write/adios_mpi.c write/adios_mpi_lustre.c \
 	write/adios_mpi_amr.c write/adios_var_merge.c \
-	write/adios_phdf5.c write/adios_nc4.c \
-	write/adios_mpi_stagger.c write/adios_mpi_aggregate.c \
-	write/adios_provenance.c write/adios_mpi_cio.c \
-	write/adios_mpi_stripe.c write/adios_mpi_amr1.c \
-	write/adios_adaptive.c core/adiosf_read_v1.c \
-	core/adiosf_defs_mod.f90 core/adiosf_write_mod.f90
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_36 = libadiosf_v1_a-adios_dataspaces.$(OBJEXT) \
+	write/adios_mpi_bgq.c write/adios_phdf5.c write/adios_nc4.c \
+	core/adiosf_read_v1.c core/adiosf_defs_mod.f90 \
+	core/adiosf_write_mod.f90
+am__objects_65 = $(am__objects_1) \
+	libadiosf_v1_a-adios_transforms_common.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosf_v1_a-adios_copyspec.$(OBJEXT) \
+	libadiosf_v1_a-adios_subvolume.$(OBJEXT)
+am__objects_66 =  \
+	libadiosf_v1_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_67 = $(am__objects_1) \
+	libadiosf_v1_a-adios_transforms_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosf_v1_a-adios_patchdata.$(OBJEXT) \
+	libadiosf_v1_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_66)
+am__objects_68 =  \
+	libadiosf_v1_a-adios_transform_identity_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_zlib_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_bzip2_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_szip_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_isobar_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_aplod_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transform_alacrity_write.$(OBJEXT)
+am__objects_69 = $(am__objects_1) \
+	libadiosf_v1_a-adios_transforms_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_hooks_write.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_util.$(OBJEXT) \
+	libadiosf_v1_a-adios_transforms_specparse.$(OBJEXT) \
+	$(am__objects_68)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE at am__objects_70 = libadiosf_v1_a-adios_dataspaces.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATASPACES_TRUE@	libadiosf_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_37 = libadiosf_v1_a-adios_dimes.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE at am__objects_71 = libadiosf_v1_a-adios_dimes.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DIMES_TRUE@	libadiosf_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_38 = libadiosf_v1_a-adios_datatap.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE at am__objects_72 = libadiosf_v1_a-adios_datatap.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_DATATAP_TRUE@	libadiosf_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_39 = libadiosf_v1_a-adios_flexpath.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_73 = libadiosf_v1_a-adios_flexpath.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_FLEXPATH_TRUE@	libadiosf_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_40 = libadiosf_v1_a-adios_nssi_config.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE at am__objects_74 = libadiosf_v1_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_v1_a-adios_nssi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_v1_a-adios_nssi_filter.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NSSI_TRUE@	libadiosf_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_41 = libadiosf_v1_a-adiosf.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_75 = libadiosf_v1_a-adiosf.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-common_adios.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_internals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_internals_mxml.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_65) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_67) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_69) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-buffer.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_endianness.$(OBJEXT) \
@@ -625,35 +1139,30 @@ am__libadiosf_v1_a_SOURCES_DIST = core/adiosf.c core/common_adios.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_socket.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-read_bp_staged1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_posix.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_posix1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_36) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_37) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_38) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_39) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_40)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_42 = libadiosf_v1_a-adios_phdf5.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_43 = libadiosf_v1_a-adios_nc4.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE at am__objects_44 = libadiosf_v1_a-adios_mpi_stagger.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_mpi_aggregate.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_provenance.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_mpi_cio.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_mpi_stripe.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_mpi_amr1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@RESEARCH_TRANSPORTS_TRUE@	libadiosf_v1_a-adios_adaptive.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_45 = libadiosf_v1_a-adios_mpi.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_70) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_71) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_72) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_73) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_74)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_BGQ_TRUE at am__objects_76 = libadiosf_v1_a-adios_mpi_bgq.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_PHDF5_TRUE at am__objects_77 = libadiosf_v1_a-adios_phdf5.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@@HAVE_NC4PAR_TRUE at am__objects_78 = libadiosf_v1_a-adios_nc4.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__objects_79 = libadiosf_v1_a-adios_mpi.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_mpi_lustre.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_mpi_amr.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adios_var_merge.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_42) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_43) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_44)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_76) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_77) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_78)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am_libadiosf_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_41) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_45) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_75) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__objects_79) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	libadiosf_v1_a-adiosf_read_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	adiosf_write_mod.$(OBJEXT)
@@ -663,18 +1172,70 @@ libadiosread_a_LIBADD =
 am__libadiosread_a_SOURCES_DIST = core/adios_bp_v1.c \
 	core/adios_endianness.c core/bp_utils.c core/futils.c \
 	core/adios_error.c core/adios_read.c core/adios_read_v1.c \
-	core/common_read.c core/globals.c core/adios_read_hooks.c \
-	core/adios_logger.c core/util.c read/read_bp.c \
-	read/read_bp_staged.c read/read_bp_staged1.c \
-	read/read_dataspaces.c read/read_dimes.c read/read_datatap.c \
-	read/read_flexpath.c nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_DATASPACES_TRUE@am__objects_46 = libadiosread_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_47 = libadiosread_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_48 =  \
+	core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/globals.c \
+	core/adios_read_hooks.c core/adios_logger.c core/util.c \
+	core/qhashtbl.c read/read_bp.c read/read_bp_staged.c \
+	read/read_bp_staged1.c read/read_dataspaces.c \
+	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
+	nssi/adios_nssi_config.c read/read_nssi.c
+am__objects_80 = $(am__objects_1) \
+	libadiosread_a-adios_transforms_common.$(OBJEXT) \
+	libadiosread_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosread_a-adios_copyspec.$(OBJEXT) \
+	libadiosread_a-adios_subvolume.$(OBJEXT)
+am__objects_81 =  \
+	libadiosread_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosread_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_82 = $(am__objects_1) \
+	libadiosread_a-adios_transforms_read.$(OBJEXT) \
+	libadiosread_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosread_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosread_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosread_a-adios_patchdata.$(OBJEXT) \
+	libadiosread_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_81)
+ at HAVE_DATASPACES_TRUE@am__objects_83 = libadiosread_a-read_dataspaces.$(OBJEXT)
+ at HAVE_DIMES_TRUE@am__objects_84 = libadiosread_a-read_dimes.$(OBJEXT)
+ at HAVE_DATATAP_TRUE@am__objects_85 =  \
 @HAVE_DATATAP_TRUE@	libadiosread_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_49 =  \
+ at HAVE_FLEXPATH_TRUE@am__objects_86 =  \
 @HAVE_FLEXPATH_TRUE@	libadiosread_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_50 =  \
+ at HAVE_NSSI_TRUE@am__objects_87 =  \
 @HAVE_NSSI_TRUE@	libadiosread_a-adios_nssi_config.$(OBJEXT) \
 @HAVE_NSSI_TRUE@	libadiosread_a-read_nssi.$(OBJEXT)
 am_libadiosread_a_OBJECTS = libadiosread_a-adios_bp_v1.$(OBJEXT) \
@@ -684,15 +1245,17 @@ am_libadiosread_a_OBJECTS = libadiosread_a-adios_bp_v1.$(OBJEXT) \
 	libadiosread_a-adios_error.$(OBJEXT) \
 	libadiosread_a-adios_read.$(OBJEXT) \
 	libadiosread_a-adios_read_v1.$(OBJEXT) \
-	libadiosread_a-common_read.$(OBJEXT) \
-	libadiosread_a-globals.$(OBJEXT) \
+	libadiosread_a-common_read.$(OBJEXT) $(am__objects_80) \
+	$(am__objects_82) libadiosread_a-globals.$(OBJEXT) \
 	libadiosread_a-adios_read_hooks.$(OBJEXT) \
 	libadiosread_a-adios_logger.$(OBJEXT) \
-	libadiosread_a-util.$(OBJEXT) libadiosread_a-read_bp.$(OBJEXT) \
+	libadiosread_a-util.$(OBJEXT) \
+	libadiosread_a-qhashtbl.$(OBJEXT) \
+	libadiosread_a-read_bp.$(OBJEXT) \
 	libadiosread_a-read_bp_staged.$(OBJEXT) \
-	libadiosread_a-read_bp_staged1.$(OBJEXT) $(am__objects_46) \
-	$(am__objects_47) $(am__objects_48) $(am__objects_49) \
-	$(am__objects_50)
+	libadiosread_a-read_bp_staged1.$(OBJEXT) $(am__objects_83) \
+	$(am__objects_84) $(am__objects_85) $(am__objects_86) \
+	$(am__objects_87)
 am__dist_libadiosread_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosread_a_OBJECTS =
 @HAVE_NSSI_TRUE at nodist_libadiosread_a_OBJECTS =  \
@@ -705,17 +1268,68 @@ libadiosread_nompi_a_LIBADD =
 am__libadiosread_nompi_a_SOURCES_DIST = core/mpidummy.c \
 	core/adios_bp_v1.c core/adios_endianness.c core/bp_utils.c \
 	core/futils.c core/adios_error.c core/adios_read.c \
-	core/adios_read_v1.c core/common_read.c core/adios_logger.c \
+	core/adios_read_v1.c core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/adios_logger.c \
 	core/buffer.c core/globals.c core/adios_read_hooks.c \
-	core/util.c read/read_bp.c read/read_dataspaces.c \
-	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
-	nssi/adios_nssi_config.c read/read_nssi.c
- at HAVE_DATASPACES_TRUE@am__objects_51 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
- at HAVE_DIMES_TRUE@am__objects_52 =  \
+	core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_dataspaces.c read/read_dimes.c read/read_datatap.c \
+	read/read_flexpath.c nssi/adios_nssi_config.c read/read_nssi.c
+am__objects_88 = $(am__objects_1) \
+	libadiosread_nompi_a-adios_transforms_common.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosread_nompi_a-adios_copyspec.$(OBJEXT) \
+	libadiosread_nompi_a-adios_subvolume.$(OBJEXT)
+am__objects_89 =  \
+	libadiosread_nompi_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_90 = $(am__objects_1) \
+	libadiosread_nompi_a-adios_transforms_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosread_nompi_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosread_nompi_a-adios_patchdata.$(OBJEXT) \
+	libadiosread_nompi_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_89)
+ at HAVE_DATASPACES_TRUE@am__objects_91 = libadiosread_nompi_a-read_dataspaces.$(OBJEXT)
+ at HAVE_DIMES_TRUE@am__objects_92 =  \
 @HAVE_DIMES_TRUE@	libadiosread_nompi_a-read_dimes.$(OBJEXT)
- at HAVE_DATATAP_TRUE@am__objects_53 = libadiosread_nompi_a-read_datatap.$(OBJEXT)
- at HAVE_FLEXPATH_TRUE@am__objects_54 = libadiosread_nompi_a-read_flexpath.$(OBJEXT)
- at HAVE_NSSI_TRUE@am__objects_55 = libadiosread_nompi_a-adios_nssi_config.$(OBJEXT) \
+ at HAVE_DATATAP_TRUE@am__objects_93 = libadiosread_nompi_a-read_datatap.$(OBJEXT)
+ at HAVE_FLEXPATH_TRUE@am__objects_94 = libadiosread_nompi_a-read_flexpath.$(OBJEXT)
+ at HAVE_NSSI_TRUE@am__objects_95 = libadiosread_nompi_a-adios_nssi_config.$(OBJEXT) \
 @HAVE_NSSI_TRUE@	libadiosread_nompi_a-read_nssi.$(OBJEXT)
 am_libadiosread_nompi_a_OBJECTS =  \
 	libadiosread_nompi_a-mpidummy.$(OBJEXT) \
@@ -726,15 +1340,16 @@ am_libadiosread_nompi_a_OBJECTS =  \
 	libadiosread_nompi_a-adios_error.$(OBJEXT) \
 	libadiosread_nompi_a-adios_read.$(OBJEXT) \
 	libadiosread_nompi_a-adios_read_v1.$(OBJEXT) \
-	libadiosread_nompi_a-common_read.$(OBJEXT) \
-	libadiosread_nompi_a-adios_logger.$(OBJEXT) \
+	libadiosread_nompi_a-common_read.$(OBJEXT) $(am__objects_88) \
+	$(am__objects_90) libadiosread_nompi_a-adios_logger.$(OBJEXT) \
 	libadiosread_nompi_a-buffer.$(OBJEXT) \
 	libadiosread_nompi_a-globals.$(OBJEXT) \
 	libadiosread_nompi_a-adios_read_hooks.$(OBJEXT) \
 	libadiosread_nompi_a-util.$(OBJEXT) \
-	libadiosread_nompi_a-read_bp.$(OBJEXT) $(am__objects_51) \
-	$(am__objects_52) $(am__objects_53) $(am__objects_54) \
-	$(am__objects_55)
+	libadiosread_nompi_a-qhashtbl.$(OBJEXT) \
+	libadiosread_nompi_a-read_bp.$(OBJEXT) $(am__objects_91) \
+	$(am__objects_92) $(am__objects_93) $(am__objects_94) \
+	$(am__objects_95)
 am__dist_libadiosread_nompi_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosread_nompi_a_OBJECTS =
 @HAVE_NSSI_TRUE at nodist_libadiosread_nompi_a_OBJECTS = libadiosread_nompi_a-adios_nssi_args.$(OBJEXT)
@@ -745,37 +1360,90 @@ libadiosreadf_a_AR = $(AR) $(ARFLAGS)
 libadiosreadf_a_LIBADD =
 am__libadiosreadf_a_SOURCES_DIST = core/adios_bp_v1.c \
 	core/adios_endianness.c core/bp_utils.c core/futils.c \
-	core/adios_error.c core/common_read.c core/globals.c \
+	core/adios_error.c core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/globals.c \
 	core/adios_read_hooks.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
-	read/read_dataspaces.c read/read_dimes.c read/read_datatap.c \
-	read/read_flexpath.c nssi/adios_nssi_config.c read/read_nssi.c \
-	core/adiosf_read.c core/adiosf_defs_mod.f90 \
-	core/adiosf_read_mod.f90
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_56 = libadiosreadf_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_57 = libadiosreadf_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_58 = libadiosreadf_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_59 = libadiosreadf_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_60 = libadiosreadf_a-adios_nssi_config.$(OBJEXT) \
+	core/qhashtbl.c read/read_bp.c read/read_bp_staged.c \
+	read/read_bp_staged1.c read/read_dataspaces.c \
+	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
+	nssi/adios_nssi_config.c read/read_nssi.c core/adiosf_read.c \
+	core/adiosf_defs_mod.f90 core/adiosf_read_mod.f90
+am__objects_96 = $(am__objects_1) \
+	libadiosreadf_a-adios_transforms_common.$(OBJEXT) \
+	libadiosreadf_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosreadf_a-adios_copyspec.$(OBJEXT) \
+	libadiosreadf_a-adios_subvolume.$(OBJEXT)
+am__objects_97 =  \
+	libadiosreadf_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_98 = $(am__objects_1) \
+	libadiosreadf_a-adios_transforms_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosreadf_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosreadf_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosreadf_a-adios_patchdata.$(OBJEXT) \
+	libadiosreadf_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_97)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_99 = libadiosreadf_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_100 = libadiosreadf_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_101 = libadiosreadf_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_102 = libadiosreadf_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_103 = libadiosreadf_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_61 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_104 =  \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_endianness.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-futils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_96) $(am__objects_98) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-read_bp_staged1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_56) $(am__objects_57) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_58) $(am__objects_59) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_60)
- at BUILD_FORTRAN_TRUE@am_libadiosreadf_a_OBJECTS = $(am__objects_61) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_99) $(am__objects_100) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_101) $(am__objects_102) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_103)
+ at BUILD_FORTRAN_TRUE@am_libadiosreadf_a_OBJECTS = $(am__objects_104) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_a-adiosf_read.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	adiosf_defs_mod.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	adiosf_read_mod.$(OBJEXT)
@@ -790,17 +1458,69 @@ libadiosreadf_nompi_a_LIBADD =
 am__libadiosreadf_nompi_a_SOURCES_DIST = core/mpidummy.c \
 	core/adios_bp_v1.c core/adios_endianness.c core/bp_utils.c \
 	core/futils.c core/adios_error.c core/adios_logger.c \
-	core/common_read.c core/globals.c core/adios_read_hooks.c \
-	core/util.c read/read_bp.c read/read_dataspaces.c \
-	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
+	core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/globals.c \
+	core/adios_read_hooks.c core/util.c core/qhashtbl.c \
+	read/read_bp.c read/read_dataspaces.c read/read_dimes.c \
+	read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c core/adiosf_read.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_62 = libadiosreadf_nompi_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_63 = libadiosreadf_nompi_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_64 = libadiosreadf_nompi_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_65 = libadiosreadf_nompi_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_66 = libadiosreadf_nompi_a-adios_nssi_config.$(OBJEXT) \
+am__objects_105 = $(am__objects_1) \
+	libadiosreadf_nompi_a-adios_transforms_common.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_copyspec.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_subvolume.$(OBJEXT)
+am__objects_106 =  \
+	libadiosreadf_nompi_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_107 = $(am__objects_1) \
+	libadiosreadf_nompi_a-adios_transforms_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_patchdata.$(OBJEXT) \
+	libadiosreadf_nompi_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_106)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_108 = libadiosreadf_nompi_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_109 = libadiosreadf_nompi_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_110 = libadiosreadf_nompi_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_111 = libadiosreadf_nompi_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_112 = libadiosreadf_nompi_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_nompi_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_67 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_113 =  \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-mpidummy.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_endianness.$(OBJEXT) \
@@ -809,15 +1529,17 @@ am__libadiosreadf_nompi_a_SOURCES_DIST = core/mpidummy.c \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_105) $(am__objects_107) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-read_bp.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_62) $(am__objects_63) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_64) $(am__objects_65) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_66)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_108) $(am__objects_109) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_110) $(am__objects_111) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_112)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_67) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_113) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_a-adiosf_read.$(OBJEXT)
 am__dist_libadiosreadf_nompi_a_SOURCES_DIST = nssi/adios_nssi_args.x
 dist_libadiosreadf_nompi_a_OBJECTS =
@@ -830,18 +1552,69 @@ libadiosreadf_nompi_v1_a_LIBADD =
 am__libadiosreadf_nompi_v1_a_SOURCES_DIST = core/mpidummy.c \
 	core/adios_bp_v1.c core/adios_endianness.c core/bp_utils.c \
 	core/futils.c core/adios_error.c core/adios_logger.c \
-	core/common_read.c core/globals.c core/adios_read_hooks.c \
-	core/util.c read/read_bp.c read/read_dataspaces.c \
-	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
+	core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/globals.c \
+	core/adios_read_hooks.c core/util.c core/qhashtbl.c \
+	read/read_bp.c read/read_dataspaces.c read/read_dimes.c \
+	read/read_datatap.c read/read_flexpath.c \
 	nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_68 = libadiosreadf_nompi_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_69 = libadiosreadf_nompi_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_70 = libadiosreadf_nompi_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_71 = libadiosreadf_nompi_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_72 = libadiosreadf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
+am__objects_114 = $(am__objects_1) \
+	libadiosreadf_nompi_v1_a-adios_transforms_common.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_copyspec.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_subvolume.$(OBJEXT)
+am__objects_115 = libadiosreadf_nompi_v1_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_116 = $(am__objects_1) \
+	libadiosreadf_nompi_v1_a-adios_transforms_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_patchdata.$(OBJEXT) \
+	libadiosreadf_nompi_v1_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_115)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_117 = libadiosreadf_nompi_v1_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_118 = libadiosreadf_nompi_v1_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_119 = libadiosreadf_nompi_v1_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_120 = libadiosreadf_nompi_v1_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_121 = libadiosreadf_nompi_v1_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_nompi_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_73 = libadiosreadf_nompi_v1_a-mpidummy.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@am__objects_122 = libadiosreadf_nompi_v1_a-mpidummy.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_endianness.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-bp_utils.$(OBJEXT) \
@@ -849,15 +1622,17 @@ am__libadiosreadf_nompi_v1_a_SOURCES_DIST = core/mpidummy.c \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_114) $(am__objects_116) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-read_bp.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_68) $(am__objects_69) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_70) $(am__objects_71) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_72)
+ at BUILD_FORTRAN_TRUE@	$(am__objects_117) $(am__objects_118) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_119) $(am__objects_120) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_121)
 @BUILD_FORTRAN_TRUE at am_libadiosreadf_nompi_v1_a_OBJECTS =  \
- at BUILD_FORTRAN_TRUE@	$(am__objects_73) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_122) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_nompi_v1_a-adiosf_read_v1.$(OBJEXT)
 libadiosreadf_nompi_v1_a_OBJECTS =  \
 	$(am_libadiosreadf_nompi_v1_a_OBJECTS)
@@ -865,36 +1640,91 @@ libadiosreadf_v1_a_AR = $(AR) $(ARFLAGS)
 libadiosreadf_v1_a_LIBADD =
 am__libadiosreadf_v1_a_SOURCES_DIST = core/adios_bp_v1.c \
 	core/adios_endianness.c core/bp_utils.c core/futils.c \
-	core/adios_error.c core/common_read.c core/globals.c \
+	core/adios_error.c core/common_read.c core/adios_copyspec.h \
+	core/adios_subvolume.h core/adios_selection_util.h \
+	core/transforms/adios_transforms_common.h \
+	core/transforms/adios_transforms_hooks.h \
+	core/transforms/adios_transforms_util.h \
+	core/transforms/adios_transforms_common.c \
+	core/transforms/adios_transforms_hooks.c core/adios_copyspec.c \
+	core/adios_subvolume.c \
+	core/transforms/plugindetect/detect_plugin_infos.h \
+	core/transforms/plugindetect/detect_plugin_types.h \
+	core/transforms/plugindetect/plugin_info_types.h \
+	core/transforms/adios_transforms_transinfo.h \
+	core/transforms/adios_transforms_read.h \
+	core/transforms/adios_transforms_hooks_read.h \
+	core/transforms/adios_transforms_reqgroup.h \
+	core/transforms/adios_transforms_datablock.h \
+	core/transforms/adios_patchdata.h \
+	core/transforms/adios_transforms_read.c \
+	core/transforms/adios_transforms_hooks_read.c \
+	core/transforms/adios_transforms_reqgroup.c \
+	core/transforms/adios_transforms_datablock.c \
+	core/transforms/adios_patchdata.c core/adios_selection_util.c \
+	core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+	core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c core/globals.c \
 	core/adios_read_hooks.c core/adios_logger.c core/util.c \
-	read/read_bp.c read/read_bp_staged.c read/read_bp_staged1.c \
-	read/read_dataspaces.c read/read_dimes.c read/read_datatap.c \
-	read/read_flexpath.c nssi/adios_nssi_config.c read/read_nssi.c \
+	core/qhashtbl.c read/read_bp.c read/read_bp_staged.c \
+	read/read_bp_staged1.c read/read_dataspaces.c \
+	read/read_dimes.c read/read_datatap.c read/read_flexpath.c \
+	nssi/adios_nssi_config.c read/read_nssi.c \
 	core/adiosf_read_v1.c
- at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_74 = libadiosreadf_v1_a-read_dataspaces.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_75 = libadiosreadf_v1_a-read_dimes.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_76 = libadiosreadf_v1_a-read_datatap.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_77 = libadiosreadf_v1_a-read_flexpath.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_78 = libadiosreadf_v1_a-adios_nssi_config.$(OBJEXT) \
+am__objects_123 = $(am__objects_1) \
+	libadiosreadf_v1_a-adios_transforms_common.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transforms_hooks.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_copyspec.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_subvolume.$(OBJEXT)
+am__objects_124 =  \
+	libadiosreadf_v1_a-adios_transform_identity_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_zlib_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_bzip2_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_szip_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_isobar_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_aplod_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transform_alacrity_read.$(OBJEXT)
+am__objects_125 = $(am__objects_1) \
+	libadiosreadf_v1_a-adios_transforms_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transforms_hooks_read.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transforms_reqgroup.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_transforms_datablock.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_patchdata.$(OBJEXT) \
+	libadiosreadf_v1_a-adios_selection_util.$(OBJEXT) \
+	$(am__objects_124)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATASPACES_TRUE at am__objects_126 = libadiosreadf_v1_a-read_dataspaces.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DIMES_TRUE at am__objects_127 = libadiosreadf_v1_a-read_dimes.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_DATATAP_TRUE at am__objects_128 = libadiosreadf_v1_a-read_datatap.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_FLEXPATH_TRUE at am__objects_129 = libadiosreadf_v1_a-read_flexpath.$(OBJEXT)
+ at BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at am__objects_130 = libadiosreadf_v1_a-adios_nssi_config.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE@	libadiosreadf_v1_a-read_nssi.$(OBJEXT)
- at BUILD_FORTRAN_TRUE@am__objects_79 =  \
+ at BUILD_FORTRAN_TRUE@am__objects_131 =  \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_bp_v1.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_endianness.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-bp_utils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-futils.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_error.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-common_read.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_123) $(am__objects_125) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-globals.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_read_hooks.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adios_logger.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-util.$(OBJEXT) \
+ at BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-qhashtbl.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-read_bp.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-read_bp_staged.$(OBJEXT) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-read_bp_staged1.$(OBJEXT) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_74) $(am__objects_75) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_76) $(am__objects_77) \
- at BUILD_FORTRAN_TRUE@	$(am__objects_78)
- at BUILD_FORTRAN_TRUE@am_libadiosreadf_v1_a_OBJECTS = $(am__objects_79) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_126) $(am__objects_127) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_128) $(am__objects_129) \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_130)
+ at BUILD_FORTRAN_TRUE@am_libadiosreadf_v1_a_OBJECTS =  \
+ at BUILD_FORTRAN_TRUE@	$(am__objects_131) \
 @BUILD_FORTRAN_TRUE@	libadiosreadf_v1_a-adiosf_read_v1.$(OBJEXT)
 libadiosreadf_v1_a_OBJECTS = $(am_libadiosreadf_v1_a_OBJECTS)
 @HAVE_NSSI_TRUE at am__EXEEXT_1 = nssi-staging-server$(EXEEXT) \
@@ -1016,12 +1846,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 #if BUILD_FORTRAN
 #libadiosreadf_a_CPPFLAGS += $(MACRODEFFLAG)DMALLOC $(DMALLOC_CPPFLAGS)
 #libadiosreadf_nompi_a_CPPFLAGS += $(MACRODEFFLAG)DMALLOC $(DMALLOC_CPPFLAGS)
@@ -1088,6 +1927,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -1140,7 +1982,7 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATHPROG = @PATHPROG@
 PATH_SEPARATOR = @PATH_SEPARATOR@
-PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@ $(am__append_14)
+PHDF5_CPPFLAGS = @PHDF5_CPPFLAGS@ $(am__append_16)
 PHDF5_LDFLAGS = @PHDF5_LDFLAGS@
 PHDF5_LIBS = @PHDF5_LIBS@
 PORTALS_CFLAGS = @PORTALS_CFLAGS@
@@ -1160,7 +2002,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -1215,7 +2066,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_srcdir) 
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
 AUTOMAKE_OPTIONS = no-dependencies
 METASOURCES = AUTO
 @HAVE_NSSI_TRUE at nssi_staging_server_SOURCES = nssi/nssi_staging_server.cpp nssi/aggregation.cpp
@@ -1232,14 +2083,14 @@ METASOURCES = AUTO
 @HAVE_NSSI_TRUE at nssi_coupling_server_LDADD =  \
 @HAVE_NSSI_TRUE@	$(top_builddir)/src/libadios.a \
 @HAVE_NSSI_TRUE@	$(ADIOSLIB_LDADD) $(NSSI_SERVER_LIBS)
-CLEANFILES = $(am__append_26) $(am__append_34) $(am__append_52)
+CLEANFILES = $(am__append_28) $(am__append_34) $(am__append_52)
 include_HEADERS = public/adios.h public/adios_types.h \
 	public/adios_read.h public/adios_error.h public/adios_mpi.h \
 	public/mpidummy.h public/adios_read_v1.h \
 	public/adios_read_v1_defs.h public/adios_read_v2.h \
-	public/adios_selection.h
+	public/adios_selection.h public/adios_schema.h
 nodist_include_HEADERS = $(am__append_33) $(am__append_51)
-lib_LIBRARIES = $(am__append_2) $(am__append_3) libadiosread.a \
+lib_LIBRARIES = $(am__append_2) $(am__append_4) libadiosread.a \
 	$(am__append_42) libadiosread_nompi.a $(am__append_60)
 libadiosread_a_CPPFLAGS = $(am__append_40) $(ADIOSLIB_EXTRA_CPPFLAGS) \
 	$(ADIOSREADLIB_CPPFLAGS) $(am__append_69)
@@ -1252,6 +2103,83 @@ libadiosread_a_CFLAGS = $(am__append_41)
 libadiosreadf_a_CFLAGS = $(am__append_49)
 libadiosread_nompi_a_CFLAGS = $(am__append_59)
 libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
+
+# Identity plugin:
+
+# Zlib plugin:
+
+# Bzip2 plugin:
+
+# Szip plugin:
+
+# ISOBAR plugin:
+
+# APLOD plugin:
+
+# ALACRITY plugin:
+transforms_write_method_SOURCES =  \
+	transforms/adios_transform_identity_write.c \
+	transforms/adios_transform_zlib_write.c \
+	transforms/adios_transform_bzip2_write.c \
+	transforms/adios_transform_szip_write.c \
+	transforms/adios_transform_isobar_write.c \
+	transforms/adios_transform_aplod_write.c \
+	transforms/adios_transform_alacrity_write.c
+transforms_read_method_SOURCES =  \
+	transforms/adios_transform_identity_read.c \
+	transforms/adios_transform_zlib_read.c \
+	transforms/adios_transform_bzip2_read.c \
+	transforms/adios_transform_szip_read.c \
+	transforms/adios_transform_isobar_read.c \
+	transforms/adios_transform_aplod_read.c \
+	transforms/adios_transform_alacrity_read.c
+transforms_common_HDRS = core/adios_copyspec.h \
+                         core/adios_subvolume.h \
+                         core/adios_selection_util.h \
+                         core/transforms/adios_transforms_common.h \
+                         core/transforms/adios_transforms_hooks.h \
+                         core/transforms/adios_transforms_util.h 
+
+transforms_read_HDRS = core/transforms/adios_transforms_transinfo.h \
+                       core/transforms/adios_transforms_read.h \
+                       core/transforms/adios_transforms_hooks_read.h \
+                       core/transforms/adios_transforms_reqgroup.h \
+                       core/transforms/adios_transforms_datablock.h \
+                       core/transforms/adios_patchdata.h
+
+transforms_write_HDRS = core/transforms/adios_transforms_write.h \
+                        core/transforms/adios_transforms_hooks_write.h \
+                        core/transforms/adios_transforms_specparse.h
+
+transforms_common_SOURCES = $(transforms_common_HDRS) \
+                            core/transforms/adios_transforms_common.c \
+                            core/transforms/adios_transforms_hooks.c \
+                            core/adios_copyspec.c \
+                            core/adios_subvolume.c \
+                            core/transforms/plugindetect/detect_plugin_infos.h \
+                            core/transforms/plugindetect/detect_plugin_types.h \
+                            core/transforms/plugindetect/plugin_info_types.h
+
+transforms_read_SOURCES = $(transforms_read_HDRS) \
+                          core/transforms/adios_transforms_read.c \
+                          core/transforms/adios_transforms_hooks_read.c \
+                          core/transforms/adios_transforms_reqgroup.c \
+                          core/transforms/adios_transforms_datablock.c \
+                          core/transforms/adios_patchdata.c \
+                          core/adios_selection_util.c \
+                          core/transforms/plugindetect/detect_plugin_read_hook_decls.h \
+                          core/transforms/plugindetect/detect_plugin_read_hook_reg.h \
+                          $(transforms_read_method_SOURCES)
+
+transforms_write_SOURCES = $(transforms_write_HDRS) \
+                           core/transforms/adios_transforms_write.c \
+                           core/transforms/adios_transforms_hooks_write.c \
+                           core/transforms/adios_transforms_util.c \
+                           core/transforms/adios_transforms_specparse.c \
+                           core/transforms/plugindetect/detect_plugin_write_hook_decls.h \
+                           core/transforms/plugindetect/detect_plugin_write_hook_reg.h \
+                           $(transforms_write_method_SOURCES)
+
 @BUILD_WRITE_TRUE at libadios_a_SOURCES = core/adios.c \
 @BUILD_WRITE_TRUE@	core/common_adios.c core/adios_internals.c \
 @BUILD_WRITE_TRUE@	core/adios_internals_mxml.c core/buffer.c \
@@ -1263,18 +2191,24 @@ libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
 @BUILD_WRITE_TRUE@	core/adios_read_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_transport_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_socket.c core/adios_logger.c \
- at BUILD_WRITE_TRUE@	core/util.c read/read_bp.c \
+ at BUILD_WRITE_TRUE@	core/util.c core/qhashtbl.c \
+ at BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) read/read_bp.c \
 @BUILD_WRITE_TRUE@	read/read_bp_staged.c read/read_bp_staged1.c \
 @BUILD_WRITE_TRUE@	write/adios_mpi.c write/adios_mpi_lustre.c \
 @BUILD_WRITE_TRUE@	write/adios_mpi_amr.c write/adios_posix.c \
 @BUILD_WRITE_TRUE@	write/adios_posix1.c write/adios_var_merge.c \
- at BUILD_WRITE_TRUE@	$(am__append_4) $(am__append_7) \
- at BUILD_WRITE_TRUE@	$(am__append_10) $(am__append_13) \
- at BUILD_WRITE_TRUE@	$(am__append_18) $(am__append_20) \
- at BUILD_WRITE_TRUE@	$(am__append_22) $(am__append_27)
+ at BUILD_WRITE_TRUE@	$(am__append_3) $(am__append_6) \
+ at BUILD_WRITE_TRUE@	$(am__append_9) $(am__append_12) \
+ at BUILD_WRITE_TRUE@	$(am__append_15) $(am__append_20) \
+ at BUILD_WRITE_TRUE@	$(am__append_22) $(am__append_24)
 @BUILD_WRITE_TRUE at libadios_nompi_a_SOURCES = core/adios.c \
 @BUILD_WRITE_TRUE@	core/common_adios.c core/adios_internals.c \
- at BUILD_WRITE_TRUE@	core/adios_internals_mxml.c core/buffer.c \
+ at BUILD_WRITE_TRUE@	core/adios_internals_mxml.c \
+ at BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
+ at BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) core/buffer.c \
 @BUILD_WRITE_TRUE@	core/adios_bp_v1.c core/adios_endianness.c \
 @BUILD_WRITE_TRUE@	core/bp_utils.c core/futils.c \
 @BUILD_WRITE_TRUE@	core/adios_error.c core/adios_read.c \
@@ -1283,16 +2217,19 @@ libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
 @BUILD_WRITE_TRUE@	core/adios_timing.c core/adios_read_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_transport_hooks.c \
 @BUILD_WRITE_TRUE@	core/adios_socket.c core/adios_logger.c \
- at BUILD_WRITE_TRUE@	core/util.c read/read_bp.c \
+ at BUILD_WRITE_TRUE@	core/util.c core/qhashtbl.c read/read_bp.c \
 @BUILD_WRITE_TRUE@	read/read_bp_staged.c read/read_bp_staged1.c \
 @BUILD_WRITE_TRUE@	write/adios_posix.c write/adios_posix1.c \
- at BUILD_WRITE_TRUE@	$(am__append_5) $(am__append_8) \
- at BUILD_WRITE_TRUE@	$(am__append_11)
+ at BUILD_WRITE_TRUE@	$(am__append_7) $(am__append_10) \
+ at BUILD_WRITE_TRUE@	$(am__append_13)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at FortranLibSources =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adiosf.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/common_adios.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_internals.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_internals_mxml.c \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_common_SOURCES) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_read_SOURCES) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(transforms_write_SOURCES) \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/buffer.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_bp_v1.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_endianness.c \
@@ -1307,36 +2244,37 @@ libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_socket.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/adios_logger.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/util.c \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	core/qhashtbl.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	read/read_bp.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	read/read_bp_staged.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	read/read_bp_staged1.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_posix.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_posix1.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_6) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_9) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_12) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_21) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_24)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_8) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_11) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_14) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_23) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_26)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at FortranLibMPISources =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_mpi.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_mpi_lustre.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_mpi_amr.c \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	write/adios_var_merge.c \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_16) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_19) \
- at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_28)
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_5) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_18) \
+ at BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	$(am__append_21)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at FortranLibSEQSources = core/mpidummy.c
 @BUILD_WRITE_TRUE at libadios_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_15) \
- at BUILD_WRITE_TRUE@	$(am__append_23) $(am__append_29)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_17) \
+ at BUILD_WRITE_TRUE@	$(am__append_25) $(am__append_29)
 @BUILD_WRITE_TRUE at libadios_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
 @BUILD_WRITE_TRUE at libadios_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_SEQ_CPPFLAGS) $(am__append_30)
 @BUILD_WRITE_TRUE at libadios_nompi_a_CFLAGS = $(MACRODEFFLAG)_NOMPI $(ADIOSLIB_SEQ_CFLAGS) 
 @BUILD_WRITE_TRUE at libadiosf_a_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) \
- at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_17) \
- at BUILD_WRITE_TRUE@	$(am__append_25) $(am__append_31)
+ at BUILD_WRITE_TRUE@	$(ADIOSLIB_CPPFLAGS) $(am__append_19) \
+ at BUILD_WRITE_TRUE@	$(am__append_27) $(am__append_31)
 @BUILD_WRITE_TRUE at libadiosf_a_CFLAGS = $(ADIOSLIB_CFLAGS) 
 @BUILD_WRITE_TRUE at libadiosf_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_NOMPI \
 @BUILD_WRITE_TRUE@	$(ADIOSLIB_EXTRA_CPPFLAGS) \
@@ -1382,19 +2320,24 @@ libadiosreadf_nompi_a_CFLAGS = $(am__append_67)
 libadiosread_a_SOURCES = core/adios_bp_v1.c core/adios_endianness.c \
 	core/bp_utils.c core/futils.c core/adios_error.c \
 	core/adios_read.c core/adios_read_v1.c core/common_read.c \
+	$(transforms_common_SOURCES) $(transforms_read_SOURCES) \
 	core/globals.c core/adios_read_hooks.c core/adios_logger.c \
-	core/util.c read/read_bp.c read/read_bp_staged.c \
-	read/read_bp_staged1.c $(am__append_35) $(am__append_36) \
-	$(am__append_37) $(am__append_38) $(am__append_39)
+	core/util.c core/qhashtbl.c read/read_bp.c \
+	read/read_bp_staged.c read/read_bp_staged1.c $(am__append_35) \
+	$(am__append_36) $(am__append_37) $(am__append_38) \
+	$(am__append_39)
 @HAVE_NSSI_TRUE at dist_libadiosread_a_SOURCES = nssi/adios_nssi_args.x
 @HAVE_NSSI_TRUE at nodist_libadiosread_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
 @BUILD_FORTRAN_TRUE at FortranReadLibSource = core/adios_bp_v1.c \
 @BUILD_FORTRAN_TRUE@	core/adios_endianness.c core/bp_utils.c \
 @BUILD_FORTRAN_TRUE@	core/futils.c core/adios_error.c \
- at BUILD_FORTRAN_TRUE@	core/common_read.c core/globals.c \
+ at BUILD_FORTRAN_TRUE@	core/common_read.c \
+ at BUILD_FORTRAN_TRUE@	$(transforms_common_SOURCES) \
+ at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) core/globals.c \
 @BUILD_FORTRAN_TRUE@	core/adios_read_hooks.c \
 @BUILD_FORTRAN_TRUE@	core/adios_logger.c core/util.c \
- at BUILD_FORTRAN_TRUE@	read/read_bp.c read/read_bp_staged.c \
+ at BUILD_FORTRAN_TRUE@	core/qhashtbl.c read/read_bp.c \
+ at BUILD_FORTRAN_TRUE@	read/read_bp_staged.c \
 @BUILD_FORTRAN_TRUE@	read/read_bp_staged1.c $(am__append_43) \
 @BUILD_FORTRAN_TRUE@	$(am__append_44) $(am__append_45) \
 @BUILD_FORTRAN_TRUE@	$(am__append_46) $(am__append_47)
@@ -1410,21 +2353,26 @@ libadiosread_a_SOURCES = core/adios_bp_v1.c core/adios_endianness.c \
 libadiosread_nompi_a_SOURCES = core/mpidummy.c core/adios_bp_v1.c \
 	core/adios_endianness.c core/bp_utils.c core/futils.c \
 	core/adios_error.c core/adios_read.c core/adios_read_v1.c \
-	core/common_read.c core/adios_logger.c core/buffer.c \
+	core/common_read.c $(transforms_common_SOURCES) \
+	$(transforms_read_SOURCES) core/adios_logger.c core/buffer.c \
 	core/globals.c core/adios_read_hooks.c core/util.c \
-	read/read_bp.c $(am__append_53) $(am__append_54) \
-	$(am__append_55) $(am__append_56) $(am__append_57)
+	core/qhashtbl.c read/read_bp.c $(am__append_53) \
+	$(am__append_54) $(am__append_55) $(am__append_56) \
+	$(am__append_57)
 @HAVE_NSSI_TRUE at dist_libadiosread_nompi_a_SOURCES = nssi/adios_nssi_args.x
 @HAVE_NSSI_TRUE at nodist_libadiosread_nompi_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
 @BUILD_FORTRAN_TRUE at FortranReadSeqLibSource = core/mpidummy.c \
 @BUILD_FORTRAN_TRUE@	core/adios_bp_v1.c core/adios_endianness.c \
 @BUILD_FORTRAN_TRUE@	core/bp_utils.c core/futils.c \
 @BUILD_FORTRAN_TRUE@	core/adios_error.c core/adios_logger.c \
- at BUILD_FORTRAN_TRUE@	core/common_read.c core/globals.c \
+ at BUILD_FORTRAN_TRUE@	core/common_read.c \
+ at BUILD_FORTRAN_TRUE@	$(transforms_common_SOURCES) \
+ at BUILD_FORTRAN_TRUE@	$(transforms_read_SOURCES) core/globals.c \
 @BUILD_FORTRAN_TRUE@	core/adios_read_hooks.c core/util.c \
- at BUILD_FORTRAN_TRUE@	read/read_bp.c $(am__append_61) \
- at BUILD_FORTRAN_TRUE@	$(am__append_62) $(am__append_63) \
- at BUILD_FORTRAN_TRUE@	$(am__append_64) $(am__append_65)
+ at BUILD_FORTRAN_TRUE@	core/qhashtbl.c read/read_bp.c \
+ at BUILD_FORTRAN_TRUE@	$(am__append_61) $(am__append_62) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_63) $(am__append_64) \
+ at BUILD_FORTRAN_TRUE@	$(am__append_65)
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at dist_libadiosreadf_nompi_a_SOURCES = nssi/adios_nssi_args.x
 @BUILD_FORTRAN_TRUE@@HAVE_NSSI_TRUE at nodist_libadiosreadf_nompi_a_SOURCES = adios_nssi_args.c adios_nssi_args.h
 @BUILD_FORTRAN_TRUE at libadiosreadf_nompi_a_SOURCES = $(FortranReadSeqLibSource) core/adiosf_read.c
@@ -1437,12 +2385,15 @@ libadios_internal_nompi_a_SOURCES = core/mpidummy.c \
                                     core/adios_endianness.c \
                                     core/bp_utils.c \
                                     core/adios_internals.c \
+                                    $(transforms_common_SOURCES) \
+                                    $(transforms_write_SOURCES) \
                                     core/buffer.c \
                                     core/adios_error.c \
                                     core/adios_logger.c \
                                     core/adios_internals_mxml.c \
                                     core/adios_timing.c \
                                     core/util.c \
+                                    core/qhashtbl.c \
                                     core/futils.c \
                                     core/adios_transport_hooks.c 
 
@@ -1469,17 +2420,20 @@ libadios_internal_nompi_a_CPPFLAGS = $(MACRODEFFLAG)_INTERNAL $(ADIOSLIB_EXTRA_C
 EXTRA_DIST = core/adios_bp_v1.h core/adios_endianness.h \
              core/adios_internals.h core/adios_internals_mxml.h core/adios_logger.h \
              core/adios_read_hooks.h core/adios_socket.h core/adios_timing.h \
-             core/adios_transport_hooks.h \
+             $(transforms_common_HDRS) $(transforms_read_HDRS) $(transforms_write_HDRS) \
+             transforms/transform_plugins.h transforms/adios_transform_identity_read.h \
+	     transforms/adios_transform_szip.h \
+             core/adios_socket.h core/adios_transport_hooks.h \
              core/bp_types.h core/bp_utils.h core/buffer.h core/common_adios.h \
              core/common_read.h core/futils.h core/globals.h core/ds_metadata.h \
-             core/util.h core/flexpath.h \
+             core/util.h core/flexpath.h core/qhashtbl.h \
              nssi/adios_nssi_config.h nssi/aggregation.h nssi/io_timer.h
 
 all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .cpp .f90 .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/transforms/Makefile.plugins $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -1781,6 +2735,180 @@ libadios_a-util.o: core/util.c
 libadios_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadios_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadios_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
+libadios_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadios_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadios_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadios_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadios_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadios_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadios_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadios_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadios_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadios_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadios_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadios_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadios_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadios_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadios_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadios_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadios_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadios_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadios_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadios_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadios_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadios_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadios_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadios_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadios_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadios_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadios_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadios_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadios_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadios_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadios_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadios_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadios_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadios_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadios_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadios_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadios_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadios_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadios_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadios_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadios_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadios_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadios_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadios_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadios_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadios_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadios_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadios_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadios_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadios_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadios_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadios_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadios_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadios_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadios_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadios_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadios_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -1835,6 +2963,12 @@ libadios_a-adios_var_merge.o: write/adios_var_merge.c
 libadios_a-adios_var_merge.obj: write/adios_var_merge.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_var_merge.obj `if test -f 'write/adios_var_merge.c'; then $(CYGPATH_W) 'write/adios_var_merge.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_var_merge.c'; fi`
 
+libadios_a-adios_mpi_bgq.o: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_bgq.o `test -f 'write/adios_mpi_bgq.c' || echo '$(srcdir)/'`write/adios_mpi_bgq.c
+
+libadios_a-adios_mpi_bgq.obj: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_bgq.obj `if test -f 'write/adios_mpi_bgq.c'; then $(CYGPATH_W) 'write/adios_mpi_bgq.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_bgq.c'; fi`
+
 libadios_a-adios_dataspaces.o: write/adios_dataspaces.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_dataspaces.o `test -f 'write/adios_dataspaces.c' || echo '$(srcdir)/'`write/adios_dataspaces.c
 
@@ -1919,48 +3053,6 @@ libadios_a-read_nssi.o: read/read_nssi.c
 libadios_a-read_nssi.obj: read/read_nssi.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-read_nssi.obj `if test -f 'read/read_nssi.c'; then $(CYGPATH_W) 'read/read_nssi.c'; else $(CYGPATH_W) '$(srcdir)/read/read_nssi.c'; fi`
 
-libadios_a-adios_mpi_stagger.o: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_stagger.o `test -f 'write/adios_mpi_stagger.c' || echo '$(srcdir)/'`write/adios_mpi_stagger.c
-
-libadios_a-adios_mpi_stagger.obj: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_stagger.obj `if test -f 'write/adios_mpi_stagger.c'; then $(CYGPATH_W) 'write/adios_mpi_stagger.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stagger.c'; fi`
-
-libadios_a-adios_mpi_aggregate.o: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_aggregate.o `test -f 'write/adios_mpi_aggregate.c' || echo '$(srcdir)/'`write/adios_mpi_aggregate.c
-
-libadios_a-adios_mpi_aggregate.obj: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_aggregate.obj `if test -f 'write/adios_mpi_aggregate.c'; then $(CYGPATH_W) 'write/adios_mpi_aggregate.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_aggregate.c'; fi`
-
-libadios_a-adios_provenance.o: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_provenance.o `test -f 'write/adios_provenance.c' || echo '$(srcdir)/'`write/adios_provenance.c
-
-libadios_a-adios_provenance.obj: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_provenance.obj `if test -f 'write/adios_provenance.c'; then $(CYGPATH_W) 'write/adios_provenance.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_provenance.c'; fi`
-
-libadios_a-adios_mpi_cio.o: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_cio.o `test -f 'write/adios_mpi_cio.c' || echo '$(srcdir)/'`write/adios_mpi_cio.c
-
-libadios_a-adios_mpi_cio.obj: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_cio.obj `if test -f 'write/adios_mpi_cio.c'; then $(CYGPATH_W) 'write/adios_mpi_cio.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_cio.c'; fi`
-
-libadios_a-adios_mpi_stripe.o: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_stripe.o `test -f 'write/adios_mpi_stripe.c' || echo '$(srcdir)/'`write/adios_mpi_stripe.c
-
-libadios_a-adios_mpi_stripe.obj: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_stripe.obj `if test -f 'write/adios_mpi_stripe.c'; then $(CYGPATH_W) 'write/adios_mpi_stripe.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stripe.c'; fi`
-
-libadios_a-adios_mpi_amr1.o: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_amr1.o `test -f 'write/adios_mpi_amr1.c' || echo '$(srcdir)/'`write/adios_mpi_amr1.c
-
-libadios_a-adios_mpi_amr1.obj: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_mpi_amr1.obj `if test -f 'write/adios_mpi_amr1.c'; then $(CYGPATH_W) 'write/adios_mpi_amr1.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_amr1.c'; fi`
-
-libadios_a-adios_adaptive.o: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_adaptive.o `test -f 'write/adios_adaptive.c' || echo '$(srcdir)/'`write/adios_adaptive.c
-
-libadios_a-adios_adaptive.obj: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_adaptive.obj `if test -f 'write/adios_adaptive.c'; then $(CYGPATH_W) 'write/adios_adaptive.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_adaptive.c'; fi`
-
 libadios_a-adios_nssi_args.o: adios_nssi_args.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_a_CPPFLAGS) $(CPPFLAGS) $(libadios_a_CFLAGS) $(CFLAGS) -c -o libadios_a-adios_nssi_args.o `test -f 'adios_nssi_args.c' || echo '$(srcdir)/'`adios_nssi_args.c
 
@@ -1997,6 +3089,96 @@ libadios_internal_nompi_a-adios_internals.o: core/adios_internals.c
 libadios_internal_nompi_a-adios_internals.obj: core/adios_internals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_internals.obj `if test -f 'core/adios_internals.c'; then $(CYGPATH_W) 'core/adios_internals.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals.c'; fi`
 
+libadios_internal_nompi_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadios_internal_nompi_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadios_internal_nompi_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadios_internal_nompi_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadios_internal_nompi_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadios_internal_nompi_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadios_internal_nompi_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadios_internal_nompi_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadios_internal_nompi_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadios_internal_nompi_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadios_internal_nompi_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadios_internal_nompi_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadios_internal_nompi_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadios_internal_nompi_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadios_internal_nompi_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadios_internal_nompi_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadios_internal_nompi_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadios_internal_nompi_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadios_internal_nompi_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadios_internal_nompi_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadios_internal_nompi_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadios_internal_nompi_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadios_internal_nompi_a-buffer.o: core/buffer.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
 
@@ -2033,6 +3215,12 @@ libadios_internal_nompi_a-util.o: core/util.c
 libadios_internal_nompi_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadios_internal_nompi_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadios_internal_nompi_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadios_internal_nompi_a-futils.o: core/futils.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_internal_nompi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libadios_internal_nompi_a-futils.o `test -f 'core/futils.c' || echo '$(srcdir)/'`core/futils.c
 
@@ -2069,6 +3257,174 @@ libadios_nompi_a-adios_internals_mxml.o: core/adios_internals_mxml.c
 libadios_nompi_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
 
+libadios_nompi_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadios_nompi_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadios_nompi_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadios_nompi_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadios_nompi_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadios_nompi_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadios_nompi_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadios_nompi_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadios_nompi_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadios_nompi_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadios_nompi_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadios_nompi_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadios_nompi_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadios_nompi_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadios_nompi_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadios_nompi_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadios_nompi_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadios_nompi_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadios_nompi_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadios_nompi_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadios_nompi_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadios_nompi_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadios_nompi_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadios_nompi_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadios_nompi_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadios_nompi_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadios_nompi_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadios_nompi_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadios_nompi_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadios_nompi_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadios_nompi_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadios_nompi_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadios_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadios_nompi_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadios_nompi_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadios_nompi_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadios_nompi_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadios_nompi_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadios_nompi_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadios_nompi_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadios_nompi_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadios_nompi_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadios_nompi_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadios_nompi_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadios_nompi_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadios_nompi_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadios_nompi_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadios_nompi_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadios_nompi_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadios_nompi_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadios_nompi_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadios_nompi_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadios_nompi_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadios_nompi_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadios_nompi_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadios_nompi_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadios_nompi_a-buffer.o: core/buffer.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
 
@@ -2171,6 +3527,12 @@ libadios_nompi_a-util.o: core/util.c
 libadios_nompi_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadios_nompi_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadios_nompi_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadios_nompi_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadios_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadios_nompi_a_CFLAGS) $(CFLAGS) -c -o libadios_nompi_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -2261,31 +3623,199 @@ libadiosf_a-adios_internals_mxml.o: core/adios_internals_mxml.c
 libadiosf_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
 
-libadiosf_a-buffer.o: core/buffer.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
+libadiosf_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
 
-libadiosf_a-buffer.obj: core/buffer.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-buffer.obj `if test -f 'core/buffer.c'; then $(CYGPATH_W) 'core/buffer.c'; else $(CYGPATH_W) '$(srcdir)/core/buffer.c'; fi`
+libadiosf_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
 
-libadiosf_a-adios_bp_v1.o: core/adios_bp_v1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_bp_v1.o `test -f 'core/adios_bp_v1.c' || echo '$(srcdir)/'`core/adios_bp_v1.c
+libadiosf_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
 
-libadiosf_a-adios_bp_v1.obj: core/adios_bp_v1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_bp_v1.obj `if test -f 'core/adios_bp_v1.c'; then $(CYGPATH_W) 'core/adios_bp_v1.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_bp_v1.c'; fi`
+libadiosf_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
 
-libadiosf_a-adios_endianness.o: core/adios_endianness.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_endianness.o `test -f 'core/adios_endianness.c' || echo '$(srcdir)/'`core/adios_endianness.c
+libadiosf_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
 
-libadiosf_a-adios_endianness.obj: core/adios_endianness.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_endianness.obj `if test -f 'core/adios_endianness.c'; then $(CYGPATH_W) 'core/adios_endianness.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_endianness.c'; fi`
+libadiosf_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
 
-libadiosf_a-futils.o: core/futils.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-futils.o `test -f 'core/futils.c' || echo '$(srcdir)/'`core/futils.c
+libadiosf_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
 
-libadiosf_a-futils.obj: core/futils.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-futils.obj `if test -f 'core/futils.c'; then $(CYGPATH_W) 'core/futils.c'; else $(CYGPATH_W) '$(srcdir)/core/futils.c'; fi`
+libadiosf_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
 
-libadiosf_a-adios_error.o: core/adios_error.c
+libadiosf_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosf_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosf_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosf_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosf_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosf_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosf_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosf_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosf_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosf_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosf_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosf_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosf_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosf_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosf_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosf_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosf_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosf_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosf_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosf_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosf_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosf_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosf_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosf_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosf_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosf_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadiosf_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadiosf_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadiosf_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadiosf_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadiosf_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadiosf_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadiosf_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadiosf_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadiosf_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadiosf_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadiosf_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadiosf_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadiosf_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadiosf_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadiosf_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadiosf_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadiosf_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadiosf_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadiosf_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadiosf_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadiosf_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadiosf_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
+libadiosf_a-buffer.o: core/buffer.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
+
+libadiosf_a-buffer.obj: core/buffer.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-buffer.obj `if test -f 'core/buffer.c'; then $(CYGPATH_W) 'core/buffer.c'; else $(CYGPATH_W) '$(srcdir)/core/buffer.c'; fi`
+
+libadiosf_a-adios_bp_v1.o: core/adios_bp_v1.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_bp_v1.o `test -f 'core/adios_bp_v1.c' || echo '$(srcdir)/'`core/adios_bp_v1.c
+
+libadiosf_a-adios_bp_v1.obj: core/adios_bp_v1.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_bp_v1.obj `if test -f 'core/adios_bp_v1.c'; then $(CYGPATH_W) 'core/adios_bp_v1.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_bp_v1.c'; fi`
+
+libadiosf_a-adios_endianness.o: core/adios_endianness.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_endianness.o `test -f 'core/adios_endianness.c' || echo '$(srcdir)/'`core/adios_endianness.c
+
+libadiosf_a-adios_endianness.obj: core/adios_endianness.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_endianness.obj `if test -f 'core/adios_endianness.c'; then $(CYGPATH_W) 'core/adios_endianness.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_endianness.c'; fi`
+
+libadiosf_a-futils.o: core/futils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-futils.o `test -f 'core/futils.c' || echo '$(srcdir)/'`core/futils.c
+
+libadiosf_a-futils.obj: core/futils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-futils.obj `if test -f 'core/futils.c'; then $(CYGPATH_W) 'core/futils.c'; else $(CYGPATH_W) '$(srcdir)/core/futils.c'; fi`
+
+libadiosf_a-adios_error.o: core/adios_error.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_error.o `test -f 'core/adios_error.c' || echo '$(srcdir)/'`core/adios_error.c
 
 libadiosf_a-adios_error.obj: core/adios_error.c
@@ -2345,6 +3875,12 @@ libadiosf_a-util.o: core/util.c
 libadiosf_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosf_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosf_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosf_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -2471,6 +4007,12 @@ libadiosf_a-adios_var_merge.o: write/adios_var_merge.c
 libadiosf_a-adios_var_merge.obj: write/adios_var_merge.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_var_merge.obj `if test -f 'write/adios_var_merge.c'; then $(CYGPATH_W) 'write/adios_var_merge.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_var_merge.c'; fi`
 
+libadiosf_a-adios_mpi_bgq.o: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_bgq.o `test -f 'write/adios_mpi_bgq.c' || echo '$(srcdir)/'`write/adios_mpi_bgq.c
+
+libadiosf_a-adios_mpi_bgq.obj: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_bgq.obj `if test -f 'write/adios_mpi_bgq.c'; then $(CYGPATH_W) 'write/adios_mpi_bgq.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_bgq.c'; fi`
+
 libadiosf_a-adios_phdf5.o: write/adios_phdf5.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_phdf5.o `test -f 'write/adios_phdf5.c' || echo '$(srcdir)/'`write/adios_phdf5.c
 
@@ -2483,48 +4025,6 @@ libadiosf_a-adios_nc4.o: write/adios_nc4.c
 libadiosf_a-adios_nc4.obj: write/adios_nc4.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_nc4.obj `if test -f 'write/adios_nc4.c'; then $(CYGPATH_W) 'write/adios_nc4.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_nc4.c'; fi`
 
-libadiosf_a-adios_mpi_stagger.o: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_stagger.o `test -f 'write/adios_mpi_stagger.c' || echo '$(srcdir)/'`write/adios_mpi_stagger.c
-
-libadiosf_a-adios_mpi_stagger.obj: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_stagger.obj `if test -f 'write/adios_mpi_stagger.c'; then $(CYGPATH_W) 'write/adios_mpi_stagger.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stagger.c'; fi`
-
-libadiosf_a-adios_mpi_aggregate.o: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_aggregate.o `test -f 'write/adios_mpi_aggregate.c' || echo '$(srcdir)/'`write/adios_mpi_aggregate.c
-
-libadiosf_a-adios_mpi_aggregate.obj: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_aggregate.obj `if test -f 'write/adios_mpi_aggregate.c'; then $(CYGPATH_W) 'write/adios_mpi_aggregate.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_aggregate.c'; fi`
-
-libadiosf_a-adios_provenance.o: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_provenance.o `test -f 'write/adios_provenance.c' || echo '$(srcdir)/'`write/adios_provenance.c
-
-libadiosf_a-adios_provenance.obj: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_provenance.obj `if test -f 'write/adios_provenance.c'; then $(CYGPATH_W) 'write/adios_provenance.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_provenance.c'; fi`
-
-libadiosf_a-adios_mpi_cio.o: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_cio.o `test -f 'write/adios_mpi_cio.c' || echo '$(srcdir)/'`write/adios_mpi_cio.c
-
-libadiosf_a-adios_mpi_cio.obj: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_cio.obj `if test -f 'write/adios_mpi_cio.c'; then $(CYGPATH_W) 'write/adios_mpi_cio.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_cio.c'; fi`
-
-libadiosf_a-adios_mpi_stripe.o: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_stripe.o `test -f 'write/adios_mpi_stripe.c' || echo '$(srcdir)/'`write/adios_mpi_stripe.c
-
-libadiosf_a-adios_mpi_stripe.obj: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_stripe.obj `if test -f 'write/adios_mpi_stripe.c'; then $(CYGPATH_W) 'write/adios_mpi_stripe.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stripe.c'; fi`
-
-libadiosf_a-adios_mpi_amr1.o: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_amr1.o `test -f 'write/adios_mpi_amr1.c' || echo '$(srcdir)/'`write/adios_mpi_amr1.c
-
-libadiosf_a-adios_mpi_amr1.obj: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_mpi_amr1.obj `if test -f 'write/adios_mpi_amr1.c'; then $(CYGPATH_W) 'write/adios_mpi_amr1.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_amr1.c'; fi`
-
-libadiosf_a-adios_adaptive.o: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_adaptive.o `test -f 'write/adios_adaptive.c' || echo '$(srcdir)/'`write/adios_adaptive.c
-
-libadiosf_a-adios_adaptive.obj: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adios_adaptive.obj `if test -f 'write/adios_adaptive.c'; then $(CYGPATH_W) 'write/adios_adaptive.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_adaptive.c'; fi`
-
 libadiosf_a-adiosf_read.o: core/adiosf_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_a_CFLAGS) $(CFLAGS) -c -o libadiosf_a-adiosf_read.o `test -f 'core/adiosf_read.c' || echo '$(srcdir)/'`core/adiosf_read.c
 
@@ -2561,6 +4061,174 @@ libadiosf_nompi_a-adios_internals_mxml.o: core/adios_internals_mxml.c
 libadiosf_nompi_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
 
+libadiosf_nompi_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosf_nompi_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosf_nompi_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosf_nompi_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosf_nompi_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosf_nompi_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosf_nompi_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosf_nompi_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosf_nompi_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosf_nompi_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosf_nompi_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosf_nompi_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosf_nompi_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosf_nompi_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosf_nompi_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosf_nompi_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosf_nompi_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosf_nompi_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosf_nompi_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosf_nompi_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosf_nompi_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosf_nompi_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosf_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosf_nompi_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadiosf_nompi_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadiosf_nompi_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadiosf_nompi_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadiosf_nompi_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadiosf_nompi_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadiosf_nompi_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadiosf_nompi_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadiosf_nompi_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadiosf_nompi_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadiosf_nompi_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadiosf_nompi_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadiosf_nompi_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadiosf_nompi_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadiosf_nompi_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadiosf_nompi_a-buffer.o: core/buffer.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
 
@@ -2645,6 +4313,12 @@ libadiosf_nompi_a-util.o: core/util.c
 libadiosf_nompi_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosf_nompi_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosf_nompi_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosf_nompi_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -2783,6 +4457,174 @@ libadiosf_nompi_v1_a-adios_internals_mxml.o: core/adios_internals_mxml.c
 libadiosf_nompi_v1_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
 
+libadiosf_nompi_v1_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosf_nompi_v1_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosf_nompi_v1_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosf_nompi_v1_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosf_nompi_v1_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosf_nompi_v1_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosf_nompi_v1_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosf_nompi_v1_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosf_nompi_v1_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosf_nompi_v1_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosf_nompi_v1_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosf_nompi_v1_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosf_nompi_v1_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosf_nompi_v1_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosf_nompi_v1_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosf_nompi_v1_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosf_nompi_v1_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosf_nompi_v1_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosf_nompi_v1_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosf_nompi_v1_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosf_nompi_v1_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosf_nompi_v1_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadiosf_nompi_v1_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadiosf_nompi_v1_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadiosf_nompi_v1_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadiosf_nompi_v1_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadiosf_nompi_v1_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadiosf_nompi_v1_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadiosf_nompi_v1_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadiosf_nompi_v1_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadiosf_nompi_v1_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadiosf_nompi_v1_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadiosf_nompi_v1_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadiosf_nompi_v1_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadiosf_nompi_v1_a-buffer.o: core/buffer.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
 
@@ -2867,6 +4709,12 @@ libadiosf_nompi_v1_a-util.o: core/util.c
 libadiosf_nompi_v1_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosf_nompi_v1_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosf_nompi_v1_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosf_nompi_v1_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_nompi_v1_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3005,6 +4853,174 @@ libadiosf_v1_a-adios_internals_mxml.o: core/adios_internals_mxml.c
 libadiosf_v1_a-adios_internals_mxml.obj: core/adios_internals_mxml.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_internals_mxml.obj `if test -f 'core/adios_internals_mxml.c'; then $(CYGPATH_W) 'core/adios_internals_mxml.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_internals_mxml.c'; fi`
 
+libadiosf_v1_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosf_v1_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosf_v1_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosf_v1_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosf_v1_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosf_v1_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosf_v1_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosf_v1_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosf_v1_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosf_v1_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosf_v1_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosf_v1_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosf_v1_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosf_v1_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosf_v1_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosf_v1_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosf_v1_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosf_v1_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosf_v1_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosf_v1_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosf_v1_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosf_v1_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosf_v1_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosf_v1_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosf_v1_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosf_v1_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosf_v1_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosf_v1_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosf_v1_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
+libadiosf_v1_a-adios_transforms_write.o: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_write.o `test -f 'core/transforms/adios_transforms_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_write.c
+
+libadiosf_v1_a-adios_transforms_write.obj: core/transforms/adios_transforms_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_write.obj `if test -f 'core/transforms/adios_transforms_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_write.c'; fi`
+
+libadiosf_v1_a-adios_transforms_hooks_write.o: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks_write.o `test -f 'core/transforms/adios_transforms_hooks_write.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_write.c
+
+libadiosf_v1_a-adios_transforms_hooks_write.obj: core/transforms/adios_transforms_hooks_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_hooks_write.obj `if test -f 'core/transforms/adios_transforms_hooks_write.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_write.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_write.c'; fi`
+
+libadiosf_v1_a-adios_transforms_util.o: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_util.o `test -f 'core/transforms/adios_transforms_util.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_util.c
+
+libadiosf_v1_a-adios_transforms_util.obj: core/transforms/adios_transforms_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_util.obj `if test -f 'core/transforms/adios_transforms_util.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_util.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_util.c'; fi`
+
+libadiosf_v1_a-adios_transforms_specparse.o: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_specparse.o `test -f 'core/transforms/adios_transforms_specparse.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_specparse.c
+
+libadiosf_v1_a-adios_transforms_specparse.obj: core/transforms/adios_transforms_specparse.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transforms_specparse.obj `if test -f 'core/transforms/adios_transforms_specparse.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_specparse.c'; fi`
+
+libadiosf_v1_a-adios_transform_identity_write.o: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_identity_write.o `test -f 'transforms/adios_transform_identity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_write.c
+
+libadiosf_v1_a-adios_transform_identity_write.obj: transforms/adios_transform_identity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_identity_write.obj `if test -f 'transforms/adios_transform_identity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_zlib_write.o: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_zlib_write.o `test -f 'transforms/adios_transform_zlib_write.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_write.c
+
+libadiosf_v1_a-adios_transform_zlib_write.obj: transforms/adios_transform_zlib_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_zlib_write.obj `if test -f 'transforms/adios_transform_zlib_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_bzip2_write.o: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_bzip2_write.o `test -f 'transforms/adios_transform_bzip2_write.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_write.c
+
+libadiosf_v1_a-adios_transform_bzip2_write.obj: transforms/adios_transform_bzip2_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_bzip2_write.obj `if test -f 'transforms/adios_transform_bzip2_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_szip_write.o: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_szip_write.o `test -f 'transforms/adios_transform_szip_write.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_write.c
+
+libadiosf_v1_a-adios_transform_szip_write.obj: transforms/adios_transform_szip_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_szip_write.obj `if test -f 'transforms/adios_transform_szip_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_isobar_write.o: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_isobar_write.o `test -f 'transforms/adios_transform_isobar_write.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_write.c
+
+libadiosf_v1_a-adios_transform_isobar_write.obj: transforms/adios_transform_isobar_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_isobar_write.obj `if test -f 'transforms/adios_transform_isobar_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_aplod_write.o: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_aplod_write.o `test -f 'transforms/adios_transform_aplod_write.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_write.c
+
+libadiosf_v1_a-adios_transform_aplod_write.obj: transforms/adios_transform_aplod_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_aplod_write.obj `if test -f 'transforms/adios_transform_aplod_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_write.c'; fi`
+
+libadiosf_v1_a-adios_transform_alacrity_write.o: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_alacrity_write.o `test -f 'transforms/adios_transform_alacrity_write.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_write.c
+
+libadiosf_v1_a-adios_transform_alacrity_write.obj: transforms/adios_transform_alacrity_write.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_transform_alacrity_write.obj `if test -f 'transforms/adios_transform_alacrity_write.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_write.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_write.c'; fi`
+
 libadiosf_v1_a-buffer.o: core/buffer.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-buffer.o `test -f 'core/buffer.c' || echo '$(srcdir)/'`core/buffer.c
 
@@ -3089,6 +5105,12 @@ libadiosf_v1_a-util.o: core/util.c
 libadiosf_v1_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosf_v1_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosf_v1_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosf_v1_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3215,6 +5237,12 @@ libadiosf_v1_a-adios_var_merge.o: write/adios_var_merge.c
 libadiosf_v1_a-adios_var_merge.obj: write/adios_var_merge.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_var_merge.obj `if test -f 'write/adios_var_merge.c'; then $(CYGPATH_W) 'write/adios_var_merge.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_var_merge.c'; fi`
 
+libadiosf_v1_a-adios_mpi_bgq.o: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_bgq.o `test -f 'write/adios_mpi_bgq.c' || echo '$(srcdir)/'`write/adios_mpi_bgq.c
+
+libadiosf_v1_a-adios_mpi_bgq.obj: write/adios_mpi_bgq.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_bgq.obj `if test -f 'write/adios_mpi_bgq.c'; then $(CYGPATH_W) 'write/adios_mpi_bgq.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_bgq.c'; fi`
+
 libadiosf_v1_a-adios_phdf5.o: write/adios_phdf5.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_phdf5.o `test -f 'write/adios_phdf5.c' || echo '$(srcdir)/'`write/adios_phdf5.c
 
@@ -3227,48 +5255,6 @@ libadiosf_v1_a-adios_nc4.o: write/adios_nc4.c
 libadiosf_v1_a-adios_nc4.obj: write/adios_nc4.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_nc4.obj `if test -f 'write/adios_nc4.c'; then $(CYGPATH_W) 'write/adios_nc4.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_nc4.c'; fi`
 
-libadiosf_v1_a-adios_mpi_stagger.o: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_stagger.o `test -f 'write/adios_mpi_stagger.c' || echo '$(srcdir)/'`write/adios_mpi_stagger.c
-
-libadiosf_v1_a-adios_mpi_stagger.obj: write/adios_mpi_stagger.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_stagger.obj `if test -f 'write/adios_mpi_stagger.c'; then $(CYGPATH_W) 'write/adios_mpi_stagger.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stagger.c'; fi`
-
-libadiosf_v1_a-adios_mpi_aggregate.o: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_aggregate.o `test -f 'write/adios_mpi_aggregate.c' || echo '$(srcdir)/'`write/adios_mpi_aggregate.c
-
-libadiosf_v1_a-adios_mpi_aggregate.obj: write/adios_mpi_aggregate.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_aggregate.obj `if test -f 'write/adios_mpi_aggregate.c'; then $(CYGPATH_W) 'write/adios_mpi_aggregate.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_aggregate.c'; fi`
-
-libadiosf_v1_a-adios_provenance.o: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_provenance.o `test -f 'write/adios_provenance.c' || echo '$(srcdir)/'`write/adios_provenance.c
-
-libadiosf_v1_a-adios_provenance.obj: write/adios_provenance.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_provenance.obj `if test -f 'write/adios_provenance.c'; then $(CYGPATH_W) 'write/adios_provenance.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_provenance.c'; fi`
-
-libadiosf_v1_a-adios_mpi_cio.o: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_cio.o `test -f 'write/adios_mpi_cio.c' || echo '$(srcdir)/'`write/adios_mpi_cio.c
-
-libadiosf_v1_a-adios_mpi_cio.obj: write/adios_mpi_cio.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_cio.obj `if test -f 'write/adios_mpi_cio.c'; then $(CYGPATH_W) 'write/adios_mpi_cio.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_cio.c'; fi`
-
-libadiosf_v1_a-adios_mpi_stripe.o: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_stripe.o `test -f 'write/adios_mpi_stripe.c' || echo '$(srcdir)/'`write/adios_mpi_stripe.c
-
-libadiosf_v1_a-adios_mpi_stripe.obj: write/adios_mpi_stripe.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_stripe.obj `if test -f 'write/adios_mpi_stripe.c'; then $(CYGPATH_W) 'write/adios_mpi_stripe.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_stripe.c'; fi`
-
-libadiosf_v1_a-adios_mpi_amr1.o: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_amr1.o `test -f 'write/adios_mpi_amr1.c' || echo '$(srcdir)/'`write/adios_mpi_amr1.c
-
-libadiosf_v1_a-adios_mpi_amr1.obj: write/adios_mpi_amr1.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_mpi_amr1.obj `if test -f 'write/adios_mpi_amr1.c'; then $(CYGPATH_W) 'write/adios_mpi_amr1.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_mpi_amr1.c'; fi`
-
-libadiosf_v1_a-adios_adaptive.o: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_adaptive.o `test -f 'write/adios_adaptive.c' || echo '$(srcdir)/'`write/adios_adaptive.c
-
-libadiosf_v1_a-adios_adaptive.obj: write/adios_adaptive.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adios_adaptive.obj `if test -f 'write/adios_adaptive.c'; then $(CYGPATH_W) 'write/adios_adaptive.c'; else $(CYGPATH_W) '$(srcdir)/write/adios_adaptive.c'; fi`
-
 libadiosf_v1_a-adiosf_read_v1.o: core/adiosf_read_v1.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosf_v1_a-adiosf_read_v1.o `test -f 'core/adiosf_read_v1.c' || echo '$(srcdir)/'`core/adiosf_read_v1.c
 
@@ -3323,6 +5309,108 @@ libadiosread_a-common_read.o: core/common_read.c
 libadiosread_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosread_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosread_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosread_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosread_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosread_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosread_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosread_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosread_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosread_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosread_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosread_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosread_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosread_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosread_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosread_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosread_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosread_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosread_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosread_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosread_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosread_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosread_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosread_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosread_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosread_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosread_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosread_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosread_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosread_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosread_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosread_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosread_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosread_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosread_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosread_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3347,6 +5435,12 @@ libadiosread_a-util.o: core/util.c
 libadiosread_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosread_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosread_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosread_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_a_CFLAGS) $(CFLAGS) -c -o libadiosread_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3461,6 +5555,108 @@ libadiosread_nompi_a-common_read.o: core/common_read.c
 libadiosread_nompi_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosread_nompi_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosread_nompi_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosread_nompi_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosread_nompi_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosread_nompi_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosread_nompi_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosread_nompi_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosread_nompi_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosread_nompi_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosread_nompi_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosread_nompi_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosread_nompi_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosread_nompi_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosread_nompi_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosread_nompi_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosread_nompi_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosread_nompi_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosread_nompi_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosread_nompi_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosread_nompi_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosread_nompi_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosread_nompi_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosread_nompi_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosread_nompi_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosread_nompi_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosread_nompi_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosread_nompi_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosread_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosread_nompi_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosread_nompi_a-adios_logger.o: core/adios_logger.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-adios_logger.o `test -f 'core/adios_logger.c' || echo '$(srcdir)/'`core/adios_logger.c
 
@@ -3491,6 +5687,12 @@ libadiosread_nompi_a-util.o: core/util.c
 libadiosread_nompi_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosread_nompi_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosread_nompi_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosread_nompi_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosread_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosread_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosread_nompi_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3575,6 +5777,108 @@ libadiosreadf_a-common_read.o: core/common_read.c
 libadiosreadf_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosreadf_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosreadf_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosreadf_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosreadf_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosreadf_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosreadf_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosreadf_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosreadf_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosreadf_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosreadf_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosreadf_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosreadf_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosreadf_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosreadf_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosreadf_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosreadf_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosreadf_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosreadf_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosreadf_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosreadf_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosreadf_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosreadf_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosreadf_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosreadf_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosreadf_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosreadf_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosreadf_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosreadf_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosreadf_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosreadf_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosreadf_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosreadf_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosreadf_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosreadf_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosreadf_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3599,6 +5903,12 @@ libadiosreadf_a-util.o: core/util.c
 libadiosreadf_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosreadf_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosreadf_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosreadf_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3713,6 +6023,108 @@ libadiosreadf_nompi_a-common_read.o: core/common_read.c
 libadiosreadf_nompi_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosreadf_nompi_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosreadf_nompi_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosreadf_nompi_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosreadf_nompi_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosreadf_nompi_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosreadf_nompi_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosreadf_nompi_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosreadf_nompi_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosreadf_nompi_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosreadf_nompi_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosreadf_nompi_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosreadf_nompi_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosreadf_nompi_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosreadf_nompi_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosreadf_nompi_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosreadf_nompi_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosreadf_nompi_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosreadf_nompi_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosreadf_nompi_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosreadf_nompi_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosreadf_nompi_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosreadf_nompi_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosreadf_nompi_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosreadf_nompi_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosreadf_nompi_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosreadf_nompi_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosreadf_nompi_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3731,6 +6143,12 @@ libadiosreadf_nompi_a-util.o: core/util.c
 libadiosreadf_nompi_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosreadf_nompi_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosreadf_nompi_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosreadf_nompi_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3833,6 +6251,108 @@ libadiosreadf_nompi_v1_a-common_read.o: core/common_read.c
 libadiosreadf_nompi_v1_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosreadf_nompi_v1_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosreadf_nompi_v1_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosreadf_nompi_v1_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosreadf_nompi_v1_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosreadf_nompi_v1_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosreadf_nompi_v1_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosreadf_nompi_v1_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3851,6 +6371,12 @@ libadiosreadf_nompi_v1_a-util.o: core/util.c
 libadiosreadf_nompi_v1_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosreadf_nompi_v1_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosreadf_nompi_v1_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosreadf_nompi_v1_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_nompi_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_nompi_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_nompi_v1_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
@@ -3935,6 +6461,108 @@ libadiosreadf_v1_a-common_read.o: core/common_read.c
 libadiosreadf_v1_a-common_read.obj: core/common_read.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-common_read.obj `if test -f 'core/common_read.c'; then $(CYGPATH_W) 'core/common_read.c'; else $(CYGPATH_W) '$(srcdir)/core/common_read.c'; fi`
 
+libadiosreadf_v1_a-adios_transforms_common.o: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_common.o `test -f 'core/transforms/adios_transforms_common.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_common.c
+
+libadiosreadf_v1_a-adios_transforms_common.obj: core/transforms/adios_transforms_common.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_common.obj `if test -f 'core/transforms/adios_transforms_common.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_common.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_common.c'; fi`
+
+libadiosreadf_v1_a-adios_transforms_hooks.o: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_hooks.o `test -f 'core/transforms/adios_transforms_hooks.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks.c
+
+libadiosreadf_v1_a-adios_transforms_hooks.obj: core/transforms/adios_transforms_hooks.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_hooks.obj `if test -f 'core/transforms/adios_transforms_hooks.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks.c'; fi`
+
+libadiosreadf_v1_a-adios_copyspec.o: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_copyspec.o `test -f 'core/adios_copyspec.c' || echo '$(srcdir)/'`core/adios_copyspec.c
+
+libadiosreadf_v1_a-adios_copyspec.obj: core/adios_copyspec.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_copyspec.obj `if test -f 'core/adios_copyspec.c'; then $(CYGPATH_W) 'core/adios_copyspec.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_copyspec.c'; fi`
+
+libadiosreadf_v1_a-adios_subvolume.o: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_subvolume.o `test -f 'core/adios_subvolume.c' || echo '$(srcdir)/'`core/adios_subvolume.c
+
+libadiosreadf_v1_a-adios_subvolume.obj: core/adios_subvolume.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_subvolume.obj `if test -f 'core/adios_subvolume.c'; then $(CYGPATH_W) 'core/adios_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_subvolume.c'; fi`
+
+libadiosreadf_v1_a-adios_transforms_read.o: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_read.o `test -f 'core/transforms/adios_transforms_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_read.c
+
+libadiosreadf_v1_a-adios_transforms_read.obj: core/transforms/adios_transforms_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_read.obj `if test -f 'core/transforms/adios_transforms_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transforms_hooks_read.o: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_hooks_read.o `test -f 'core/transforms/adios_transforms_hooks_read.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_hooks_read.c
+
+libadiosreadf_v1_a-adios_transforms_hooks_read.obj: core/transforms/adios_transforms_hooks_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_hooks_read.obj `if test -f 'core/transforms/adios_transforms_hooks_read.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_hooks_read.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_hooks_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transforms_reqgroup.o: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_reqgroup.o `test -f 'core/transforms/adios_transforms_reqgroup.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_reqgroup.c
+
+libadiosreadf_v1_a-adios_transforms_reqgroup.obj: core/transforms/adios_transforms_reqgroup.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_reqgroup.obj `if test -f 'core/transforms/adios_transforms_reqgroup.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_reqgroup.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_reqgroup.c'; fi`
+
+libadiosreadf_v1_a-adios_transforms_datablock.o: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_datablock.o `test -f 'core/transforms/adios_transforms_datablock.c' || echo '$(srcdir)/'`core/transforms/adios_transforms_datablock.c
+
+libadiosreadf_v1_a-adios_transforms_datablock.obj: core/transforms/adios_transforms_datablock.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transforms_datablock.obj `if test -f 'core/transforms/adios_transforms_datablock.c'; then $(CYGPATH_W) 'core/transforms/adios_transforms_datablock.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_transforms_datablock.c'; fi`
+
+libadiosreadf_v1_a-adios_patchdata.o: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_patchdata.o `test -f 'core/transforms/adios_patchdata.c' || echo '$(srcdir)/'`core/transforms/adios_patchdata.c
+
+libadiosreadf_v1_a-adios_patchdata.obj: core/transforms/adios_patchdata.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_patchdata.obj `if test -f 'core/transforms/adios_patchdata.c'; then $(CYGPATH_W) 'core/transforms/adios_patchdata.c'; else $(CYGPATH_W) '$(srcdir)/core/transforms/adios_patchdata.c'; fi`
+
+libadiosreadf_v1_a-adios_selection_util.o: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_selection_util.o `test -f 'core/adios_selection_util.c' || echo '$(srcdir)/'`core/adios_selection_util.c
+
+libadiosreadf_v1_a-adios_selection_util.obj: core/adios_selection_util.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_selection_util.obj `if test -f 'core/adios_selection_util.c'; then $(CYGPATH_W) 'core/adios_selection_util.c'; else $(CYGPATH_W) '$(srcdir)/core/adios_selection_util.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_identity_read.o: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_identity_read.o `test -f 'transforms/adios_transform_identity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_identity_read.c
+
+libadiosreadf_v1_a-adios_transform_identity_read.obj: transforms/adios_transform_identity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_identity_read.obj `if test -f 'transforms/adios_transform_identity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_identity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_identity_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_zlib_read.o: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_zlib_read.o `test -f 'transforms/adios_transform_zlib_read.c' || echo '$(srcdir)/'`transforms/adios_transform_zlib_read.c
+
+libadiosreadf_v1_a-adios_transform_zlib_read.obj: transforms/adios_transform_zlib_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_zlib_read.obj `if test -f 'transforms/adios_transform_zlib_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_zlib_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_zlib_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_bzip2_read.o: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_bzip2_read.o `test -f 'transforms/adios_transform_bzip2_read.c' || echo '$(srcdir)/'`transforms/adios_transform_bzip2_read.c
+
+libadiosreadf_v1_a-adios_transform_bzip2_read.obj: transforms/adios_transform_bzip2_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_bzip2_read.obj `if test -f 'transforms/adios_transform_bzip2_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_bzip2_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_bzip2_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_szip_read.o: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_szip_read.o `test -f 'transforms/adios_transform_szip_read.c' || echo '$(srcdir)/'`transforms/adios_transform_szip_read.c
+
+libadiosreadf_v1_a-adios_transform_szip_read.obj: transforms/adios_transform_szip_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_szip_read.obj `if test -f 'transforms/adios_transform_szip_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_szip_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_szip_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_isobar_read.o: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_isobar_read.o `test -f 'transforms/adios_transform_isobar_read.c' || echo '$(srcdir)/'`transforms/adios_transform_isobar_read.c
+
+libadiosreadf_v1_a-adios_transform_isobar_read.obj: transforms/adios_transform_isobar_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_isobar_read.obj `if test -f 'transforms/adios_transform_isobar_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_isobar_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_isobar_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_aplod_read.o: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_aplod_read.o `test -f 'transforms/adios_transform_aplod_read.c' || echo '$(srcdir)/'`transforms/adios_transform_aplod_read.c
+
+libadiosreadf_v1_a-adios_transform_aplod_read.obj: transforms/adios_transform_aplod_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_aplod_read.obj `if test -f 'transforms/adios_transform_aplod_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_aplod_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_aplod_read.c'; fi`
+
+libadiosreadf_v1_a-adios_transform_alacrity_read.o: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_alacrity_read.o `test -f 'transforms/adios_transform_alacrity_read.c' || echo '$(srcdir)/'`transforms/adios_transform_alacrity_read.c
+
+libadiosreadf_v1_a-adios_transform_alacrity_read.obj: transforms/adios_transform_alacrity_read.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-adios_transform_alacrity_read.obj `if test -f 'transforms/adios_transform_alacrity_read.c'; then $(CYGPATH_W) 'transforms/adios_transform_alacrity_read.c'; else $(CYGPATH_W) '$(srcdir)/transforms/adios_transform_alacrity_read.c'; fi`
+
 libadiosreadf_v1_a-globals.o: core/globals.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-globals.o `test -f 'core/globals.c' || echo '$(srcdir)/'`core/globals.c
 
@@ -3959,6 +6587,12 @@ libadiosreadf_v1_a-util.o: core/util.c
 libadiosreadf_v1_a-util.obj: core/util.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-util.obj `if test -f 'core/util.c'; then $(CYGPATH_W) 'core/util.c'; else $(CYGPATH_W) '$(srcdir)/core/util.c'; fi`
 
+libadiosreadf_v1_a-qhashtbl.o: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-qhashtbl.o `test -f 'core/qhashtbl.c' || echo '$(srcdir)/'`core/qhashtbl.c
+
+libadiosreadf_v1_a-qhashtbl.obj: core/qhashtbl.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-qhashtbl.obj `if test -f 'core/qhashtbl.c'; then $(CYGPATH_W) 'core/qhashtbl.c'; else $(CYGPATH_W) '$(srcdir)/core/qhashtbl.c'; fi`
+
 libadiosreadf_v1_a-read_bp.o: read/read_bp.c
 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libadiosreadf_v1_a_CPPFLAGS) $(CPPFLAGS) $(libadiosreadf_v1_a_CFLAGS) $(CFLAGS) -c -o libadiosreadf_v1_a-read_bp.o `test -f 'read/read_bp.c' || echo '$(srcdir)/'`read/read_bp.c
 
diff --git a/src/core/adios.c b/src/core/adios.c
index 8868d9a..b6d469f 100644
--- a/src/core/adios.c
+++ b/src/core/adios.c
@@ -30,11 +30,12 @@
 #endif
 
 extern struct adios_transport_struct * adios_transports;
+extern int adios_errno;
 
 int adios_set_application_id (int id)
 {
     globals_adios_set_application_id (id);
-    return 0;
+    return err_no_error;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -96,11 +97,12 @@ int adios_write_byid (int64_t fd_p, int64_t id, void * var)
  */
 int adios_write (int64_t fd_p, const char * name, void * var)
 {
+    int retval;
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_write\n");
-        return 1;
+        return adios_errno;
     }
 
     struct adios_var_struct * v = fd->group->vars;
@@ -108,20 +110,20 @@ int adios_write (int64_t fd_p, const char * name, void * var)
 
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
-        // nothing to do so just return
-        return 0;
+        // nothing to do so just return OK (=0)
+        return err_no_error; 
     }
-
-    v = adios_find_var_by_name (v, name, fd->group->all_unique_var_names);
+    log_debug ("%s (%s)\n", __func__, name);
+    v = adios_find_var_by_name (fd->group, name);
 
     if (!v)
     {
         adios_error (err_invalid_varname, "Bad var name (ignored) in adios_write(): '%s'\n", name);
 
-        return 1;
+        return adios_errno;
     }
 
-    common_adios_write_byid (fd, v, var);
+    retval = common_adios_write_byid (fd, v, var);
 #if 0
     if (fd->mode == adios_mode_read)
     {
@@ -208,10 +210,10 @@ int adios_write (int64_t fd_p, const char * name, void * var)
 
     if (fd->mode == adios_mode_write || fd->mode == adios_mode_append) 
     {
-        adios_copy_var_written (&fd->group->vars_written, v, fd);
+        adios_copy_var_written (fd->group, v);
     }
 #endif
-    return 0;
+    return retval;
 }
 
 
@@ -278,6 +280,7 @@ int adios_close (int64_t fd_p)
     while (v) {
         int j, idx;
         int c, count = 1;
+        // NCSU - Clear stats
         if (v->stats) {   
     
             if (v->type == adios_complex || v->type == adios_double_complex)
@@ -312,8 +315,13 @@ int adios_close (int64_t fd_p)
             }
         }
 
+        // NCSU ALACRITY-ADIOS - Clear transform metadata
+        // adios_transform_clear_transform_var(v); // Actually, no, we shouldn't free the metadata here, because this happens once a timestep,
+                                                   // and this shouldn't be free'd until finalize (it is just overwritten each timestep)
+
         v = v->next;
     }
+    return retval;
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -330,6 +338,7 @@ int adios_declare_group (int64_t * id, const char * name
                         )
 {
     int ret;
+    adios_errno = err_no_error;
     ret = adios_common_declare_group (id, name, adios_flag_no
                                       ,""
                                       ,""
@@ -340,13 +349,15 @@ int adios_declare_group (int64_t * id, const char * name
         struct adios_group_struct * g = (struct adios_group_struct *) *id;
         g->all_unique_var_names = adios_flag_no;
     }
-    return ret;
+    return adios_errno;
 }
 
 
 int adios_free_group (int64_t id)
 {
-    return adios_common_free_group (id);
+    adios_errno = err_no_error;
+    adios_common_free_group (id);
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -362,10 +373,12 @@ int64_t adios_define_var (int64_t group_id, const char * name
                          ,const char * local_offsets
                          )
 {
+    adios_errno = err_no_error;
     return adios_common_define_var (group_id, name, path
                                    ,type
                                    ,dimensions
                                    ,global_dimensions, local_offsets
+                                   ,NULL // NCSU ALACRITY-ADIOS
                                    );
 }
 
@@ -378,7 +391,9 @@ int adios_define_attribute (int64_t group, const char * name
                            ,const char * value, const char * var
                            )
 {
-    return adios_common_define_attribute (group, name, path, type, value, var);
+    adios_errno = err_no_error;
+    adios_common_define_attribute (group, name, path, type, value, var);
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -389,9 +404,11 @@ int adios_select_method (int64_t group, const char * method
                         ,const char * base_path
                         )
 {
-    return adios_common_select_method_by_group_id (0, method, parameters, group
-                                                  ,base_path, 0
-                                                  );
+    adios_errno = err_no_error;
+    adios_common_select_method_by_group_id (0, method, parameters, group
+                                            ,base_path, 0
+                                            );
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/adios_bp_v1.c b/src/core/adios_bp_v1.c
index 56f7c5a..ed4c904 100644
--- a/src/core/adios_bp_v1.c
+++ b/src/core/adios_bp_v1.c
@@ -37,8 +37,8 @@ static void alloc_aligned (struct adios_bp_buffer_struct_v1 * b, uint64_t size)
     b->allocated_buff_ptr = malloc (size + BYTE_ALIGN - 1);
     if (!b->allocated_buff_ptr)
     {
-	adios_error(err_no_memory, "BP_V1: Cannot allocate %llu\n",
-		    size);
+        adios_error(err_no_memory, "BP_V1: Cannot allocate %llu\n",
+                size);
         b->buff = 0;
         b->length = 0;
 
@@ -58,8 +58,8 @@ static void realloc_aligned (struct adios_bp_buffer_struct_v1 * b
                                     );
     if (!b->allocated_buff_ptr)
     {
-	adios_error(err_no_memory, "BP_V1: Cannot allocate %llu\n",
-		    size);
+        adios_error(err_no_memory, "BP_V1: Cannot allocate %llu\n",
+                size);
         b->buff = 0;
         b->length = 0;
 
@@ -117,17 +117,17 @@ int adios_parse_version (struct adios_bp_buffer_struct_v1 * b,
 
     if (b->length < 4)
     {
-	adios_error(err_invalid_buffer_version, "adios_parse_version requires"
-		    "a buffer of at least "
-		    "4 bytes.  Only %llu were provided\n", b->length);
+        adios_error(err_invalid_buffer_version, "adios_parse_version requires"
+                "a buffer of at least "
+                "4 bytes.  Only %llu were provided\n", b->length);
         return 1;
     }
 
     *version = ntohl (*(uint32_t *) (b->buff + b->offset));
     char *v = (char *) version;
     if (   (*v && !*(char *) &test)       // both writer and this machine are big endian
-	   || (!*(v+3) && *(char *) &test)   // both are little endian
-	)
+            || (!*(v+3) && *(char *) &test)   // both are little endian
+       )
     {
         b->change_endianness = adios_flag_no;//no need to change endiannness
     }
@@ -146,9 +146,9 @@ int adios_parse_index_offsets_v1 (struct adios_bp_buffer_struct_v1 * b)
 {
     if (b->length - b->offset < 24)
     {
-	adios_error(err_invalid_buffer_index, "adios_parse_index_offsets_v1"
-		    "requires a buffer of at least 24 bytes."
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_index, "adios_parse_index_offsets_v1"
+                "requires a buffer of at least 24 bytes."
+                "Only %llu were provided\n", b->length - b->offset);
         return 1;
     }
 
@@ -196,9 +196,9 @@ int adios_parse_process_group_index_v1 (struct adios_bp_buffer_struct_v1 * b,
     struct adios_index_process_group_struct_v1 ** root;
     if (b->length - b->offset < 16)
     {
-	adios_error(err_invalid_buffer_group, "adios_parse_process_group_index_v1"
-		    "requires a buffer of at least 16 bytes."
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_group, "adios_parse_process_group_index_v1"
+                "requires a buffer of at least 16 bytes."
+                "Only %llu were provided\n", b->length - b->offset);
         return 1;
     }
 
@@ -292,19 +292,23 @@ int adios_parse_process_group_index_v1 (struct adios_bp_buffer_struct_v1 * b,
 
 int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                               ,struct adios_index_var_struct_v1 ** vars_root
+                              ,qhashtbl_t *hashtbl_vars
+                              ,struct adios_index_var_struct_v1 ** vars_tail
                               )
 {
     struct adios_index_var_struct_v1 ** root;
 
     if (b->length - b->offset < 10)
     {
-	adios_error(err_invalid_buffer_vars, "adios_parse_vars_index_v1"
-		    "requires a buffer of at least 10 bytes."
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_vars, "adios_parse_vars_index_v1"
+                "requires a buffer of at least 10 bytes."
+                "Only %llu were provided\n", b->length - b->offset);
         return 1;
     }
 
     root = vars_root;
+    log_debug ("%s: hashtbl=%p size=%d\n", __func__,
+               hashtbl_vars, (hashtbl_vars ? hashtbl_vars->size(hashtbl_vars) : 0));
 
     uint16_t vars_count;
     uint64_t vars_length;
@@ -406,7 +410,9 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
             uint32_t characteristic_set_length;
             uint8_t item = 0;
 
+            // NCSU - Clear stats structure (Drew: probably redundant with memset above, but leave it to be safe)
             (*root)->characteristics [j].stats = 0;
+
             characteristic_set_count = (uint8_t) *(b->buff + b->offset);
             b->offset += 1;
 
@@ -465,9 +471,9 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                                 if (!data)
                                 {
-				    adios_error(err_no_memory, "cannot allocate"
-						"%d bytes to copy scalar %s\n",
-						data_size, (*root)->var_name);
+                                    adios_error(err_no_memory, "cannot allocate"
+                                            "%d bytes to copy scalar %s\n",
+                                            data_size, (*root)->var_name);
 
                                     return 1;
                                 }
@@ -506,9 +512,9 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                                 if (!data)
                                 {
-				    adios_error(err_no_memory, "cannot allocate"
-						"%d bytes to copy scalar %s\n",
-						data_size, (*root)->var_name);
+                                    adios_error(err_no_memory, "cannot allocate"
+                                            "%d bytes to copy scalar %s\n",
+                                            data_size, (*root)->var_name);
                                     return 1;
                                 }
 
@@ -560,7 +566,8 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                     case adios_characteristic_stat:
                     {
                         uint8_t k, c, idx;
-                        uint64_t count = adios_get_stat_set_count((*root)->type);
+                        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_index (*root);
+                        uint64_t count = adios_get_stat_set_count(original_var_type);
                         uint16_t characteristic_size;
 
                         (*root)->characteristics [j].stats = malloc (count * sizeof(struct adios_index_characteristics_stat_struct *));
@@ -629,7 +636,7 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                                     else
                                     {
                                         // NCSU - Generic for non-histogram data
-                                        characteristic_size = adios_get_stat_size((*root)->characteristics [j].stats[c][idx].data, (*root)->type, k);
+                                        characteristic_size = adios_get_stat_size((*root)->characteristics [j].stats[c][idx].data, original_var_type, k);
                                         (*root)->characteristics [j].stats[c][idx].data = malloc (characteristic_size);
 
                                         void * data = (*root)->characteristics [j].stats[c][idx].data;
@@ -655,6 +662,7 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                         if(b->change_endianness == adios_flag_yes) {
                             swap_32((*root)->characteristics [j].bitmap);
                         }
+                        // printf ("[%s:%d] Bitmap: %lu\n", __FUNCTION__, __LINE__, (*root)->characteristics [j].bitmap);
                         b->offset += 4;
                         break;
                     }
@@ -737,29 +745,52 @@ int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                             }
                         }
                         b->offset += dims_length;
+                        break;
+                    }
+
+                    // NCSU ALACRITY-ADIOS - Reading variable transformation type
+                    case adios_characteristic_transform_type:
+                    {
+                        adios_transform_deserialize_transform_characteristic(&(*root)->characteristics[j].transform, b);
+                        break;
                     }
                 }
                 item++;
             }
         }
 
+        // Add variable to the hash table too
+        log_debug ("  add variable to hash, path=%s, name=%s\n", 
+                  (*root)->var_path, (*root)->var_name);
+        if (hashtbl_vars) {
+            hashtbl_vars->put2 (hashtbl_vars, 
+                (*root)->var_path, (*root)->var_name, *root);
+        }
+
+        // record this as the tail
+        if (vars_tail)
+            *vars_tail = (*root);
+
         root = &(*root)->next;
     }
 
+    log_debug ("end of %s: hashtbl=%p size=%d\n", __func__,
+               hashtbl_vars, (hashtbl_vars ? hashtbl_vars->size(hashtbl_vars) : 0));
+
     return 0;
 }
 
 int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
-                          ,struct adios_index_attribute_struct_v1 ** attrs_root
+                                    ,struct adios_index_attribute_struct_v1 ** attrs_root
                           )
 {
     struct adios_index_attribute_struct_v1 ** root;
 
     if (b->length - b->offset < 10)
     {
-	adios_error(err_invalid_buffer_attrs, "adios_parse_attributes_index_v1 "
-		    "requires a buffer of at least 10 bytes."
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_attrs, "adios_parse_attributes_index_v1 "
+                "requires a buffer of at least 10 bytes."
+                "Only %llu were provided\n", b->length - b->offset);
 
         return 1;
     }
@@ -910,10 +941,10 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                         if (!data)
                         {
-			    adios_error(err_no_memory, "cannot allocate"
-					"%d bytes to copy scalar %s\n",
-					data_size, (*root)->attr_name);
-			    
+                            adios_error(err_no_memory, "cannot allocate"
+                                    "%d bytes to copy scalar %s\n",
+                                    data_size, (*root)->attr_name);
+
                             return 1;
                         }
 
@@ -1052,6 +1083,18 @@ int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
                         break;
                     }
+
+                    // NCSU ALACRITY-ADIOS - Deserialize transform characteristic
+                    case adios_characteristic_transform_type:
+                    {
+                        adios_transform_deserialize_transform_characteristic(&(*root)->characteristics[j].transform, b);
+                        /*
+                        (*root)->characteristics [j].transform_type =
+                                            *(uint8_t *) (b->buff + b->offset);
+                        b->offset += 1;
+                        */
+                        break;
+                    }
                 }
                 item++;
             }
@@ -1069,9 +1112,9 @@ int adios_parse_process_group_header_v1 (struct adios_bp_buffer_struct_v1 * b
 {
     if (b->length - b->offset < 16)
     {
-	adios_error(err_invalid_buffer_group, "adios_parse_process_group_header_v1"
-		    "requires a buffer of at least 16 bytes. "
-		    "Only %llu were provided\n",b->length - b->offset);
+        adios_error(err_invalid_buffer_group, "adios_parse_process_group_header_v1"
+                "requires a buffer of at least 16 bytes. "
+                "Only %llu were provided\n",b->length - b->offset);
         return 1;
     }
 
@@ -1173,9 +1216,9 @@ int adios_parse_vars_header_v1 (struct adios_bp_buffer_struct_v1 * b
 
     if (b->length - b->offset < 10)
     {
-	adios_error(err_invalid_buffer_vars, "adios_parse_vars_header_v1"
-		    "requires a buffer of at least 10 bytes. "
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_vars, "adios_parse_vars_header_v1"
+                "requires a buffer of at least 10 bytes. "
+                "Only %llu were provided\n", b->length - b->offset);
 
         vars_header->count = 0;
         vars_header->length = 0;
@@ -1203,9 +1246,9 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
 {
     if (b->length - b->offset < 21)
     {
-	adios_error(err_invalid_buffer_vars, "adios_parse_var_data_header_v1"
-		    "requires a buffer of at least 21 bytes."
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_vars, "adios_parse_var_data_header_v1"
+                "requires a buffer of at least 21 bytes."
+                "Only %llu were provided\n", b->length - b->offset);
 
         return 1;
     }
@@ -1390,6 +1433,14 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
     var_header->characteristics.value = 0;
     var_header->characteristics.dims.count = 0;
     var_header->characteristics.dims.dims = 0;
+    // NCSU - Initialize statistics fields
+    var_header->characteristics.bitmap = 0;
+    var_header->characteristics.stats = 0;
+    // NCSU ALACRITY-ADIOS - Initialize transform field
+    adios_transform_init_transform_characteristic(&var_header->characteristics.transform);
+    //var_header->characteristics.transform_type = adios_transform_none;
+    //var_header->characteristics.pre_transform_type = adios_unknown;
+    //var_header->characteristics.pre_transform_dimensions = 0;
     for (i = 0; i < characteristics_count; i++)
     {
         uint8_t flag;
@@ -1419,6 +1470,11 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
                 b->offset += 8;
                 break;
 
+            // NCSU ALACRITY-ADIOS - Read in transform type field
+            case adios_characteristic_transform_type:
+                adios_transform_deserialize_transform_characteristic(&var_header->characteristics.transform, b);
+                break;
+
             //NCSU - Read in bitmap
             case adios_characteristic_bitmap:
                 var_header->characteristics.bitmap = *(uint32_t *)
@@ -1433,8 +1489,10 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
             case adios_characteristic_stat:
             {
                 uint8_t j = 0, idx = 0;
-                uint8_t c = 0, count = adios_get_stat_set_count (var_header->type);
+                uint8_t c = 0;
+                enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var_header (var_header);
                 uint64_t characteristic_size;
+                uint8_t count = adios_get_stat_set_count (original_var_type);
 
                 var_header->characteristics.stats = malloc(count * sizeof(struct adios_index_characteristics_stat_struct *));
 
@@ -1503,7 +1561,7 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
                             }
                             else
                             {
-                                characteristic_size = adios_get_stat_size(var_header->characteristics.stats[c][idx].data, var_header->type, j);
+                                characteristic_size = adios_get_stat_size(var_header->characteristics.stats[c][idx].data, original_var_type, j);
 
                                 var_header->characteristics.stats[c][idx].data = malloc(characteristic_size);
                                 memcpy (var_header->characteristics.stats[c][idx].data, (b->buff + b->offset)
@@ -1511,7 +1569,7 @@ int adios_parse_var_data_header_v1 (struct adios_bp_buffer_struct_v1 * b
                                    );
 
                                 if(b->change_endianness == adios_flag_yes) {
-                                    swap_adios_type(var_header->characteristics.stats[c][idx].data, var_header->type);
+                                    swap_adios_type(var_header->characteristics.stats[c][idx].data, original_var_type);
                                 }
 
                                 b->offset += characteristic_size;
@@ -1679,24 +1737,25 @@ int adios_clear_var_header_v1 (struct adios_var_header_struct_v1 * var_header)
     if (c->stats)
     {
         uint8_t j = 0, idx = 0;
-        uint8_t i = 0, count = adios_get_stat_set_count(var_header->type);
+        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var_header (var_header);
+        uint8_t i = 0, count = adios_get_stat_set_count(original_var_type);
 
         while (c->bitmap >> j)
         {
             if ((c->bitmap >> j) & 1)
             {
                 for (i = 0; i < count; i ++)
-				{
-					if (j == adios_statistic_hist)
-					{
-						struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) (c->stats[i][idx].data);
-						free (hist->breaks);
-						free (hist->frequencies);
-						free (hist);
-					}
-					else
-                    	free (c->stats[i][idx].data);
-				}
+                {
+                    if (j == adios_statistic_hist)
+                    {
+                        struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) (c->stats[i][idx].data);
+                        free (hist->breaks);
+                        free (hist->frequencies);
+                        free (hist);
+                    }
+                    else
+                        free (c->stats[i][idx].data);
+                }
                 idx ++;
             }
             j ++;
@@ -1707,7 +1766,9 @@ int adios_clear_var_header_v1 (struct adios_var_header_struct_v1 * var_header)
 
         free (c->stats);
         c->stats = 0;
+        c->bitmap = 0; // NCSU - Added by Drew Boyuka
     }
+
     if (c->dims.dims)
     {
         free (c->dims.dims);
@@ -1721,6 +1782,9 @@ int adios_clear_var_header_v1 (struct adios_var_header_struct_v1 * var_header)
     }
     c->var_id = 0;
 
+    // NCSU ALACRITY-ADIOS - Clear transform metadata
+    adios_transform_clear_transform_characteristic(&c->transform);
+
     return 0;
 }
 
@@ -1732,11 +1796,11 @@ int adios_parse_var_data_payload_v1 (struct adios_bp_buffer_struct_v1 * b
 {
     if (b->length - b->offset < var_header->payload_size)
     {
-	adios_error(err_invalid_buffer_vars, "adios_parse_var_data_payload_v1"
-		    " for name %s path %s requires a buffer of at least "
-		    "%llu bytes. Only %llu were provided\n", var_header->name, 
-		    var_header->path, var_header->payload_size, 
-		    b->length - b->offset);
+        adios_error(err_invalid_buffer_vars, "adios_parse_var_data_payload_v1"
+                " for name %s path %s requires a buffer of at least "
+                "%llu bytes. Only %llu were provided\n", var_header->name, 
+                var_header->path, var_header->payload_size, 
+                b->length - b->offset);
 
         b->offset += var_header->payload_size;
 
@@ -1747,10 +1811,10 @@ int adios_parse_var_data_payload_v1 (struct adios_bp_buffer_struct_v1 * b
        )
     {
         adios_error(err_invalid_buffer_vars, "reading var name %s path %s"
-		    "requires a buffer of at least %llu bytes.  "
-		    "Only %llu were provided\n" , var_header->name, 
-		    var_header->path, var_header->payload_size, 
-		    payload_buffer_size);
+                "requires a buffer of at least %llu bytes.  "
+                "Only %llu were provided\n" , var_header->name, 
+                var_header->path, var_header->payload_size, 
+                payload_buffer_size);
 
         b->offset += var_header->payload_size;
 
@@ -1793,9 +1857,9 @@ int adios_parse_attributes_header_v1 (struct adios_bp_buffer_struct_v1 * b
 {
     if (b->length - b->offset < 10)
     {
-	adios_error(err_invalid_buffer_attrs, "adios_parse_attributes_header_v1"
-		    "requires a buffer of at least 10 bytes.  "
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_attrs, "adios_parse_attributes_header_v1"
+                "requires a buffer of at least 10 bytes.  "
+                "Only %llu were provided\n", b->length - b->offset);
 
         attrs_header->count = 0;
         attrs_header->length = 0;
@@ -1819,14 +1883,14 @@ int adios_parse_attributes_header_v1 (struct adios_bp_buffer_struct_v1 * b
 }
 
 int adios_parse_attribute_v1 (struct adios_bp_buffer_struct_v1 * b
-                             ,struct adios_attribute_struct_v1 * attribute
-                             )
+        ,struct adios_attribute_struct_v1 * attribute
+        )
 {
     if (b->length - b->offset < 15)
     {
-	adios_error(err_invalid_buffer_attrs, "adios_parse_attribute_data_payload_v1"
-		    "requires a buffer of at least 15 bytes.  "
-		    "Only %llu were provided\n", b->length - b->offset);
+        adios_error(err_invalid_buffer_attrs, "adios_parse_attribute_data_payload_v1"
+                "requires a buffer of at least 15 bytes.  "
+                "Only %llu were provided\n", b->length - b->offset);
 
         return 1;
     }
@@ -1957,8 +2021,8 @@ void * adios_dupe_data_scalar (enum ADIOS_DATATYPES type, void * in)
             d = malloc (element_size);
             if (!d)
             {
-		adios_error(err_no_memory, "cannot allocate %d "
-			    "bytes to copy scalar\n", element_size);
+                adios_error(err_no_memory, "cannot allocate %d "
+                        "bytes to copy scalar\n", element_size);
 
                 return 0;
             }
@@ -1970,8 +2034,8 @@ void * adios_dupe_data_scalar (enum ADIOS_DATATYPES type, void * in)
             d = malloc (element_size + 1);
             if (!d)
             {
-		adios_error(err_no_memory, "cannot allocate %d "
-			    "bytes to copy scalar\n", element_size+1);
+                adios_error(err_no_memory, "cannot allocate %d "
+                        "bytes to copy scalar\n", element_size+1);
 
                 return 0;
             }
@@ -2013,7 +2077,7 @@ void adios_posix_read_version (struct adios_bp_buffer_struct_v1 * b)
 
     r = read (b->f, b->buff, 28);
     if (r != 28)
-	log_warn("could not read 28 bytes. read only: %llu\n", r);
+        log_warn("could not read 28 bytes. read only: %llu\n", r);
 }
 
 void adios_init_buffer_read_index_offsets (struct adios_bp_buffer_struct_v1 * b)
@@ -2081,7 +2145,7 @@ void adios_posix_read_attributes_index (struct adios_bp_buffer_struct_v1 * b)
 
     if (r != b->attrs_size)
         log_warn("reading attributess_index: wanted %llu, read: %llu\n",
-		 b->attrs_size, r);
+                b->attrs_size, r);
 }
 
 void adios_init_buffer_read_process_group (struct adios_bp_buffer_struct_v1 * b)
@@ -2105,9 +2169,9 @@ uint64_t adios_posix_read_process_group (struct adios_bp_buffer_struct_v1 * b)
     if (pg_size != b->read_pg_size)
     {
         log_warn("adios_read_process_group: "
-		 "Tried to read: %llu, but only got: "
-		 "%llu error: %s\n", b->read_pg_size, 
-		 pg_size, strerror(errno));
+                "Tried to read: %llu, but only got: "
+                "%llu error: %s\n", b->read_pg_size, 
+                pg_size, strerror(errno));
 
         pg_size = 0;
     }
@@ -2133,7 +2197,7 @@ int adios_posix_open_read_internal (const char * filename
     if (b->f == -1)
     {
         adios_error(err_file_not_found, "ADIOS POSIX: file not found: %s\n", 
-		    name);
+                name);
 
         free (name);
 
diff --git a/src/core/adios_bp_v1.h b/src/core/adios_bp_v1.h
index 94c3199..974b8c9 100644
--- a/src/core/adios_bp_v1.h
+++ b/src/core/adios_bp_v1.h
@@ -11,6 +11,7 @@
 #include "unistd.h"
 #include "public/adios_types.h"
 #include "core/adios_transport_hooks.h"
+#include "core/qhashtbl.h"
 
 #define ADIOS_VERSION_NUM_MASK                       0x00000011
 #define ADIOS_VERSION_HAVE_SUBFILE                   0x00000100
@@ -28,10 +29,11 @@ enum ADIOS_CHARACTERISTICS
     ,adios_characteristic_time_index     = 8
     ,adios_characteristic_bitmap         = 9
     ,adios_characteristic_stat           = 10
+    ,adios_characteristic_transform_type = 11
 };
 
 #ifndef ADIOS_STAT_LENGTH
-	#define ADIOS_STAT_LENGTH 7 
+    #define ADIOS_STAT_LENGTH 7 
 #endif
 
 // NCSU - Adding statistics
@@ -39,11 +41,11 @@ enum ADIOS_STAT
 {
      adios_statistic_min             = 0
     ,adios_statistic_max             = 1
-    ,adios_statistic_cnt			 = 2 
-    ,adios_statistic_sum			 = 3 
-    ,adios_statistic_sum_square 	 = 4 
-    ,adios_statistic_hist		 	 = 5 
-	,adios_statistic_finite		     = 6 
+    ,adios_statistic_cnt             = 2 
+    ,adios_statistic_sum             = 3 
+    ,adios_statistic_sum_square      = 4 
+    ,adios_statistic_hist            = 5 
+    ,adios_statistic_finite          = 6 
 };
 
 struct adios_bp_buffer_struct_v1
@@ -94,7 +96,7 @@ struct adios_index_characteristic_dims_struct_v1
 // NCSU - Generic data for all statistics
 struct adios_index_characteristics_stat_struct
 {
-	void * data;
+    void * data;
 };
 
 // NCSU - Structure for histogram
@@ -107,6 +109,17 @@ struct adios_index_characteristics_hist_struct
     double * breaks; //breaks array for the histogram, output this to gnuplot
 };
 
+
+struct adios_index_characteristic_transform_struct {
+    uint8_t transform_type;
+
+    enum ADIOS_DATATYPES pre_transform_type;
+    struct adios_index_characteristic_dims_struct_v1 pre_transform_dimensions;
+
+    uint16_t transform_metadata_len;
+    void *transform_metadata;
+};
+
 struct adios_index_characteristic_struct_v1
 {
     uint64_t offset;  // beginning of the var or attr entry
@@ -120,6 +133,16 @@ struct adios_index_characteristic_struct_v1
     uint32_t bitmap;
 
     struct adios_index_characteristics_stat_struct ** stats;
+
+    // NCSU ALACRITY-ADIOS - Adding transform-related fields
+    /*
+    uint8_t transform_type;
+    enum ADIOS_DATATYPES pre_transform_type;
+    struct adios_index_characteristic_dims_struct_v1 pre_transform_dimensions;
+    uint16_t transform_metadata_len;
+    void *transform_metadata;
+    */
+    struct adios_index_characteristic_transform_struct transform;
 };
 
 struct adios_index_var_struct_v1
@@ -154,6 +177,20 @@ struct adios_index_attribute_struct_v1
     struct adios_index_attribute_struct_v1 * next;
 };
 
+/* Struct to hold the 3 main pointers of the index:
+ * group, variable and attribute indices
+ */
+struct adios_index_struct_v1
+{
+    struct adios_index_process_group_struct_v1 * pg_root;
+    struct adios_index_var_struct_v1           * vars_root;
+    struct adios_index_var_struct_v1           * vars_tail;
+    struct adios_index_attribute_struct_v1     * attrs_root;
+    struct adios_index_attribute_struct_v1     * attrs_tail;
+    qhashtbl_t *hashtbl_vars;  // to speed up merging lists
+    qhashtbl_t *hashtbl_attrs; // to speed up merging lists
+};
+
 struct adios_method_info_struct_v1
 {
     enum ADIOS_IO_METHOD id;
@@ -252,9 +289,11 @@ int adios_parse_process_group_index_v1 (struct adios_bp_buffer_struct_v1 * b
 
 int adios_parse_vars_index_v1 (struct adios_bp_buffer_struct_v1 * b
                               ,struct adios_index_var_struct_v1 ** vars_root
+                              ,qhashtbl_t *hashtbl_vars
+                              ,struct adios_index_var_struct_v1 ** vars_tail
                               );
 int adios_parse_attributes_index_v1 (struct adios_bp_buffer_struct_v1 * b
-                          ,struct adios_index_attribute_struct_v1 ** attrs_root
+                                    ,struct adios_index_attribute_struct_v1 ** attrs_root
                           );
 
 int adios_parse_process_group_header_v1 (struct adios_bp_buffer_struct_v1 * b
diff --git a/src/core/adios_copyspec.c b/src/core/adios_copyspec.c
new file mode 100644
index 0000000..d684961
--- /dev/null
+++ b/src/core/adios_copyspec.c
@@ -0,0 +1,215 @@
+/*
+ * adios_copyspec.c
+ *
+ *
+ *  Created on: Aug 2, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+#include "util.h"
+#include "core/adios_copyspec.h"
+#include "core/common_read.h"
+#include "public/adios_selection.h"
+
+//
+// Init and free
+//
+
+static void adios_copyspec_init_from_bufs(adios_subvolume_copy_spec *copy_spec,
+                                          int ndim, const uint64_t *subv_dims,
+                                          const uint64_t *dst_dims,
+                                          const uint64_t *dst_subv_offsets,
+                                          const uint64_t *src_dims,
+                                          const uint64_t *src_subv_offsets) {
+    const int dimsize = ndim * sizeof(uint64_t);
+    copy_spec->ndim             = ndim;
+    copy_spec->subv_dims        = subv_dims        ? bufdup(subv_dims, 1, dimsize)        : malloc(dimsize);
+    copy_spec->dst_dims         = dst_dims         ? bufdup(dst_dims, 1, dimsize)         : malloc(dimsize);
+    copy_spec->dst_subv_offsets = dst_subv_offsets ? bufdup(dst_subv_offsets, 1, dimsize) : malloc(dimsize);
+    copy_spec->src_dims         = src_dims         ? bufdup(src_dims, 1, dimsize)         : malloc(dimsize);
+    copy_spec->src_subv_offsets = src_subv_offsets ? bufdup(src_subv_offsets, 1, dimsize) : malloc(dimsize);
+}
+
+void adios_copyspec_init(adios_subvolume_copy_spec *copy_spec,
+                         int ndim, const uint64_t *subv_dims,
+                         const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                         const uint64_t *src_dims, const uint64_t *src_subv_offsets) {
+    assert(ndim > 0 && subv_dims &&
+           dst_dims && dst_subv_offsets &&
+           src_dims && src_subv_offsets);
+    copy_spec->ndim              = ndim;
+    copy_spec->subv_dims         = subv_dims;
+    copy_spec->dst_dims          = dst_dims;
+    copy_spec->dst_subv_offsets  = dst_subv_offsets;
+    copy_spec->src_dims          = src_dims;
+    copy_spec->src_subv_offsets  = src_subv_offsets;
+}
+
+int adios_copyspec_init_from_intersection(adios_subvolume_copy_spec *copy_spec, int ndim,
+                                          const uint64_t *dst_dims, const uint64_t *dst_goffsets,
+                                          const uint64_t *src_dims, const uint64_t *src_goffsets) {
+    int dim;
+
+    // Initialize with number of dimensions and source/destination dimensions
+    // Offsets and subvolume dimension are unknown at this time
+    // Arg order:
+    // copyspec, ndim, subv_dims
+    // dst_dims, dst_subv_offsets
+    // src_dims, src_subv_offsets
+    adios_copyspec_init_from_bufs(copy_spec, ndim, NULL,
+                                  dst_dims, NULL,
+                                  src_dims, NULL);
+
+    // Compute the intersection to fill in the rest of the information
+    const int intersects =
+        intersect_volumes(ndim, dst_dims, dst_goffsets, src_dims, src_goffsets,
+                          copy_spec->subv_dims, NULL,
+                          copy_spec->dst_subv_offsets, copy_spec->src_subv_offsets);
+
+    return intersects;
+}
+
+int adios_copyspec_init_from_bb_intersection(adios_subvolume_copy_spec *copy_spec,
+                                             const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                             const uint64_t *src_dims, const uint64_t *src_goffsets) {
+
+    assert(dst_bb); assert(src_dims); assert(src_goffsets);
+    return adios_copyspec_init_from_intersection(copy_spec, dst_bb->ndim,
+                                                 dst_bb->count, dst_bb->start,
+                                                 src_dims, src_goffsets);
+}
+
+int adios_copyspec_init_from_2bb_intersection(adios_subvolume_copy_spec *copy_spec,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb) {
+
+    assert(dst_bb); assert(src_bb); assert(dst_bb->ndim == src_bb->ndim);
+    return adios_copyspec_init_from_intersection(copy_spec, dst_bb->ndim,
+                                                 dst_bb->count, dst_bb->start,
+                                                 src_bb->count, src_bb->start);
+}
+
+
+#define MYFREE(x) {if (x) free((void*)x);}
+void adios_copyspec_free(adios_subvolume_copy_spec **copy_spec_ptr, int free_buffers) {
+    adios_subvolume_copy_spec *copy_spec = *copy_spec_ptr;
+    if (free_buffers) {
+        MYFREE(copy_spec->subv_dims);
+        MYFREE(copy_spec->dst_dims);
+        MYFREE(copy_spec->dst_subv_offsets);
+        MYFREE(copy_spec->src_dims);
+        MYFREE(copy_spec->src_subv_offsets);
+    }
+    memset(copy_spec, 0, sizeof(adios_subvolume_copy_spec));
+
+    MYFREE(*copy_spec_ptr);
+}
+#undef MYFREE
+
+//
+// Derivative copyspec functions
+//
+
+void adios_copyspec_copy(adios_subvolume_copy_spec *dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec) {
+    // Arg order:
+    // copyspec, ndim, subv_dims
+    // dst_dims, dst_subv_offsets
+    // src_dims, src_subv_offsets
+    adios_copyspec_init_from_bufs(dst_copy_spec, src_copy_spec->ndim, src_copy_spec->subv_dims,
+                                  src_copy_spec->dst_dims, src_copy_spec->dst_subv_offsets,
+                                  src_copy_spec->src_dims, src_copy_spec->src_subv_offsets);
+}
+
+adios_subvolume_copy_spec * adios_copyspec_dup(const adios_subvolume_copy_spec *copy_spec) {
+    adios_subvolume_copy_spec *new_copy_spec = malloc(sizeof(adios_subvolume_copy_spec));
+    adios_copyspec_copy(new_copy_spec, copy_spec);
+    return new_copy_spec;
+}
+
+void adios_copyspec_shrink_dst_to_subv(adios_subvolume_copy_spec * dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec) {
+    const int ndim = src_copy_spec->ndim;
+
+    // Arg order:
+    // copyspec, ndim, subv_dims
+    // dst_dims, dst_subv_offsets
+    // src_dims, src_subv_offsets
+    adios_copyspec_init_from_bufs(dst_copy_spec, ndim, src_copy_spec->subv_dims,
+                                  src_copy_spec->subv_dims, calloc(ndim, sizeof(uint64_t)),
+                                  src_copy_spec->src_dims, src_copy_spec->src_subv_offsets);
+}
+
+void adios_copyspec_shrink_src_to_subv(adios_subvolume_copy_spec * dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec) {
+    const int ndim = src_copy_spec->ndim;
+
+    // Arg order:
+    // copyspec, ndim, subv_dims
+    // dst_dims, dst_subv_offsets
+    // src_dims, src_subv_offsets
+    adios_copyspec_init_from_bufs(dst_copy_spec, ndim, src_copy_spec->subv_dims,
+                                  src_copy_spec->dst_dims, src_copy_spec->dst_subv_offsets,
+                                  src_copy_spec->subv_dims, calloc(ndim, sizeof(uint64_t)));
+}
+
+//
+// Inspection/calculations with copyspecs
+//
+
+int adios_copyspec_is_subvolume_src_covering(const adios_subvolume_copy_spec *subv_spec) {
+    int dim;
+    for (dim = 0; dim < subv_spec->ndim; dim++) {
+        if (subv_spec->src_subv_offsets[dim] != 0 ||
+            subv_spec->src_dims[dim] != subv_spec->subv_dims[dim])
+            return 0;
+    }
+    return 1;
+}
+
+int adios_copyspec_is_subvolume_dst_covering(const adios_subvolume_copy_spec *subv_spec) {
+    int dim;
+    for (dim = 0; dim < subv_spec->ndim; dim++) {
+        if (subv_spec->dst_subv_offsets[dim] != 0 ||
+            subv_spec->dst_dims[dim] != subv_spec->subv_dims[dim])
+            return 0;
+    }
+    return 1;
+}
+
+int adios_copyspec_is_noop(const adios_subvolume_copy_spec *copy_spec) {
+    const int dimsize = copy_spec->ndim * sizeof(uint64_t);
+    int dim;
+
+    // If the source, destination and subvolume dimensions are not all equal,
+    // this is not a no-op
+    if (memcmp(copy_spec->src_dims, copy_spec->dst_dims, dimsize) != 0 ||
+        memcmp(copy_spec->src_dims, copy_spec->subv_dims, dimsize) != 0)
+        return 0;
+
+    // If the subvolume offsets within the source and destination volumes do
+    // not match, this is not a no-op
+    for (dim = 0; dim < copy_spec->ndim; dim++) {
+        if (copy_spec->dst_subv_offsets[dim] != 0 ||
+            copy_spec->src_subv_offsets[dim] != 0)
+            return 0;
+    }
+
+    // We pass all tests; this is a no-op
+    return 1;
+}
+
+// Extracts a selection corresponding to the subvolume within the source buffer
+ADIOS_SELECTION * adios_copyspec_to_src_selection(adios_subvolume_copy_spec *copy_spec) {
+    return common_read_selection_boundingbox(copy_spec->ndim,
+                                             bufdup(copy_spec->src_subv_offsets, sizeof(uint64_t), copy_spec->ndim),
+                                             bufdup(copy_spec->subv_dims, sizeof(uint64_t), copy_spec->ndim));
+}
+
+// Extracts a selection corresponding to the subvolume within the destination buffer
+ADIOS_SELECTION * adios_copyspec_to_dst_selection(adios_subvolume_copy_spec *copy_spec) {
+    return common_read_selection_boundingbox(copy_spec->ndim,
+                                             bufdup(copy_spec->dst_subv_offsets, sizeof(uint64_t), copy_spec->ndim),
+                                             bufdup(copy_spec->subv_dims, sizeof(uint64_t), copy_spec->ndim));
+}
diff --git a/src/core/adios_copyspec.h b/src/core/adios_copyspec.h
new file mode 100644
index 0000000..0bce1bc
--- /dev/null
+++ b/src/core/adios_copyspec.h
@@ -0,0 +1,249 @@
+/*
+ * adios_copyspec.h
+ *
+ * Defines the adios_subvolume_copy_spec, which describes a logical copy
+ * operation of a subvolume (i.e., multi-dimensional array) from a source
+ * volume to a destination volume, as well as various functions for
+ * constructing and deriving such copy specs. The source and destinations
+ * volumes exist in the same global coordinate space. The subvolume is defined
+ * with dimensions within the same coordinate space, and is linked to the
+ * source and destination volumes by an offset within each of these volumes.
+ *
+ * Subvolume copy specs are somewhat related to ADIOS selection bounding boxes.
+ * A subvolume copy spec could be fully defined by four bounding boxes: one
+ * each to define the source and destination volumes, and one each to define
+ * the location and size of the subvolume within each of these volumes. However,
+ * such a decomposition stores significant redundant, and thus potentially
+ * contradictory, information, including storing the subvolume dimensions twice
+ * and the dimensionality of global space four times. Thus, a more coherent and
+ * concise representation of a copy operation is desirable, and so is supplied
+ * in this file.
+ *
+ * --- Subvolume copy spec definition ---
+ *
+ * A subvolume copy spec is defined by the following properties:
+ *
+ * 1) The dimensionality of global space
+ * 2) The source volume dimensions and global offsets
+ * 3) The destination volume dimensions and global offsets
+ * 4) The subvolume dimensions, and an offsets within the each of the source
+ *    and destination volumes
+ *
+ * For example:
+ *
+ *                B=(20,30)
+ *     +---------------+
+ *     |               |
+ *     |     D=(15,25) |
+ *     |    +-----+    |                          F=(50,25)
+ *     |    |     |~~~~|~~~+   +-----------------------+
+ *     |    |     |    |   !   |                       |
+ *     |    +-----+    |   !   |                       |
+ *     | (10,20)=C     |   !   |                       |
+ *     |               |   !   |            H=(45,15)  |
+ *     |               |   !   |           +-----+     |
+ *     |               |   +~~~|~~~~~~~~~~>|     |
+ *     |               |       |           |     |     |
+ *     |               |       +-----------+-----+-----+
+ *     |               |  E=(30,10)    G=(40,10)
+ *     |               |
+ *     +---------------+
+ * A=(5,5)
+ *
+ * In this case, (A,B) is the source volume, (E,F) is the destination volume,
+ * and (C,D) and (G,H) are the subvolume, as located within the source and
+ * destination volumes, respectively. In this case:
+ *
+ * Dimensionality of global space             = 2
+ * Source dims                    = B-A       = (15,25)
+ * Source goffsets                = A         = (5,5)
+ * Destination dims               = F-E       = (20,15)
+ * Destination goffsets           = E         = (30,10)
+ * Subvolume dims                 = D-C = G-H = (5,5)
+ * Subvolume source offsets       = C-A       = (5,15)
+ * Subvolume destination offsets  = G-E       = (10,0)
+ *
+ *  Created on: Aug 2, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_COPYSPEC_H_
+#define ADIOS_COPYSPEC_H_
+
+/*
+ * A struct representing the copy of a subvolume of a source volume to an
+ * equal-sized subvolume of a destination volume. See the comment at the top
+ * of this file for more details.
+ */
+typedef struct {
+    int ndim;
+    const uint64_t *subv_dims;
+    const uint64_t *dst_dims;
+    const uint64_t *dst_subv_offsets;
+    const uint64_t *src_dims;
+    const uint64_t *src_subv_offsets;
+} adios_subvolume_copy_spec;
+
+//
+// Init and free
+//
+
+/*
+ * Initializes a copyspec with the given arrays. The arrays are used as-is and
+ * not copied, so the user must be careful they remain available until this
+ * copyspec is no longer needed. If the arrays should not be free'd when this
+ * copyspec is free'd, the user must pass 0 as the the free_buffers argument to
+ * adios_copyspec_free.
+ *
+ * Note: all offsets are in elements, not bytes. Furthermore, the element type
+ * is unspecified, and must be passed at copy time.
+ */
+void adios_copyspec_init(adios_subvolume_copy_spec *copy_spec,
+                         int ndim, const uint64_t *subv_dims,
+                         const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                         const uint64_t *src_dims, const uint64_t *src_subv_offsets);
+
+/*
+ * Initializes a copy spec to describe a copy from the given source volume
+ * (src_dims and src_goffsets) to the given destination volume (described by
+ * dst_dims and dst_goffsets), with the subvolume to copy being defined by the
+ * intersection of these two volumes. I.e.,
+ *
+ *   srcv = src_dims, src_goffsets
+ *   dstv = dst_dims, dst_goffsets
+ *   subv = src & dst   // & = intersection
+ *
+ * copy_spec must not have been previously initialized, or must have been
+ * subsequently free'd.
+ *
+ * If the source and destination volumes do indeed intersect (non-empty
+ * intersection), a non-zero integer is returned and copy_spec is populated.
+ * Otherwise (if the source and destination volumes are disjoint), 0 is
+ * returned, and the contents of copy_spec are undefined.
+ *
+ * @param copy_spec the copy spec to initialize as specified above
+ * @param dst_dims the dimensions of the destination volume
+ * @param dst_goffsets the global offset of the destination volume
+ * @param src_dims the dimensions of the source volume
+ * @param src_goffsets the global offset of the source volume
+ * @return a non-zero integer if the source and destination volumes have a
+ *         non-empty intersection, in which case copy_spec is initialized, and
+ *         0 otherwise, in which case the contents of copy_spec are undefined.
+ */
+int adios_copyspec_init_from_intersection(adios_subvolume_copy_spec *copy_spec, int ndim,
+                                          const uint64_t *dst_dims, const uint64_t *dst_goffsets,
+                                          const uint64_t *src_dims, const uint64_t *src_goffsets);
+
+/*
+ * Same as adios_copyspec_init_from_intersection, but the destination volume is
+ * instead described by a bounding box struct.
+ */
+int adios_copyspec_init_from_bb_intersection(adios_subvolume_copy_spec *copy_spec,
+                                             const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_selection,
+                                             const uint64_t *src_dims, const uint64_t *src_goffsets);
+
+/*
+ * Same as adios_copyspec_init_from_intersection, but both the source and
+ * destination volumes are instead described by bounding box structs.
+ */
+int adios_copyspec_init_from_2bb_intersection(adios_subvolume_copy_spec *copy_spec,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb);
+
+
+/*
+ * Frees the resources associated with the given copyspec, and clears its
+ * contents for safety. The user must specify whether the coordinate arrays
+ * stored within the copyspec are also free'd, as the user may or may not
+ * have used shared arrays for the init function.
+ *
+ * @param copy_spec the copyspec to free
+ * @param free_buffers if non-zero, all buffers within the copyspec will be
+ *        free'd; if zero, they will be left allocated and unchanged.
+ */
+void adios_copyspec_free(adios_subvolume_copy_spec **copy_spec, int free_buffers);
+
+//
+// Derivative copyspec functions
+//
+
+/*
+ * Copies the contents of one copyspec into another, such that both are
+ * an independent.
+ *
+ * @param dst_copy_spec the source copyspec
+ * @param src_copy_spec the destination copyspec
+ */
+void adios_copyspec_copy(adios_subvolume_copy_spec *dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec);
+
+/*
+ * Creates and returns a duplicate of the given copyspec. The memory for the
+ * return copyspec is obtained via malloc, and so must later be free'd by the
+ * user.
+ * @param copy_spec the copyspec to duplicate
+ * @return a new, indepedent copyspec with the same content as the given
+ *         copyspec.
+ */
+adios_subvolume_copy_spec * adios_copyspec_dup(const adios_subvolume_copy_spec *copy_spec);
+
+/*
+ * Derives a new copy spec that is the same as the source copy spec, but with
+ * the destination volume mapped to the exact size of the subvolume. That is,
+ *
+ *   dst_dims := subv_dims
+ *   dst_subv_offsets := {0,0, ..., 0}
+ *
+ * dst_copy_spec must not have been previously initialized, or must have been
+ * subsequently free'd.
+ *
+ * @param dst_copy_spec the copy spec to populate with the new specifications.
+ * @param src_copy_spec the copy spec to use as the basis for the derived copy
+ *                      spec.
+ */
+void adios_copyspec_shrink_dst_to_subv(adios_subvolume_copy_spec * dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec);
+
+/*
+ * Derives a new copy spec that is the same as the source copy spec, but with
+ * the source volume mapped to the exact size of the subvolume. That is,
+ *
+ *   src_dims := subv_dims
+ *   src_subv_offsets := {0,0, ..., 0}
+ *
+ * The derived copy spec to be populated must not have been previously
+ * initialized, or must have been subsequently free'd.
+ *
+ * @param dst_copy_spec the copy spec to populate with the new specifications.
+ * @param src_copy_spec the copy spec to use as the basis for the derived copy
+ *                      spec.
+ */
+void adios_copyspec_shrink_src_to_subv(adios_subvolume_copy_spec * dst_copy_spec, const adios_subvolume_copy_spec *src_copy_spec);
+
+//
+// Inspection/calculations with copyspecs
+//
+
+/*
+ * @return non-zero if the copyspec's subvolume entirely covers the source
+ *         volume, 0 otherwise.
+ */
+int adios_copyspec_is_subvolume_src_covering(const adios_subvolume_copy_spec *copyspec);
+
+/*
+ * @return non-zero if the copyspec's subvolume entirely covers the
+ *         destination volume, 0 otherwise.
+ */
+int adios_copyspec_is_subvolume_dst_covering(const adios_subvolume_copy_spec *copyspec);
+
+/*
+ * @return an ADIOS_SELECTION describing the subvolume within the source
+ *         volume.
+ */
+ADIOS_SELECTION * adios_copyspec_to_src_selection(adios_subvolume_copy_spec *copy_spec);
+
+/*
+ * @return an ADIOS_SELECTION describing the subvolume within the destination
+ *         volume.
+ */
+ADIOS_SELECTION * adios_copyspec_to_dst_selection(adios_subvolume_copy_spec *copy_spec);
+
+#endif /* ADIOS_COPYSPEC_H_ */
diff --git a/src/core/adios_endianness.c b/src/core/adios_endianness.c
index 78a1b5c..4346e6d 100644
--- a/src/core/adios_endianness.c
+++ b/src/core/adios_endianness.c
@@ -32,8 +32,8 @@ void swap_32_ptr(void *data)
     uint32_t d = *(uint32_t *)data;
     *(uint32_t *)data = ((d&0x000000FF)<<24) 
                       + ((d&0x0000FF00)<<8)
-	                  + ((d&0x00FF0000)>>8)
-	                  + ((d&0xFF000000)>>24);
+                      + ((d&0x00FF0000)>>8)
+                      + ((d&0xFF000000)>>24);
 }
 
 
@@ -41,13 +41,13 @@ void swap_64_ptr(void *data)
 {
     uint64_t d = *(uint64_t *)data;
     *(uint64_t *)data = ((d&0x00000000000000FF)<<56) 
-		                  + ((d&0x000000000000FF00)<<40)
-		                  + ((d&0x0000000000FF0000)<<24)
-		                  + ((d&0x00000000FF000000)<<8)
-		                  + ((d&0x000000FF00000000LL)>>8)
-		                  + ((d&0x0000FF0000000000LL)>>24)
-		                  + ((d&0x00FF000000000000LL)>>40)
-		                  + ((d&0xFF00000000000000LL)>>56);
+                          + ((d&0x000000000000FF00)<<40)
+                          + ((d&0x0000000000FF0000)<<24)
+                          + ((d&0x00000000FF000000)<<8)
+                          + ((d&0x000000FF00000000LL)>>8)
+                          + ((d&0x0000FF0000000000LL)>>24)
+                          + ((d&0x00FF000000000000LL)>>40)
+                          + ((d&0xFF00000000000000LL)>>56);
 }
 
 
@@ -55,22 +55,22 @@ void swap_128_ptr(void *data)
 {
     uint64_t d = *(uint64_t *)data;
     *(uint64_t *)data = ((d&0x00000000000000FF)<<56) 
-		                  + ((d&0x000000000000FF00)<<40)
-		                  + ((d&0x0000000000FF0000)<<24)
-		                  + ((d&0x00000000FF000000)<<8)
-		                  + ((d&0x000000FF00000000LL)>>8)
-		                  + ((d&0x0000FF0000000000LL)>>24)
-		                  + ((d&0x00FF000000000000LL)>>40)
-		                  + ((d&0xFF00000000000000LL)>>56);
+                          + ((d&0x000000000000FF00)<<40)
+                          + ((d&0x0000000000FF0000)<<24)
+                          + ((d&0x00000000FF000000)<<8)
+                          + ((d&0x000000FF00000000LL)>>8)
+                          + ((d&0x0000FF0000000000LL)>>24)
+                          + ((d&0x00FF000000000000LL)>>40)
+                          + ((d&0xFF00000000000000LL)>>56);
     d = *((uint64_t *)data + 1);
     d = ((d&0x00000000000000FF)<<56) 
-		                  + ((d&0x000000000000FF00)<<40)
-		                  + ((d&0x0000000000FF0000)<<24)
-		                  + ((d&0x00000000FF000000)<<8)
-		                  + ((d&0x000000FF00000000LL)>>8)
-		                  + ((d&0x0000FF0000000000LL)>>24)
-		                  + ((d&0x00FF000000000000LL)>>40)
-		                  + ((d&0xFF00000000000000LL)>>56);
+                          + ((d&0x000000000000FF00)<<40)
+                          + ((d&0x0000000000FF0000)<<24)
+                          + ((d&0x00000000FF000000)<<8)
+                          + ((d&0x000000FF00000000LL)>>8)
+                          + ((d&0x0000FF0000000000LL)>>24)
+                          + ((d&0x00FF000000000000LL)>>40)
+                          + ((d&0xFF00000000000000LL)>>56);
     *((uint64_t *)data + 1) = *(uint64_t *)data;
     *(uint64_t *)data = d; 
 }
@@ -80,32 +80,32 @@ void swap_adios_type(void *data, enum ADIOS_DATATYPES type)
 {
     if(type == adios_string) {
         return;
-	}
-	else {
-		uint64_t size = adios_get_type_size (type, "");
-
-		switch (size)
-		{
-			case 1:
-				break;
-			case 2:
-				swap_16_ptr(data);
-				break;
-			case 4:
-				swap_32_ptr(data);
-				break;
-			case 8:
-				swap_64_ptr(data);
-				break;
-			case 16:
-				swap_128_ptr(data);
-				break;
-			case adios_complex:
-			case adios_double_complex:
-				// TODO
-				break;
-		}
-	}
+    }
+    else {
+        uint64_t size = adios_get_type_size (type, "");
+
+        switch (size)
+        {
+            case 1:
+                break;
+            case 2:
+                swap_16_ptr(data);
+                break;
+            case 4:
+                swap_32_ptr(data);
+                break;
+            case 8:
+                swap_64_ptr(data);
+                break;
+            case 16:
+                swap_128_ptr(data);
+                break;
+            case adios_complex:
+            case adios_double_complex:
+                // TODO
+                break;
+        }
+    }
 }
 
 
@@ -115,26 +115,26 @@ void swap_adios_type_array(void *data, enum ADIOS_DATATYPES type, uint64_t paylo
     uint64_t num_elements = payload_size / size;
 
     uint64_t i = 0;
-	for(i = 0; i < num_elements; i ++) {
+    for(i = 0; i < num_elements; i ++) {
         swap_adios_type((char *)data + i*size, type);
-	}    
+    }    
 }
 
 void swap_ptr(void * data, int size)
 {
-	switch (size)
-	{
-		case 16:
-			swap_16_ptr(data);
-			break;
-		case 32:
-			swap_32_ptr(data);
-			break;
-		case 64:
-			swap_64_ptr(data);
-			break;
-		case 128:
-			swap_128_ptr(data);
-			break;
-	}
+    switch (size)
+    {
+        case 16:
+            swap_16_ptr(data);
+            break;
+        case 32:
+            swap_32_ptr(data);
+            break;
+        case 64:
+            swap_64_ptr(data);
+            break;
+        case 128:
+            swap_128_ptr(data);
+            break;
+    }
 }
diff --git a/src/core/adios_internals.c b/src/core/adios_internals.c
index b30aa17..bf57db2 100644
--- a/src/core/adios_internals.c
+++ b/src/core/adios_internals.c
@@ -17,18 +17,26 @@
 #include <arpa/inet.h>
 #include <stdint.h>
 #include <sys/stat.h>
+#include <assert.h>
 
 #include "public/adios.h"
 #include "core/adios_internals.h"
 #include "core/adios_bp_v1.h"
+#include "core/qhashtbl.h"
 #include "core/adios_logger.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
 #endif
 
-extern struct adios_method_list_struct * adios_methods;
-extern struct adios_group_list_struct * adios_groups;
+// NCSU ALACRITY-ADIOS - Added header file
+#include "adios_transforms_common.h"
+#include "adios_transforms_hooks.h"
+#include "adios_transforms_read.h"
+#include "adios_transforms_write.h"
+
+struct adios_method_list_struct * adios_methods = 0;
+struct adios_group_list_struct * adios_groups = 0;
 
 int adios_int_is_var (const char * temp) // 1 == yes, 0 == no
 {
@@ -66,10 +74,30 @@ int adios_int_is_num (char * temp) // 1 == yes, 0 == no
     return 0;
 }
 
+/** Find a variable in the hash table and return the pointer to the var struct.
+ *  A full path is required (to match var->path+"/"+var->name)
+ */
+struct adios_var_struct * adios_find_var_by_name (struct adios_group_struct * g,
+                                                  const char * fullpath)
+{
+    struct adios_var_struct * var = NULL;
+
+    if (!fullpath) {
+        return NULL;
+    }
+
+    // Find variable in the hash table
+    var = (struct adios_var_struct *)
+            g->hashtbl_vars->get (g->hashtbl_vars, fullpath);
+
+    return var;
+}
+
+/*
 struct adios_var_struct * adios_find_var_by_name (struct adios_var_struct * root
-                                                 ,const char * name
-                                                 ,enum ADIOS_FLAG unique_names
-                                                 )
+        ,const char * name
+        ,enum ADIOS_FLAG unique_names
+        )
 {
     int done = 0;
     struct adios_var_struct * var = 0;
@@ -87,9 +115,9 @@ struct adios_var_struct * adios_find_var_by_name (struct adios_var_struct * root
         if (unique_names == adios_flag_no)
         {
             compare_name_path = malloc (  strlen (root->name)
-                                        + strlen (root->path)
-                                        + 2 // null term and '/'
-                                       );
+                    + strlen (root->path)
+                    + 2 // null term and '/'
+                    );
             if (!strcmp (root->path, "/"))
                 sprintf (compare_name_path, "/%s", root->name);
             else
@@ -97,9 +125,9 @@ struct adios_var_struct * adios_find_var_by_name (struct adios_var_struct * root
         }
 
         if (   !strcasecmp (name, compare_name)
-            || (   unique_names == adios_flag_no
-                && !strcasecmp (name, compare_name_path)
-               )
+                || (   unique_names == adios_flag_no
+                    && !strcasecmp (name, compare_name_path)
+                   )
            )
         {
             done = 1;
@@ -118,12 +146,13 @@ struct adios_var_struct * adios_find_var_by_name (struct adios_var_struct * root
 
     return var;
 }
+*/
 
 struct adios_attribute_struct * adios_find_attribute_by_name
-                                        (struct adios_attribute_struct * root
-                                        ,const char * name
-                                        ,enum ADIOS_FLAG unique_names
-                                        )
+(struct adios_attribute_struct * root
+ ,const char * name
+ ,enum ADIOS_FLAG unique_names
+ )
 {
     int done = 0;
     struct adios_attribute_struct * attr = 0;
@@ -141,19 +170,21 @@ struct adios_attribute_struct * adios_find_attribute_by_name
         if (unique_names == adios_flag_no)
         {
             compare_name_path = malloc (  strlen (root->name)
-                                        + strlen (root->path)
-                                        + 2 // null term and '/'
-                                       );
-            if (!strcmp (root->path, "/"))
+                    + strlen (root->path)
+                    + 2 // null term and '/'
+                    );
+            if (!root->path || !root->path[0])
+                sprintf (compare_name_path, "%s", root->name);
+            else if (!strcmp (root->path, "/"))
                 sprintf (compare_name_path, "/%s", root->name);
             else
                 sprintf (compare_name_path, "%s/%s", root->path, root->name);
         }
 
         if (   !strcasecmp (name, compare_name)
-            || (   unique_names == adios_flag_no
-                && !strcasecmp (name, compare_name_path)
-               )
+                || (   unique_names == adios_flag_no
+                    && !strcasecmp (name, compare_name_path)
+                   )
            )
         {
             done = 1;
@@ -174,8 +205,8 @@ struct adios_attribute_struct * adios_find_attribute_by_name
 }
 
 struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
-                                               ,uint16_t id
-                                               )
+        ,uint16_t id
+        )
 {
     while (root)
     {
@@ -189,9 +220,9 @@ struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
 }
 
 struct adios_attribute_struct * adios_find_attribute_by_id
-                                         (struct adios_attribute_struct * root
-                                         ,uint16_t id
-                                         )
+(struct adios_attribute_struct * root
+ ,uint16_t id
+ )
 {
     while (root)
     {
@@ -205,11 +236,11 @@ struct adios_attribute_struct * adios_find_attribute_by_id
 }
 
 int adios_parse_dimension (const char * dimension
-                          ,const char * global_dimension
-                          ,const char * local_offset
-                          ,struct adios_group_struct * g
-                          ,struct adios_dimension_struct * dim
-                          )
+        ,const char * global_dimension
+        ,const char * local_offset
+        ,struct adios_group_struct * g
+        ,struct adios_dimension_struct * dim
+        )
 {
     if (!dimension)
     {
@@ -218,39 +249,39 @@ int adios_parse_dimension (const char * dimension
         return 0;
     }
 
+    /* Get the local dimension */
+    // one of the three fields below will be set, the other two remain 0
     dim->dimension.rank = 0;
-    dim->dimension.id = 0;
+    dim->dimension.var = NULL;
+    dim->dimension.attr = NULL;
+
     dim->dimension.time_index = adios_flag_no;
-    if (adios_int_is_var (dimension))
+    if ( g->time_index_name &&
+         !strcasecmp (g->time_index_name, dimension)
+       )
+    {
+        /* this is time dimension */
+        dim->dimension.time_index = adios_flag_yes;
+    }
+    else if (adios_int_is_var (dimension))
     {
         struct adios_var_struct * var = 0;
         dim->dimension.rank = 0;
-        var = adios_find_var_by_name (g->vars, dimension
-                                     ,g->all_unique_var_names
-                                     );
+        var = adios_find_var_by_name (g, dimension);
         if (!var)
         {
             struct adios_attribute_struct * attr = 0;
             attr = adios_find_attribute_by_name (g->attributes, dimension
-                                                ,g->all_unique_var_names
-                                                );
+                    ,g->all_unique_var_names
+                    );
 
             if (!attr)
             {
-                if (   g->time_index_name
-                    && !strcasecmp (g->time_index_name, dimension)
-                   )
-                {
-                    dim->dimension.time_index = adios_flag_yes;
-                }
-                else
-                {
-                    adios_error (err_invalid_dimension, 
-                                 "config.xml: invalid var dimension: %s\n", 
-                                 dimension);
+                adios_error (err_invalid_dimension,
+                        "config.xml: invalid var dimension: %s\n",
+                        dimension);
 
-                    return 0;
-                }
+                return 0;
             }
             else
             {
@@ -264,13 +295,13 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: dimension defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->var->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: dimension defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->var->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
@@ -288,20 +319,20 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: dimension defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: dimension defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
                             break;
                     }
                 }
-                dim->dimension.id = attr->id;
+                dim->dimension.attr = attr;
             }
         }
         else
@@ -314,7 +345,7 @@ int adios_parse_dimension (const char * dimension
                 case adios_long_double:
                 case adios_complex:
                 case adios_double_complex:
-                    adios_error (err_invalid_var_as_dimension, 
+                    adios_error (err_invalid_var_as_dimension,
                             "config.xml: dimension defining var %s "
                             "has an invalid type: %s\n",
                             var->name,
@@ -325,49 +356,51 @@ int adios_parse_dimension (const char * dimension
                     break;
             }
 
-            dim->dimension.id = var->id;
+            dim->dimension.var = var;
             var->is_dim = adios_flag_yes;
         }
     }
     else
     {
-        dim->dimension.id = 0;
         dim->dimension.rank = atoi (dimension);
     }
 
     if (!global_dimension)
     {
-        adios_error (err_global_dim_required, 
+        adios_error (err_global_dim_required,
                 "adios_parse_dimension: global_dimension not provided\n");
 
         return 0;
     }
 
+    /* Get the global dimension */
+    dim->global_dimension.rank = 0;
+    dim->global_dimension.var  = NULL;
+    dim->global_dimension.attr = NULL;
     if (adios_int_is_var (global_dimension))
     {
         struct adios_var_struct * var = 0;
-        dim->global_dimension.rank = 0;
-        var = adios_find_var_by_name (g->vars, global_dimension
-                                     ,g->all_unique_var_names
-                                     );
+        var = adios_find_var_by_name (g, global_dimension);
         if (!var)
         {
             struct adios_attribute_struct * attr = 0;
             attr = adios_find_attribute_by_name (g->attributes, global_dimension
-                                                ,g->all_unique_var_names
-                                                );
+                    ,g->all_unique_var_names
+                    );
 
             if (!attr)
             {
+                /* FIXME: Is time dimension allowed for global dim definition?
+                 * What is this code doing here? */
                 if (   g->time_index_name
-                    && !strcasecmp (g->time_index_name, global_dimension)
+                        && !strcasecmp (g->time_index_name, global_dimension)
                    )
                 {
                     dim->global_dimension.time_index = adios_flag_yes;
                 }
                 else
                 {
-                    adios_error (err_invalid_global_dimension, 
+                    adios_error (err_invalid_global_dimension,
                             "config.xml: invalid global-bounds dimension: %s\n",
                             global_dimension);
 
@@ -386,13 +419,13 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: global dimension defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->var->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: global dimension defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->var->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
@@ -410,20 +443,20 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: global dimension defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->var->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: global dimension defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->var->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
                             break;
                     }
                 }
-                dim->global_dimension.id = attr->id;
+                dim->global_dimension.attr = attr;
             }
         }
         else
@@ -436,7 +469,7 @@ int adios_parse_dimension (const char * dimension
                 case adios_long_double:
                 case adios_complex:
                 case adios_double_complex:
-                    adios_error (err_invalid_var_as_dimension, 
+                    adios_error (err_invalid_var_as_dimension,
                             "config.xml: global dimension defining var %s "
                             "has an invalid type: %s\n",
                             var->name,
@@ -447,12 +480,11 @@ int adios_parse_dimension (const char * dimension
                     break;
             }
             var->is_dim = adios_flag_yes;
-            dim->global_dimension.id = var->id;
+            dim->global_dimension.var = var;
         }
     }
     else
     {
-        dim->global_dimension.id = 0;
         dim->global_dimension.rank = strtol (global_dimension, NULL, 10);
     }
 
@@ -463,33 +495,37 @@ int adios_parse_dimension (const char * dimension
         return 0;
     }
 
+    /* Get the local offset */
+    dim->local_offset.rank = 0;
+    dim->local_offset.var  = NULL;
+    dim->local_offset.attr = NULL;
     if (adios_int_is_var (local_offset))
     {
         struct adios_var_struct * var = 0;
-        dim->local_offset.rank = 0;
-        var = adios_find_var_by_name (g->vars, local_offset
-                                     ,g->all_unique_var_names
-                                     );
+        var = adios_find_var_by_name (g, local_offset);
         if (!var)
         {
             struct adios_attribute_struct * attr = 0;
             attr = adios_find_attribute_by_name (g->attributes, local_offset
-                                                ,g->all_unique_var_names
-                                                );
+                    ,g->all_unique_var_names
+                    );
 
             if (!attr)
             {
+                /* FIXME: Is time dimension allowed for offset definition?
+                 * What is this code doing here? */
+
                 if (   g->time_index_name
-                    && !strcasecmp (g->time_index_name, local_offset)
+                        && !strcasecmp (g->time_index_name, local_offset)
                    )
                 {
                     dim->local_offset.time_index = adios_flag_yes;
                 }
                 else
                 {
-                    adios_error (err_invalid_offset, 
-                                 "config.xml: invalid var local_offset: %s\n",
-                                 local_offset);
+                    adios_error (err_invalid_offset,
+                            "config.xml: invalid var local_offset: %s\n",
+                            local_offset);
 
                     return 0;
                 }
@@ -506,13 +542,13 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: offset defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->var->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: offset defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->var->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
@@ -530,20 +566,20 @@ int adios_parse_dimension (const char * dimension
                         case adios_long_double:
                         case adios_complex:
                         case adios_double_complex:
-                            adios_error (err_invalid_var_as_dimension, 
-                                         "config.xml: offset defining var %s "
-                                         "pointed by attribute %s "
-                                         "has an invalid type: %s\n",
-                                         attr->var->name,
-                                         attr->name,
-                                         adios_type_to_string_int (attr->var->type));
+                            adios_error (err_invalid_var_as_dimension,
+                                    "config.xml: offset defining var %s "
+                                    "pointed by attribute %s "
+                                    "has an invalid type: %s\n",
+                                    attr->var->name,
+                                    attr->name,
+                                    adios_type_to_string_int (attr->var->type));
                             return 0;
 
                         default: // the integral numeric types are all fine
                             break;
                     }
                 }
-                dim->local_offset.id = attr->id;
+                dim->local_offset.attr = attr;
             }
         }
         else
@@ -556,7 +592,7 @@ int adios_parse_dimension (const char * dimension
                 case adios_long_double:
                 case adios_complex:
                 case adios_double_complex:
-                    adios_error (err_invalid_var_as_dimension, 
+                    adios_error (err_invalid_var_as_dimension,
                             "config.xml: offset defining var %s "
                             "has an invalid type: %s\n",
                             var->name,
@@ -567,12 +603,11 @@ int adios_parse_dimension (const char * dimension
                     break;
             }
             var->is_dim = adios_flag_yes;
-            dim->local_offset.id = var->id;
+            dim->local_offset.var = var;
         }
     }
     else
     {
-        dim->local_offset.id = 0;
         dim->local_offset.rank = strtol (local_offset, NULL, 10);
     }
 
@@ -599,271 +634,271 @@ int adios_parse_scalar_string (enum ADIOS_DATATYPES type, char * value, void **
         case adios_byte:
         case adios_short:
         case adios_integer:
-        {
-            int errno_save = errno;
-            long t = strtol (value, &end, 10);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
-            {
-                adios_error (err_invalid_argument, 
-                             "value: '%s' not valid integer\n",value);
-                return 0;
-            }
-            else
             {
-                switch (type)
+                int errno_save = errno;
+                long t = strtol (value, &end, 10);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
                 {
-                    case adios_byte:
-                        if (t < SCHAR_MIN || t > SCHAR_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                         "type is %s, value "
-                                         "is out of range: '%s'\n",
-                                         adios_type_to_string_int (type), 
-                                         value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (1);
-                            *((int8_t *) *out) = t;
+                    adios_error (err_invalid_argument,
+                            "value: '%s' not valid integer\n",value);
+                    return 0;
+                }
+                else
+                {
+                    switch (type)
+                    {
+                        case adios_byte:
+                            if (t < SCHAR_MIN || t > SCHAR_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (1);
+                                *((int8_t *) *out) = t;
 
-                            return 1;
-                        }
-                    case adios_short:
-                        if (t < SHRT_MIN || t > SHRT_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                         "type is %s, value "
-                                         "is out of range: '%s'\n",
-                                         adios_type_to_string_int (type), 
-                                         value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (2);
-                            *((int16_t *) *out) = t;
+                                return 1;
+                            }
+                        case adios_short:
+                            if (t < SHRT_MIN || t > SHRT_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (2);
+                                *((int16_t *) *out) = t;
 
-                            return 1;
-                        }
-                    case adios_integer:
-                        if (t < INT_MIN || t > INT_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                         "type is %s, value "
-                                         "is out of range: '%s'\n",
-                                         adios_type_to_string_int (type), 
-                                         value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (4);
-                            *((int32_t *) *out) = t;
+                                return 1;
+                            }
+                        case adios_integer:
+                            if (t < INT_MIN || t > INT_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (4);
+                                *((int32_t *) *out) = t;
 
-                            return 1;
-                        }
+                                return 1;
+                            }
+                    }
                 }
             }
-        }
         case adios_long:
-        {
-            int errno_save = errno;
-            int64_t t = strtoll (value, &end, 10);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
-            {
-                adios_error (err_out_of_bound, 
-                        "type is %s, value "
-                        "is out of range: '%s'\n",
-                        adios_type_to_string_int (type), 
-                        value);
-                return 0;
-            }
-            else
             {
-                *out = malloc (8);
-                *((int64_t *) *out) = t;
+                int errno_save = errno;
+                int64_t t = strtoll (value, &end, 10);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
+                {
+                    adios_error (err_out_of_bound,
+                            "type is %s, value "
+                            "is out of range: '%s'\n",
+                            adios_type_to_string_int (type),
+                            value);
+                    return 0;
+                }
+                else
+                {
+                    *out = malloc (8);
+                    *((int64_t *) *out) = t;
 
-                return 1;
+                    return 1;
+                }
             }
-        }
         case adios_unsigned_byte:
         case adios_unsigned_short:
         case adios_unsigned_integer:
-        {
-            int errno_save = errno;
-            unsigned long t = strtoul (value, &end, 10);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
-            {
-                adios_error (err_invalid_argument, 
-                             "value: '%s' not valid integer\n", value);
-                return 0;
-            }
-            else
             {
-                switch (type)
+                int errno_save = errno;
+                unsigned long t = strtoul (value, &end, 10);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
                 {
-                    case adios_unsigned_byte:
-                        if (t > UCHAR_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                    "type is %s, value "
-                                    "is out of range: '%s'\n",
-                                    adios_type_to_string_int (type), 
-                                    value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (1);
-                            *((uint8_t *) *out) = t;
+                    adios_error (err_invalid_argument,
+                            "value: '%s' not valid integer\n", value);
+                    return 0;
+                }
+                else
+                {
+                    switch (type)
+                    {
+                        case adios_unsigned_byte:
+                            if (t > UCHAR_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (1);
+                                *((uint8_t *) *out) = t;
 
-                            return 1;
-                        }
-                    case adios_unsigned_short:
-                        if (t > USHRT_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                    "type is %s, value "
-                                    "is out of range: '%s'\n",
-                                    adios_type_to_string_int (type), 
-                                    value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (2);
-                            *((uint16_t *) *out) = t;
+                                return 1;
+                            }
+                        case adios_unsigned_short:
+                            if (t > USHRT_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (2);
+                                *((uint16_t *) *out) = t;
 
-                            return 1;
-                        }
-                    case adios_unsigned_integer:
-                        if (t > UINT_MAX)
-                        {
-                            adios_error (err_out_of_bound, 
-                                    "type is %s, value "
-                                    "is out of range: '%s'\n",
-                                    adios_type_to_string_int (type), 
-                                    value);
-                            return 0;
-                        }
-                        else
-                        {
-                            *out = malloc (4);
-                            *((uint32_t *) *out) = t;
+                                return 1;
+                            }
+                        case adios_unsigned_integer:
+                            if (t > UINT_MAX)
+                            {
+                                adios_error (err_out_of_bound,
+                                        "type is %s, value "
+                                        "is out of range: '%s'\n",
+                                        adios_type_to_string_int (type),
+                                        value);
+                                return 0;
+                            }
+                            else
+                            {
+                                *out = malloc (4);
+                                *((uint32_t *) *out) = t;
 
-                            return 1;
-                        }
+                                return 1;
+                            }
+                    }
                 }
             }
-        }
         case adios_unsigned_long:
-        {
-            int errno_save = errno;
-            uint64_t t = strtoull (value, &end, 10);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
-            {
-                adios_error (err_out_of_bound, 
-                        "type is %s, value "
-                        "is out of range: '%s'\n",
-                        adios_type_to_string_int (type), 
-                        value);
-                return 0;
-            }
-            else
             {
-                *out = malloc (8);
-                *((uint64_t *) *out) = t;
+                int errno_save = errno;
+                uint64_t t = strtoull (value, &end, 10);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
+                {
+                    adios_error (err_out_of_bound,
+                            "type is %s, value "
+                            "is out of range: '%s'\n",
+                            adios_type_to_string_int (type),
+                            value);
+                    return 0;
+                }
+                else
+                {
+                    *out = malloc (8);
+                    *((uint64_t *) *out) = t;
 
-                return 1;
+                    return 1;
+                }
             }
-        }
         case adios_real:
-        {
-            int errno_save = errno;
-            float t = strtof (value, &end);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
             {
-                adios_error (err_out_of_bound, 
-                        "type is %s, value "
-                        "is out of range: '%s'\n",
-                        adios_type_to_string_int (type), 
-                        value);
-                return 0;
+                int errno_save = errno;
+                float t = strtof (value, &end);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
+                {
+                    adios_error (err_out_of_bound,
+                            "type is %s, value "
+                            "is out of range: '%s'\n",
+                            adios_type_to_string_int (type),
+                            value);
+                    return 0;
+                }
+                else
+                {
+                    *out = malloc (4);
+                    *((float *) *out) = t;
+
+                    return 1;
+                }
             }
-            else
+        case adios_double:
             {
-                *out = malloc (4);
-                *((float *) *out) = t;
+                int errno_save = errno;
+                double t = strtod (value, &end);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
+                {
+                    adios_error (err_out_of_bound,
+                            "type is %s, value "
+                            "is out of range: '%s'\n",
+                            adios_type_to_string_int (type),
+                            value);
+                    return 0;
+                }
+                else
+                {
+                    *out = malloc (8);
+                    *((double *) *out) = t;
 
-                return 1;
+                    return 1;
+                }
             }
-        }
-        case adios_double:
-        {
-            int errno_save = errno;
-            double t = strtod (value, &end);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
+        case adios_long_double:
             {
-                adios_error (err_out_of_bound, 
-                        "type is %s, value "
-                        "is out of range: '%s'\n",
-                        adios_type_to_string_int (type), 
-                        value);
-                return 0;
+                int errno_save = errno;
+                long double t = strtold (value, &end);
+                if (errno != errno_save || (end != 0 && *end != '\0'))
+                {
+                    adios_error (err_out_of_bound,
+                            "type is %s, value "
+                            "is out of range: '%s'\n",
+                            adios_type_to_string_int (type),
+                            value);
+                    return 0;
+                }
+                else
+                {
+                    *out = malloc (16);
+                    *((long double *) *out) = t;
+                }
             }
-            else
+        case adios_string:
             {
-                *out = malloc (8);
-                *((double *) *out) = t;
+                *out = (void *) strdup (value);
 
                 return 1;
             }
-        }
-        case adios_long_double:
-        {
-            int errno_save = errno;
-            long double t = strtold (value, &end);
-            if (errno != errno_save || (end != 0 && *end != '\0'))
+        case adios_complex:
             {
-                adios_error (err_out_of_bound, 
-                        "type is %s, value "
-                        "is out of range: '%s'\n",
-                        adios_type_to_string_int (type), 
-                        value);
-                return 0;
+                adios_error (err_unspecified,
+                        "adios_parse_scalar_string: adios_complex type "
+                        "validation needs to be implemented\n");
+                return 1;
             }
-            else
+        case adios_double_complex:
             {
-                *out = malloc (16);
-                *((long double *) *out) = t;
+                adios_error (err_unspecified,
+                        "adios_parse_scalar_string: adios_double_complex type "
+                        "validation needs to be implemented\n");
+                return 1;
             }
-        }
-        case adios_string:
-        {
-            *out = (void *) strdup (value);
-
-            return 1;
-        }
-        case adios_complex:
-        {
-            adios_error (err_unspecified, 
-                         "adios_parse_scalar_string: adios_complex type "
-                         "validation needs to be implemented\n");
-            return 1;
-        }
-        case adios_double_complex:
-        {
-            adios_error (err_unspecified, 
-                         "adios_parse_scalar_string: adios_double_complex type "
-                         "validation needs to be implemented\n");
-            return 1;
-        }
 
         case adios_unknown:
         default:
-            adios_error (err_unspecified, 
-                         "adios_parse_scalar_string: unknown type cannot be validated\n");
+            adios_error (err_unspecified,
+                    "adios_parse_scalar_string: unknown type cannot be validated\n");
 
             return 0;
     }
@@ -872,26 +907,29 @@ int adios_parse_scalar_string (enum ADIOS_DATATYPES type, char * value, void **
 }
 
 int adios_common_define_attribute (int64_t group, const char * name
-                                  ,const char * path
-                                  ,enum ADIOS_DATATYPES type
-                                  ,const char * value
-                                  ,const char * var
-                                  )
+        ,const char * path
+        ,enum ADIOS_DATATYPES type
+        ,const char * value
+        ,const char * var
+        )
 {
     struct adios_group_struct * g = (struct adios_group_struct *) group;
     struct adios_attribute_struct * attr = (struct adios_attribute_struct *)
-                              malloc (sizeof (struct adios_attribute_struct));
+        malloc (sizeof (struct adios_attribute_struct));
 
     attr->name = strdup (name);
-    attr->path = strdup (path);
+    if (path) 
+        attr->path = strdup (path);
+    else
+        attr->path = strdup (""); // not null but empty path
     if (value)
     {
         if (type == adios_unknown)
         {
-            adios_error (err_invalid_type_attr, 
-                         "config.xml: attribute element %s has invalid "
-                         "type attribute\n",
-                         name);
+            adios_error (err_invalid_type_attr,
+                    "config.xml: attribute element %s has invalid "
+                    "type attribute\n",
+                    name);
 
             free (attr->name);
             free (attr->path);
@@ -906,10 +944,10 @@ int adios_common_define_attribute (int64_t group, const char * name
         }
         else
         {
-            adios_error (err_invalid_value_attr, 
-                         "config.xml: attribute element %s has invalid "
-                         "value attribute: '%s'\n", 
-                         name, value);
+            adios_error (err_invalid_value_attr,
+                    "config.xml: attribute element %s has invalid "
+                    "value attribute: '%s'\n",
+                    name, value);
 
             free (attr->value);
             free (attr->name);
@@ -923,16 +961,14 @@ int adios_common_define_attribute (int64_t group, const char * name
     {
         attr->value = 0;
         attr->type = adios_unknown;
-        attr->var = adios_find_var_by_name (g->vars, var
-                                           ,g->all_unique_var_names
-                                           );
+        attr->var = adios_find_var_by_name (g, var);
 
         if (attr->var == 0)
         {
-            adios_error (err_invalid_varname, 
-                         "config.xml: attribute element %s references "
-                         "var %s that has not been defined.\n",
-                         name, var);
+            adios_error (err_invalid_varname,
+                    "config.xml: attribute element %s references "
+                    "var %s that has not been defined.\n",
+                    name, var);
 
             free (attr->name);
             free (attr->path);
@@ -952,14 +988,14 @@ int adios_common_define_attribute (int64_t group, const char * name
 
 /* define an attribute by passing the value directly, not by a string */
 int adios_common_define_attribute_byvalue (int64_t group, const char * name
-                                  ,const char * path
-                                  ,enum ADIOS_DATATYPES type
-                                  ,void * value
-                                  )
+        ,const char * path
+        ,enum ADIOS_DATATYPES type
+        ,void * value
+        )
 {
     struct adios_group_struct * g = (struct adios_group_struct *) group;
     struct adios_attribute_struct * attr = (struct adios_attribute_struct *)
-                              malloc (sizeof (struct adios_attribute_struct));
+        malloc (sizeof (struct adios_attribute_struct));
     uint64_t size;
 
     attr->name = strdup (name);
@@ -968,10 +1004,10 @@ int adios_common_define_attribute_byvalue (int64_t group, const char * name
     {
         if (type == adios_unknown)
         {
-            adios_error (err_invalid_type_attr, 
-                         "config.xml: attribute element %s has invalid "
-                         "type attribute\n",
-                         name);
+            adios_error (err_invalid_type_attr,
+                    "config.xml: attribute element %s has invalid "
+                    "type attribute\n",
+                    name);
 
             free (attr->name);
             free (attr->path);
@@ -989,9 +1025,9 @@ int adios_common_define_attribute_byvalue (int64_t group, const char * name
         }
         else
         {
-            adios_error (err_invalid_value_attr, 
-                         "Attribute element %s has invalid "
-                         "value attribute\n", name);
+            adios_error (err_invalid_value_attr,
+                    "Attribute element %s has invalid "
+                    "value attribute\n", name);
 
             free (attr->value);
             free (attr->name);
@@ -1003,9 +1039,9 @@ int adios_common_define_attribute_byvalue (int64_t group, const char * name
     }
     else
     {
-        adios_error (err_invalid_value_attr, 
-                     "Attribute element %s has invalid "
-                     "value attribute\n", name);
+        adios_error (err_invalid_value_attr,
+                "Attribute element %s has invalid "
+                "value attribute\n", name);
 
         free (attr->name);
         free (attr->path);
@@ -1022,31 +1058,31 @@ int adios_common_define_attribute_byvalue (int64_t group, const char * name
 }
 
 /*void adios_extract_string (char ** out, const char * in, int size)
-{
-    if (in && out)
-    {
-        *out = malloc (strlen (in) + 1);
-        strcpy (*out, in);
-    }
+  {
+  if (in && out)
+  {
+ *out = malloc (strlen (in) + 1);
+ strcpy (*out, in);
+ }
 // for some Fortran implementations, we get a size for a string.
 // for others (like PGI), we don't and it isn't null terminated
 // unless we do it explicitly.  Assume that it is null terminated
 // for now.
 //
 #if 0
-    int i = 0;
-    memcpy (out, in, size);
-    while (i < size)
-    {
-        if (out [i] == ' ')
-        {
-            out [i] = 0;
-            return;
-        }
-        else
-            i++;
-    }
-    out [i] = 0;
+int i = 0;
+memcpy (out, in, size);
+while (i < size)
+{
+if (out [i] == ' ')
+{
+out [i] = 0;
+return;
+}
+else
+i++;
+}
+out [i] = 0;
 #endif
 }*/
 
@@ -1059,8 +1095,8 @@ void adios_append_method (struct adios_method_struct * method)
         if (!*root)
         {
             struct adios_method_list_struct * new_node =
-                 (struct adios_method_list_struct *)
-                   malloc (sizeof (struct adios_method_list_struct));
+                (struct adios_method_list_struct *)
+                malloc (sizeof (struct adios_method_list_struct));
 
             if (!new_node)
             {
@@ -1080,16 +1116,16 @@ void adios_append_method (struct adios_method_struct * method)
 }
 
 void adios_add_method_to_group (struct adios_method_list_struct ** root
-                               ,struct adios_method_struct * method
-                               )
+        ,struct adios_method_struct * method
+        )
 {
     while (root)
     {
         if (!*root)
         {
             struct adios_method_list_struct * new_node =
-                 (struct adios_method_list_struct *)
-                   malloc (sizeof (struct adios_method_list_struct));
+                (struct adios_method_list_struct *)
+                malloc (sizeof (struct adios_method_list_struct));
 
             if (!new_node)
             {
@@ -1118,8 +1154,8 @@ void adios_append_group (struct adios_group_struct * group)
         if (!*root)
         {
             struct adios_group_list_struct * new_node =
-                 (struct adios_group_list_struct *)
-                   malloc (sizeof (struct adios_group_list_struct));
+                (struct adios_group_list_struct *)
+                malloc (sizeof (struct adios_group_list_struct));
 
             if (!new_node)
             {
@@ -1140,19 +1176,46 @@ void adios_append_group (struct adios_group_struct * group)
     }
 }
 
+static void adios_append_var (struct adios_group_struct * g, struct adios_var_struct * var)
+{
+    assert(g);
+
+    /* Note: many routines parse the list of variables through the ->next pointer with
+     * "while (v) { ...; v=v->next }
+     * So we need have NULL as next in the last variable
+     */
+    if (!g->vars) {
+        // first variable: g->vars     : V => (null)
+        //                 g->vars_tail: V => (null)
+        var->next = NULL;
+        g->vars = var;      // V => (null)
+        g->vars_tail = var; // V => (null)
+    } else {
+       var->next = NULL;
+       // append var to tail
+       g->vars_tail->next = var;  // g->vars => ... => tail => V => (null)
+       // new tail is var
+       g->vars_tail = var;
+    }
+
+    // Add variable to the hash table too
+    g->hashtbl_vars->put2(g->hashtbl_vars, var->path, var->name, var);
+}
+
 // return is whether or not the name is unique
+/*
 enum ADIOS_FLAG adios_append_var (struct adios_var_struct ** root
-                                 ,struct adios_var_struct * var
-                                 ,uint16_t id
-                                 )
+        ,struct adios_var_struct * var
+        ,uint16_t id
+        )
 {
     enum ADIOS_FLAG unique_names = adios_flag_yes;
 
     while (root)
     {
         if (   unique_names == adios_flag_yes
-            && *root
-            && !strcasecmp ((*root)->name, var->name)
+                && *root
+                && !strcasecmp ((*root)->name, var->name)
            )
         {
             unique_names = adios_flag_no;
@@ -1171,10 +1234,11 @@ enum ADIOS_FLAG adios_append_var (struct adios_var_struct ** root
 
     return unique_names;
 }
+*/
 
 void adios_append_dimension (struct adios_dimension_struct ** root
-                            ,struct adios_dimension_struct * dimension
-                            )
+        ,struct adios_dimension_struct * dimension
+        )
 {
     while (root)
     {
@@ -1191,9 +1255,9 @@ void adios_append_dimension (struct adios_dimension_struct ** root
 }
 
 void adios_append_attribute (struct adios_attribute_struct ** root
-                            ,struct adios_attribute_struct * attribute
-                            ,uint16_t id
-                            )
+        ,struct adios_attribute_struct * attribute
+        ,uint16_t id
+        )
 {
     while (root)
     {
@@ -1214,36 +1278,38 @@ void adios_append_attribute (struct adios_attribute_struct ** root
 // functions to support C & Fortran interface
 ///////////////////////////////////////////////////////////////////////////////
 int adios_common_declare_group (int64_t * id, const char * name
-                               ,enum ADIOS_FLAG host_language_fortran
-                               ,const char * coordination_comm
-                               ,const char * coordination_var
-                               ,const char * time_index_name
-                               ,enum ADIOS_FLAG stats
-                               )
+        ,enum ADIOS_FLAG host_language_fortran
+        ,const char * coordination_comm
+        ,const char * coordination_var
+        ,const char * time_index_name
+        ,enum ADIOS_FLAG stats
+        )
 {
     struct adios_group_struct * g = (struct adios_group_struct *)
-                             malloc (sizeof (struct adios_group_struct));
+        malloc (sizeof (struct adios_group_struct));
 
     g->name = strdup (name);
     g->adios_host_language_fortran = host_language_fortran;
-    g->all_unique_var_names = adios_flag_yes;
+    g->all_unique_var_names = adios_flag_no;
     // ADIOS Schema: adding similar var for meshes
     g->all_unique_mesh_names = adios_flag_yes;
     g->id = 0; // will be set in adios_append_group
     g->member_count = 0; // will be set in adios_append_group
-    g->var_count = 0;
-    g->vars = 0;
-    g->vars_written = 0;
-    g->attributes = 0;
+    g->vars = NULL;
+    g->vars_tail = NULL;
+    g->hashtbl_vars = qhashtbl(100);
+    g->vars_written = NULL;
+    g->vars_written_tail = NULL;
+    g->attributes = NULL;
     g->group_by = (coordination_var ? strdup (coordination_var) : 0L);
     g->group_comm = (coordination_comm ? strdup (coordination_comm) : 0L);
     g->time_index_name = (time_index_name ? strdup (time_index_name) : 0L);
     g->time_index = 0;
     g->stats_on = stats;
     g->process_id = 0;
-    g->methods = 0;
+    g->methods = NULL;
     // ADIOS Schema
-    g->meshs = 0;
+    g->meshs = NULL;
     g->mesh_count = 0;
 
     *id = (int64_t) g;
@@ -1290,6 +1356,8 @@ int adios_common_free_group (int64_t id)
     if (g->name)
         free (g->name);
 
+    // free the hashtables
+    g->hashtbl_vars->free(g->hashtbl_vars);
     while (g->vars)
     {
         struct adios_var_struct * vars = g->vars->next;
@@ -1302,7 +1370,7 @@ int adios_common_free_group (int64_t id)
         while (g->vars->dimensions)
         {
             struct adios_dimension_struct * dimensions
-                            = g->vars->dimensions->next;
+                = g->vars->dimensions->next;
 
             free (g->vars->dimensions);
             g->vars->dimensions = dimensions;
@@ -1310,9 +1378,10 @@ int adios_common_free_group (int64_t id)
 
         // NCSU - Clear Stat
         if (g->vars->stats)
-		{
+        {
             uint8_t j = 0, idx = 0;
-            uint8_t c = 0, count = adios_get_stat_set_count(g->vars->type);
+            enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(g->vars);
+            uint8_t c = 0, count = adios_get_stat_set_count(original_var_type);
 
             for (c = 0; c < count; c ++)
             {
@@ -1336,8 +1405,11 @@ int adios_common_free_group (int64_t id)
                 }
                 free (g->vars->stats[c]);
             }
-            free (g->vars->stats);		
-		}
+            free (g->vars->stats);
+        }
+
+        // NCSU ALACRITY-ADIOS - Clean transform metadata
+        adios_transform_clear_transform_var(g->vars);
 
         if (g->vars->data)
             free (g->vars->data);
@@ -1424,16 +1496,16 @@ static void cleanup_dimensions (char *** tokens, int * count)
 }
 
 int adios_common_define_var_characteristics (struct adios_group_struct * g
-                                            , const char * var_name
-                                            , const char * bin_intervals
-                                            , const char * bin_min
-                                            , const char * bin_max
-                                            , const char * bin_count
-                                            )
+        , const char * var_name
+        , const char * bin_intervals
+        , const char * bin_min
+        , const char * bin_max
+        , const char * bin_count
+        )
 {
     struct adios_var_struct * root = g->vars, * var;
 
-    var = adios_find_var_by_name (root, var_name, adios_flag_no);
+    var = adios_find_var_by_name (g, var_name);
 
     struct adios_hist_struct * hist;
 
@@ -1452,9 +1524,9 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
     if (!var)
     {
-        adios_error (err_invalid_varname, 
-                     "config.xml: Didn't find the variable %s for analysis\n",
-                     var_name);
+        adios_error (err_invalid_varname,
+                "config.xml: Didn't find the variable %s for analysis\n",
+                var_name);
         return 0;
     }
     else
@@ -1469,8 +1541,8 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
             if (!count)
             {
-                adios_error (err_histogram_error, 
-                             "config.xml: unable to tokenize break points\n");
+                adios_error (err_histogram_error,
+                        "config.xml: unable to tokenize break points\n");
                 return 0;
             }
 
@@ -1478,7 +1550,7 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
             if(!hist || !hist->breaks)
             {
-                adios_error (err_histogram_error, 
+                adios_error (err_histogram_error,
                         "config.xml: unable to allocate memory for histogram break points in "
                         "adios_common_define_var_characteristics\n");
                 return 0;
@@ -1489,7 +1561,7 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
                 hist->breaks[i] = atof(bin_tokens[i]);
                 if(i > 0 && (hist->breaks[i] <= hist->breaks[i-1]))
                 {
-                    adios_error (err_histogram_error, 
+                    adios_error (err_histogram_error,
                             "config.xml: break points should be in increasing order in "
                             "adios_common_define_var_characteristics\n");
                     return 0;
@@ -1510,7 +1582,7 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
         {
             if(!bin_max || !bin_min || !bin_count)
             {
-                adios_error (err_histogram_error, 
+                adios_error (err_histogram_error,
                         "config.xml: unable to generate break points\n");
                 return 0;
             }
@@ -1519,8 +1591,8 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
             if (!count)
             {
-                adios_error (err_histogram_error, 
-                    "config.xml: bin count is undefined\n");
+                adios_error (err_histogram_error,
+                        "config.xml: bin count is undefined\n");
                 return 0;
             }
 
@@ -1531,7 +1603,7 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
             if(!hist || !hist->breaks)
             {
-                adios_error (err_no_memory, 
+                adios_error (err_no_memory,
                         "config.xml: unable to allocate memory for histogram break points in "
                         "adios_common_define_var_characteristics\n");
                 return 0;
@@ -1539,8 +1611,8 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
 
             if (hist->min >= hist->max)
             {
-                adios_error (err_histogram_error, 
-                    "config.xml: minimum boundary value greater than maximum\n");
+                adios_error (err_histogram_error,
+                        "config.xml: minimum boundary value greater than maximum\n");
                 return 0;
             }
 
@@ -1555,16 +1627,40 @@ int adios_common_define_var_characteristics (struct adios_group_struct * g
     return 1;
 }
 
+/* copy path but remove trailing / characters, and also
+   NULL path becomes "", so that we don't need to check for NULL everywhere
+*/
+static char * dup_path (const char *path)
+{
+    char * p = NULL;
+    int len;
+    if (!path)
+        return strdup("");
+    len = strlen (path);
+    /* remove trailing / characters */
+    while (len > 1 && path[len-1] == '/') {
+        /* ends with '/' and it is not a single '/' */
+        len--;
+    }
+    p = malloc (len+1);
+    if (!p)
+        return NULL;
+    strncpy (p, path, len);
+    p[len] = '\0';
+    return p;
+}
+
 int64_t adios_common_define_var (int64_t group_id, const char * name
-                                ,const char * path, enum ADIOS_DATATYPES type
-                                ,const char * dimensions
-                                ,const char * global_dimensions
-                                ,const char * local_offsets
-                                )
+        ,const char * path, enum ADIOS_DATATYPES type
+        ,const char * dimensions
+        ,const char * global_dimensions
+        ,const char * local_offsets
+        ,char *transform_type_str // NCSU ALACRITY-ADIOS
+        )
 {
     struct adios_group_struct * t = (struct adios_group_struct *) group_id;
     struct adios_var_struct * v = (struct adios_var_struct *)
-                               malloc (sizeof (struct adios_var_struct));
+        malloc (sizeof (struct adios_var_struct));
     char * dim_temp;
     char * g_dim_temp;
     char * lo_dim_temp;
@@ -1584,17 +1680,20 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
         lo_dim_temp = 0;
 
     v->name = strdup (name);
-    v->path = strdup (path);
+    v->path = dup_path (path);  // copy but remove trailing / characters, and NULL path becomes ""
+    //log_error ("define_var: name=%s, path=[%s], dup=[%s]\n", name, path, v->path);
     v->type = type;
     v->dimensions = 0;
     v->is_dim = adios_flag_no;
     v->got_buffer = adios_flag_no;
     v->free_data = adios_flag_no;
+    v->parent_var = NULL;
 
     v->data = 0;
     v->write_offset = 0;
 
     v->data_size = 0;
+    v->write_count = 0;
 
     v->next = 0;
 
@@ -1602,6 +1701,9 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
     v->stats = 0;
     v->bitmap = 0;
 
+    // NCSU ALACRITY-ADIOS - Initialize transform metadata
+    adios_transform_init_transform_var(v);
+
     // Q.L. - Check whether stats are disabled or not
     if (t->stats_on == adios_flag_yes)
     {
@@ -1651,12 +1753,12 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
         {
             int ret;
             struct adios_dimension_struct * d =
-                     (struct adios_dimension_struct *)
-                         calloc (1, sizeof (struct adios_dimension_struct));
+                (struct adios_dimension_struct *)
+                calloc (1, sizeof (struct adios_dimension_struct));
 
             if (!d)
             {
-                adios_error (err_no_memory, 
+                adios_error (err_no_memory,
                         "config.xml: out of memory in adios_common_define_var\n");
 
                 return 0;
@@ -1703,12 +1805,21 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
     if (lo_dim_temp)
         free (lo_dim_temp);
 
-    flag = adios_append_var (&t->vars, v, ++t->member_count);
-    if (flag == adios_flag_no)
-    {
-        t->all_unique_var_names = adios_flag_no;
+    // NCSU ALACRITY-ADIOS - parse transform type string, and call the transform layer to
+    //   set up the variable as needed
+    struct adios_transform_spec *transform_spec = adios_transform_parse_spec(transform_type_str);
+    if (transform_spec->transform_type == adios_transform_unknown) {
+        log_error("Unknown transform type \"%s\" specified for variable \"%s\", ignoring it...\n",
+                  transform_spec->transform_type_str, v->name);
+        transform_spec->transform_type = adios_transform_none;
     }
-    t->var_count++;
+
+    // This function sets the transform_type field. It does nothing if transform_type is none.
+    // Note: ownership of the transform_spec struct is given to this function
+    v = adios_transform_define_var(t, v, transform_spec);
+
+    v->id = ++t->member_count;
+    adios_append_var (t, v);
 
     return (int64_t)v;
 }
@@ -1731,29 +1842,29 @@ void adios_common_get_group (int64_t * group_id, const char * name)
         g = g->next;
     }
 
-    adios_error (err_invalid_group, 
+    adios_error (err_invalid_group,
             "adios-group '%s' not found in configuration file\n",
             name);
 }
 
 // *****************************************************************************
 static void buffer_write (char ** buffer, uint64_t * buffer_size
-                         ,uint64_t * buffer_offset
-                         ,const void * data, uint64_t size
-                         )
+        ,uint64_t * buffer_offset
+        ,const void * data, uint64_t size
+        )
 {
     if (*buffer_offset + size > *buffer_size || *buffer == 0)
     {
-        char * b = realloc (*buffer, *buffer_offset + size + 1000);
+        char * b = realloc (*buffer, *buffer_offset + size + 1000000);
         if (b)
         {
             *buffer = b;
-            *buffer_size = (*buffer_offset + size + 1000);
+            *buffer_size = (*buffer_offset + size + 1000000);
         }
         else
         {
             adios_error (err_no_memory, "Cannot allocate memory in buffer_write.  "
-                             "Requested: %llu\n", *buffer_offset + size + 1000);
+                    "Requested: %llu\n", *buffer_offset + size + 1000000);
             return;
         }
     }
@@ -1762,11 +1873,14 @@ static void buffer_write (char ** buffer, uint64_t * buffer_size
     *buffer_offset += size;
 }
 
-static uint16_t adios_calc_var_characteristics_dims_overhead
-                                                  (struct adios_var_struct * v)
+// NCSU ALACRITY-ADIOS - Genericized this to take a dimension struct, rather
+//                       than the entire variable, so it can be used on the
+//                       pre-transform dimension struct as well.
+uint16_t adios_calc_var_characteristics_dims_overhead
+                                                  (struct adios_dimension_struct * d)
 {
     uint16_t overhead = 0;
-    struct adios_dimension_struct * d = v->dimensions;
+    //struct adios_dimension_struct * d = v->dimensions;
 
     overhead += 1; // count
     overhead += 2; // length
@@ -1785,28 +1899,31 @@ static uint16_t adios_calc_var_characteristics_dims_overhead
 uint16_t adios_calc_var_characteristics_stat_overhead (struct adios_var_struct * var)
 {
     uint16_t i, j, overhead;
+
+    enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var (var);
     overhead = j = i = 0;
 
     while (var->bitmap >> j)
     {
         // NCSU - This characteristic is present. It adds to the overhead
         if ((var->bitmap >> j) & 1)
-            overhead += adios_get_stat_size(var->stats[0][i ++].data, var->type, j);
+            overhead += adios_get_stat_size(var->stats[0][i ++].data, original_var_type, j);
         j ++;
     }
 
     return overhead;
 }
 
-
-static uint16_t adios_calc_var_characteristics_overhead
-                                                  (struct adios_var_struct * v)
+static uint16_t adios_calc_var_characteristics_overhead(struct adios_var_struct * v)
 {
     uint16_t overhead = 0;
 
     overhead += 1 + 4; // count + length
 
-    switch (v->type)
+    enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var (v);
+    // struct adios_dimension_struct *original_dimensions = adios_transform_get_characteristic_original_dims_from_var (v);
+
+    switch (original_var_type)
     {
         case adios_string:   // nothing for strings
             //overhead += 1; // id
@@ -1821,11 +1938,15 @@ static uint16_t adios_calc_var_characteristics_overhead
 
                 overhead += 1;  // id for statistics
                 // For complex numbers - min, max, avg repeated thrice
-                overhead += adios_get_stat_set_count(v->type) * adios_calc_var_characteristics_stat_overhead (v);
+                overhead += adios_get_stat_set_count(original_var_type) * adios_calc_var_characteristics_stat_overhead (v);
+
+                // NCSU ALACRITY-ADIOS - Adding transform type field overhead calc
+                overhead += adios_transform_calc_transform_characteristic_overhead(v);
 
                 overhead += 1;  // id
-                overhead += adios_calc_var_characteristics_dims_overhead (v);
+                overhead += adios_calc_var_characteristics_dims_overhead (v->dimensions);
             }
+            break;
     }
 
     return overhead;
@@ -1851,8 +1972,9 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
     while (d)
     {
         overhead += 1; // var flag
-        if (   d->dimension.id == 0
-            && d->dimension.time_index == adios_flag_no
+        if (    d->dimension.var == NULL
+             && d->dimension.attr == NULL
+             && d->dimension.time_index == adios_flag_no
            )
         {
             overhead += 8; // value
@@ -1863,8 +1985,9 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
         }
 
         overhead += 1; // var flag
-        if (   d->global_dimension.id == 0
-            && d->global_dimension.time_index == adios_flag_no
+        if (    d->global_dimension.var == NULL
+             && d->global_dimension.attr == NULL
+             && d->global_dimension.time_index == adios_flag_no
            )
         {
             overhead += 8; // value
@@ -1875,8 +1998,9 @@ uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v)
         }
 
         overhead += 1; // var flag
-        if (   d->local_offset.id == 0
-            && d->local_offset.time_index == adios_flag_no
+        if (    d->local_offset.var == NULL
+             && d->local_offset.attr == NULL
+             && d->local_offset.time_index == adios_flag_no
            )
         {
             overhead += 8; // value
@@ -1930,9 +2054,9 @@ uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd)
     overhead += 2; // coordination var id
     overhead += 2; // length of time index name
     overhead += ((fd->group->time_index_name)
-                    ? strlen (fd->group->time_index_name)
-                    : 0
-                );  // time index name
+            ? strlen (fd->group->time_index_name)
+            : 0
+            );  // time index name
     overhead += 4; // time index
 
     overhead += 1; // count of methods employed
@@ -1970,8 +2094,8 @@ uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd)
 }
 
 int adios_write_process_group_header_v1 (struct adios_file_struct * fd
-                                        ,uint64_t total_size
-                                        )
+        ,uint64_t total_size
+        )
 {
     struct adios_group_struct * g = fd->group;
 
@@ -1990,9 +2114,7 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
 
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, g->name, len);
 
-    var = adios_find_var_by_name (g->vars, g->group_by
-                                 ,g->all_unique_var_names
-                                 );
+    var = adios_find_var_by_name (g, g->group_by);
     if (var)
     {
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var->id, 2);
@@ -2009,12 +2131,12 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
     if (g->time_index_name)
     {
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,g->time_index_name, len
-                     );
+                ,g->time_index_name, len
+                );
     }
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                 ,&g->time_index, 4
-                 );
+            ,&g->time_index, 4
+            );
 
     struct adios_method_list_struct * m = fd->group->methods;
     uint8_t methods_count = 0;
@@ -2027,11 +2149,11 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
         m = m->next;
     }
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                 ,&methods_count, 1
-                 );
+            ,&methods_count, 1
+            );
     buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                 ,&methods_length, 2
-                 );
+            ,&methods_length, 2
+            );
 
     m = fd->group->methods;
     while (m)
@@ -2044,8 +2166,8 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &len, 2);
 
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,m->method->parameters, len
-                     );
+                ,m->method->parameters, len
+                );
 
         m = m->next;
     }
@@ -2057,9 +2179,9 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
 }
 
 static void index_append_process_group_v1 (
-                          struct adios_index_process_group_struct_v1 ** root
-                         ,struct adios_index_process_group_struct_v1 * item
-                         )
+        struct adios_index_process_group_struct_v1 ** root
+        ,struct adios_index_process_group_struct_v1 * item
+        )
 {
     while (root)
     {
@@ -2075,80 +2197,109 @@ static void index_append_process_group_v1 (
     }
 }
 
-static void index_append_var_v1 (struct adios_index_var_struct_v1 ** root
-                                ,struct adios_index_var_struct_v1 * item
-                                )
+static void index_append_var_v1 (
+        struct adios_index_struct_v1 *index
+        ,struct adios_index_var_struct_v1 * item
+        )
 {
-    while (root)
-    {
-        if (!*root)
-        {
-            *root = item;
-            root = 0;
+    struct adios_index_var_struct_v1 * root = index->vars_root;
+    struct adios_index_var_struct_v1 * olditem;
+
+    olditem = (struct adios_index_var_struct_v1 *)
+            index->hashtbl_vars->get2 (index->hashtbl_vars,
+                                       item->var_path, item->var_name);
+
+    log_debug ("Hashtable size=%d\n", index->hashtbl_vars->size (index->hashtbl_vars));
+    log_debug ("var tail = %p, name=%s\n", index->vars_tail,
+                (index->vars_tail ? index->vars_tail->var_name : ""));
+    if (!olditem) {
+        // new variable, insert into var list
+        if (!index->vars_root) {
+            log_debug ("   Very first variable\n");
+            // first variable: g->vars_written     : V => (null)
+            //                 g->vars_written_tail: V => (null)
+            item->next = NULL;
+            index->vars_root = item;      // V => (null)
+            index->vars_tail = item;      // V => (null)
+        } else {
+            log_debug ("   Append as new variable\n");
+            item->next = NULL;
+            // append var to tail
+            index->vars_tail->next = item;  // index->vars_root => ... => tail => V => (null)
+            // new tail is var
+            index->vars_tail = item;
         }
-        else
+        // Add variable to the hash table too
+        index->hashtbl_vars->put2(index->hashtbl_vars,
+                item->var_path, item->var_name, item);
+
+    } else {
+        // existing variable, add this item to its characteristics
+        log_debug ("   Append to existing variable\n");
+
+        /* NOTE: old append made sure the variable mathes
+         *  name + path + group name + type
+         *  Here we just match name + path. We do not support same path
+         *  in two groups, not to mention with two types
+         */
+        if (strcmp (olditem->group_name, item->group_name))
         {
-            if (   !strcasecmp (item->group_name, (*root)->group_name)
-                && !strcasecmp (item->var_name, (*root)->var_name)
-                && !strcasecmp (item->var_path, (*root)->var_path)
-                && item->type == (*root)->type
-               )
-            {
-                if (    (*root)->characteristics_count
-                      + item->characteristics_count
-                    > (*root)->characteristics_allocated
-                   )
-                {
-                    int new_items = (item->characteristics_count == 1)
-                                         ? 100 : item->characteristics_count;
-                    (*root)->characteristics_allocated =
-                            (*root)->characteristics_count + new_items;
-                    void * ptr;
-                    ptr = realloc ((*root)->characteristics
-                            ,  (*root)->characteristics_allocated
-                        * sizeof (struct adios_index_characteristic_struct_v1)
-                            );
-
-                    if (ptr)
-                    {
-                        (*root)->characteristics = ptr;
-                    }
-                    else
-                    {
-                        adios_error (err_no_memory, "error allocating memory to build "
-                                     "var index.  Index aborted\n");
-                        return;
-                    }
-                }
-                memcpy (&(*root)->characteristics
-                                             [(*root)->characteristics_count]
-                       ,item->characteristics
-                       ,  item->characteristics_count
-                        * sizeof (struct adios_index_characteristic_struct_v1)
-                       );
 
-                (*root)->characteristics_count += item->characteristics_count;
-
-                free (item->characteristics);
-                free (item->group_name);
-                free (item->var_name);
-                free (item->var_path);
-                free (item);
+            adios_error (err_unspecified, "Error when merging variable index lists. "
+                    "Variable in two different groups have the same path+name. "
+                    "Groups: %s and %s, variable: path=%s, name=%s. "
+                    "Index aborted\n",
+                    olditem->group_name, item->group_name,
+                    item->var_path, item->var_name);
+            return;
+        }
 
-                root = 0;  // exit the loop
+        if (  olditem->characteristics_count
+              + item->characteristics_count
+              > olditem->characteristics_allocated
+           )
+        {
+            int new_items = (item->characteristics_count == 1)
+                ? 100 : item->characteristics_count;
+            olditem->characteristics_allocated =
+                olditem->characteristics_count + new_items;
+            void * ptr = realloc (
+                    olditem->characteristics,
+                    olditem->characteristics_allocated *
+                        sizeof (struct adios_index_characteristic_struct_v1)
+                    );
+
+            if (ptr)
+            {
+                olditem->characteristics = ptr;
             }
             else
             {
-                root = &(*root)->next;
+                adios_error (err_no_memory, "error allocating memory to build "
+                        "var index.  Index aborted\n");
+                return;
             }
         }
+        memcpy (&olditem->characteristics [olditem->characteristics_count],
+                item->characteristics,
+                item->characteristics_count *
+                    sizeof (struct adios_index_characteristic_struct_v1)
+               );
+
+        olditem->characteristics_count += item->characteristics_count;
+
+        free (item->characteristics);
+        free (item->group_name);
+        free (item->var_name);
+        free (item->var_path);
+        free (item);
     }
 }
 
 static void index_append_attribute_v1
-                                (struct adios_index_attribute_struct_v1 ** root
-                                ,struct adios_index_attribute_struct_v1 * item
-                                )
+(struct adios_index_attribute_struct_v1 ** root
+ ,struct adios_index_attribute_struct_v1 * item
+ )
 {
     while (root)
     {
@@ -2160,23 +2311,23 @@ static void index_append_attribute_v1
         else
         {
             if (   !strcasecmp (item->group_name, (*root)->group_name)
-                && !strcasecmp (item->attr_name, (*root)->attr_name)
-                && !strcasecmp (item->attr_path, (*root)->attr_path)
+                    && !strcasecmp (item->attr_name, (*root)->attr_name)
+                    && !strcasecmp (item->attr_path, (*root)->attr_path)
                )
             {
                 if (    (*root)->characteristics_count
-                      + item->characteristics_count
-                    > (*root)->characteristics_allocated
+                        + item->characteristics_count
+                        > (*root)->characteristics_allocated
                    )
                 {
                     int new_items = (item->characteristics_count == 1)
-                                         ? 100 : item->characteristics_count;
+                        ? 100 : item->characteristics_count;
                     (*root)->characteristics_allocated =
-                                   (*root)->characteristics_count + new_items;
+                        (*root)->characteristics_count + new_items;
                     void * ptr;
                     ptr = realloc ((*root)->characteristics
                             ,  (*root)->characteristics_allocated
-                       * sizeof (struct adios_index_characteristic_struct_v1)
+                            * sizeof (struct adios_index_characteristic_struct_v1)
                             );
 
                     if (ptr)
@@ -2186,14 +2337,14 @@ static void index_append_attribute_v1
                     else
                     {
                         adios_error (err_no_memory, "error allocating memory to build "
-                                         "attribute index.  Index aborted\n");
+                                "attribute index.  Index aborted\n");
                         return;
                     }
                 }
                 memcpy (&(*root)->characteristics
-                                              [(*root)->characteristics_count]
-                       ,item->characteristics
-                       ,  item->characteristics_count
+                        [(*root)->characteristics_count]
+                        ,item->characteristics
+                        ,  item->characteristics_count
                         * sizeof (struct adios_index_characteristic_struct_v1)
                        );
 
@@ -2215,44 +2366,46 @@ static void index_append_attribute_v1
     }
 }
 
-// p2 and v2 will be destroyed as part of the merge operation...
-void adios_merge_index_v1 (struct adios_index_process_group_struct_v1 ** p1
-                          ,struct adios_index_var_struct_v1 ** v1
-                          ,struct adios_index_attribute_struct_v1 ** a1
-                          ,struct adios_index_process_group_struct_v1 * p2
-                          ,struct adios_index_var_struct_v1 * v2
-                          ,struct adios_index_attribute_struct_v1 * a2
-                          )
+// lists in new_index will be destroyed as part of the merge operation...
+void adios_merge_index_v1 (
+                   struct adios_index_struct_v1 * main_index
+                  ,struct adios_index_process_group_struct_v1 * new_pg_root
+                  ,struct adios_index_var_struct_v1 * new_vars_root
+                  ,struct adios_index_attribute_struct_v1 * new_attrs_root
+                  )
 {
     // this will just add it on to the end and all should work fine
-    index_append_process_group_v1 (p1, p2);
+    index_append_process_group_v1 (&main_index->pg_root, new_pg_root);
 
     // need to do vars attrs one at a time to merge them properly
+    struct adios_index_var_struct_v1 * v = new_vars_root;
     struct adios_index_var_struct_v1 * v_temp;
+    struct adios_index_attribute_struct_v1 * a = new_attrs_root;
     struct adios_index_attribute_struct_v1 * a_temp;
 
-    while (v2)
+    while (v)
     {
-        v_temp = v2->next;
-        v2->next = 0;
-        index_append_var_v1 (v1, v2);
-        v2 = v_temp;
+        v_temp = v->next;
+        v->next = 0;
+        log_debug ("merge index var %s/%s\n", v->var_path, v->var_name);
+        index_append_var_v1 (main_index, v);
+        v = v_temp;
     }
 
-    while (a2)
+    while (a)
     {
-        a_temp = a2->next;
-        a2->next = 0;
-        index_append_attribute_v1 (a1, a2);
-        a2 = a_temp;
+        a_temp = a->next;
+        a->next = 0;
+        index_append_attribute_v1 (&main_index->attrs_root, a);
+        a = a_temp;
     }
 }
 
 // sort pg/var indexes by time index
 void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
-                         ,struct adios_index_var_struct_v1 ** v1
-                         ,struct adios_index_attribute_struct_v1 ** a1
-                         )
+        ,struct adios_index_var_struct_v1 ** v1
+        ,struct adios_index_attribute_struct_v1 ** a1
+        )
 {
     struct adios_index_process_group_struct_v1 * p2 = 0, * p1_temp, * p2_temp, * p2_temp_prev;
     struct adios_index_var_struct_v1 * v2 = 0, * v1_temp, * v2_temp, * v2_temp_prev;
@@ -2317,8 +2470,8 @@ void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
                     uint32_t t_file_index;
                     uint32_t t_time_index;
 
+                    // NCSU - Statistics
                     uint32_t t_bitmap;
-
                     struct adios_index_characteristics_stat_struct ** t_stats;
 
                     t_offset = v1_temp->characteristics[j].offset;
@@ -2331,7 +2484,7 @@ void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
                     t_time_index = v1_temp->characteristics[j].time_index;
                     t_bitmap = v1_temp->characteristics[j].bitmap;
                     t_stats = v1_temp->characteristics[j].stats;
-                    
+
                     v1_temp->characteristics[j].offset = v1_temp->characteristics[j + 1].offset;
                     v1_temp->characteristics[j].dims.count = v1_temp->characteristics[j + 1].dims.count;
                     v1_temp->characteristics[j].dims.dims = v1_temp->characteristics[j + 1].dims.dims;
@@ -2353,6 +2506,9 @@ void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
                     v1_temp->characteristics[j + 1].time_index = t_time_index;
                     v1_temp->characteristics[j + 1].bitmap = t_bitmap;
                     v1_temp->characteristics[j + 1].stats = t_stats;
+
+                    // NCSU ALACRITY-ADIOS - Swap transform metadata
+                    adios_transform_swap_transform_characteristics(&v1_temp->characteristics[j].transform, &v1_temp->characteristics[j + 1].transform);
                 }
             }
         }
@@ -2364,8 +2520,8 @@ void adios_sort_index_v1 (struct adios_index_process_group_struct_v1 ** p1
 }
 
 static void adios_clear_process_groups_index_v1 (
-                            struct adios_index_process_group_struct_v1 * root
-                           )
+        struct adios_index_process_group_struct_v1 * root
+        )
 {
     while (root)
     {
@@ -2386,6 +2542,7 @@ static void adios_clear_vars_index_v1 (struct adios_index_var_struct_v1 * root)
     {
         int i;
         struct adios_index_var_struct_v1 * temp = root->next;
+        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_index (root);
 
         if (root->group_name)
             free (root->group_name);
@@ -2405,7 +2562,7 @@ static void adios_clear_vars_index_v1 (struct adios_index_var_struct_v1 * root)
             if (root->characteristics [i].stats != 0)
             {
                 uint8_t j = 0, idx = 0;
-                uint8_t c = 0, count = adios_get_stat_set_count(root->type);
+                uint8_t c = 0, count = adios_get_stat_set_count(original_var_type);
 
                 for (c = 0; c < count; c ++)
                 {
@@ -2413,14 +2570,14 @@ static void adios_clear_vars_index_v1 (struct adios_index_var_struct_v1 * root)
                     {
                         if ((root->characteristics [i].bitmap >> j) & 1)
                         {
-							if (j == adios_statistic_hist)
-							{
-								struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct	*) root->characteristics [i].stats[c][idx].data;
-								free (hist->breaks);
-								free (hist->frequencies);
-							}	
-							else
-                           		free (root->characteristics [i].stats[c][idx].data);
+                            if (j == adios_statistic_hist)
+                            {
+                                struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct    *) root->characteristics [i].stats[c][idx].data;
+                                free (hist->breaks);
+                                free (hist->frequencies);
+                            }
+                            else
+                                free (root->characteristics [i].stats[c][idx].data);
                             idx ++;
                         }
                         j ++;
@@ -2428,8 +2585,11 @@ static void adios_clear_vars_index_v1 (struct adios_index_var_struct_v1 * root)
                     free (root->characteristics [i].stats [c]);
                 }
 
-				free (root->characteristics [i].stats);
+                free (root->characteristics [i].stats);
             }
+
+            // NCSU ALACRITY-ADIOS - Clear the transform metadata
+            adios_transform_clear_transform_characteristic(&root->characteristics[i].transform);
         }
         if (root->characteristics)
             free (root->characteristics);
@@ -2440,13 +2600,14 @@ static void adios_clear_vars_index_v1 (struct adios_index_var_struct_v1 * root)
 }
 
 // NCSU - Clears up the statistical data, based on bitmap
-static void adios_clear_attributes_index_v1
-                                (struct adios_index_attribute_struct_v1 * root)
+    static void adios_clear_attributes_index_v1
+(struct adios_index_attribute_struct_v1 * root)
 {
     while (root)
     {
         int i;
         struct adios_index_attribute_struct_v1 * temp = root->next;
+        enum ADIOS_DATATYPES var_type = root->type;
 
         if (root->group_name)
             free (root->group_name);
@@ -2463,22 +2624,22 @@ static void adios_clear_attributes_index_v1
             if (root->characteristics [i].stats != 0)
             {
                 uint8_t j = 0, idx = 0;
-                uint8_t c = 0, count = adios_get_stat_set_count(root->type);
+                uint8_t c = 0, count = adios_get_stat_set_count(var_type);
                 for (c = 0; c < count; c ++)
                 {
                     while (root->characteristics [i].bitmap >> j)
                     {
                         if ((root->characteristics [i].bitmap >> j) & 1)
                         {
-							if (j == adios_statistic_hist)
-	                    	{
-								struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) root->characteristics [i].stats[c][idx].data;
-								free (hist->breaks);
-								free (hist->frequencies);
-								free (hist);
-	                     	}
-							else
-								free (root->characteristics [i].stats[c][idx].data);
+                            if (j == adios_statistic_hist)
+                            {
+                                struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) root->characteristics [i].stats[c][idx].data;
+                                free (hist->breaks);
+                                free (hist->frequencies);
+                                free (hist);
+                            }
+                            else
+                                free (root->characteristics [i].stats[c][idx].data);
 
                             idx ++;
                         }
@@ -2489,10 +2650,13 @@ static void adios_clear_attributes_index_v1
                 free (root->characteristics [i].stats);
             }
 
+            // NCSU ALACRITY-ADIOS - Clear the transform metadata
+            adios_transform_clear_transform_characteristic(&root->characteristics[i].transform);
+
             if (root->characteristics [i].value)
                 free (root->characteristics [i].value);
         }
-    
+
         if (root->characteristics)
             free (root->characteristics);
 
@@ -2502,17 +2666,60 @@ static void adios_clear_attributes_index_v1
 }
 
 
-void adios_clear_index_v1 (struct adios_index_process_group_struct_v1 * pg_root
-                          ,struct adios_index_var_struct_v1 * vars_root
-                          ,struct adios_index_attribute_struct_v1 * attrs_root
-                          )
+struct adios_index_struct_v1 * adios_alloc_index_v1 (int alloc_hashtables)
+{
+    struct adios_index_struct_v1 * index = (struct adios_index_struct_v1 *)
+                malloc (sizeof(struct adios_index_struct_v1));
+    assert (index);
+    index->pg_root = NULL;
+    index->vars_root = NULL;
+    index->vars_tail = NULL;
+    index->attrs_root = NULL;
+    index->attrs_tail = NULL;
+    if (alloc_hashtables) {
+        index->hashtbl_vars  = qhashtbl(100);
+        //index->hashtbl_attrs = qhashtbl(100);
+        index->hashtbl_attrs = NULL; // not used yet
+    } else {
+        index->hashtbl_vars = NULL;
+        index->hashtbl_attrs = NULL;
+    }
+    return index;
+}
+
+
+
+void adios_free_index_v1 (struct adios_index_struct_v1 * index)
+{
+    if (!index)
+        return;
+
+    if (index->hashtbl_vars)
+        index->hashtbl_vars->free  (index->hashtbl_vars);
+    if (index->hashtbl_attrs)
+        index->hashtbl_attrs->free (index->hashtbl_attrs);
+}
+
+void adios_clear_index_v1 (struct adios_index_struct_v1 * index)
 {
-    adios_clear_process_groups_index_v1 (pg_root);
-    adios_clear_vars_index_v1 (vars_root);
-    adios_clear_attributes_index_v1 (attrs_root);
+    if (!index)
+        return;
+
+    adios_clear_process_groups_index_v1 (index->pg_root);
+    adios_clear_vars_index_v1 (index->vars_root);
+    adios_clear_attributes_index_v1 (index->attrs_root);
+    index->pg_root = NULL;
+    index->vars_root = NULL;
+    index->vars_tail = NULL;
+    index->attrs_root = NULL;
+    index->attrs_tail = NULL;
+    if (index->hashtbl_vars)
+        index->hashtbl_vars->clear  (index->hashtbl_vars);
+    if (index->hashtbl_attrs)
+        index->hashtbl_attrs->clear (index->hashtbl_attrs);
 }
 
-static uint8_t count_dimensions (struct adios_dimension_struct * dimensions)
+uint8_t count_dimensions (const struct adios_dimension_struct * dimensions)
 {
     uint8_t count = 0;
 
@@ -2526,15 +2733,15 @@ static uint8_t count_dimensions (struct adios_dimension_struct * dimensions)
 }
 
 static uint64_t cast_var_data_as_uint64 (const char * parent_name
-                                        ,enum ADIOS_DATATYPES type
-                                        ,void * data
-                                        )
+        ,enum ADIOS_DATATYPES type
+        ,void * data
+        )
 {
     if (!data)
     {
-        adios_error (err_unspecified, 
-                     "cannot write var since dim %s not provided\n",
-                     parent_name);
+        adios_error (err_unspecified,
+                "cannot write var since dim %s not provided\n",
+                parent_name);
         return 0;
     }
 
@@ -2576,29 +2783,38 @@ static uint64_t cast_var_data_as_uint64 (const char * parent_name
         case adios_string:
         case adios_complex:
         case adios_double_complex:
-            adios_error (err_unspecified, 
-                         "Cannot convert type %s to integer for var %s\n",
-                         adios_type_to_string_int (type), parent_name);
+            adios_error (err_unspecified,
+                    "Cannot convert type %s to integer for var %s\n",
+                    adios_type_to_string_int (type), parent_name);
             return 0;
     }
     return 0;
 }
 
-static uint64_t get_value_for_dim (struct adios_file_struct * fd,
-                                   struct adios_dimension_item_struct * dimension)
+uint64_t adios_get_dim_value (struct adios_dimension_item_struct * dimension)
 {
     uint64_t dim = 0;
 
-    if (dimension->id != 0)
+    if (dimension->var != 0)
+    {
+        struct adios_var_struct * var = dimension->var;
+        if (var->data)
+        {
+            dim = cast_var_data_as_uint64 (var->name, var->type, var->data);
+        }
+        else
+        {
+            adios_error (err_dimension_required, "array dimension data missing\n");
+        }
+    }
+    else if (dimension->attr != 0)
     {
-        struct adios_var_struct * var = adios_find_var_by_id (fd->group->vars
-                                                             ,dimension->id
-                                                             );
-        if (var)
+        struct adios_attribute_struct * attr = dimension->attr;
+        if (attr->var)
         {
-            if (var->data)
+            if (attr->var->data)
             {
-                dim = cast_var_data_as_uint64 (var->name, var->type, var->data);
+                dim = cast_var_data_as_uint64 (attr->var->name,attr->var->type,attr->var->data);
             }
             else
             {
@@ -2607,56 +2823,197 @@ static uint64_t get_value_for_dim (struct adios_file_struct * fd,
         }
         else
         {
-            struct adios_attribute_struct * attr = adios_find_attribute_by_id
-                                                        (fd->group->attributes
-                                                        ,dimension->id
-                                                        );
-            if (attr)
+            dim = cast_var_data_as_uint64 (attr->name, attr->type ,attr->value);
+        }
+    }
+    else
+    {
+        if (dimension->time_index == adios_flag_yes)
+            dim = 1;
+        else
+            dim = dimension->rank;
+    }
+
+    return dim;
+}
+
+void adios_copy_var_written (struct adios_group_struct * g, struct adios_var_struct * var)
+{
+    assert(g);
+    struct adios_var_struct * var_new;
+
+    var_new = (struct adios_var_struct *) malloc
+        (sizeof (struct adios_var_struct));
+    var_new->id = var->id;
+    var_new->parent_var = var;
+    var_new->name = strdup (var->name);
+    var_new->path = strdup (var->path);
+    var_new->type = var->type;
+    var_new->dimensions = 0;
+    var_new->got_buffer = var->got_buffer;
+    var_new->is_dim = var->is_dim;
+    var_new->write_offset = var->write_offset;
+    var_new->stats = 0;
+    var_new->free_data = var->free_data;
+    var_new->data = 0;
+    var_new->data_size = var->data_size;
+            var_new->write_count = var->write_count;
+    var_new->next = 0;
+            adios_transform_init_transform_var(var_new);
+
+    uint64_t size = adios_get_type_size (var->type, var->data);
+    switch (var->type)
+    {
+        case adios_byte:
+        case adios_unsigned_byte:
+        case adios_short:
+        case adios_unsigned_short:
+        case adios_integer:
+        case adios_unsigned_integer:
+        case adios_long:
+        case adios_unsigned_long:
+        case adios_real:
+        case adios_double:
+        case adios_long_double:
+        case adios_complex:
+        case adios_double_complex:
+            if (var->dimensions)
             {
-                if (attr->var)
+                uint8_t c;
+                uint8_t j;
+                struct adios_dimension_struct * d = var->dimensions;
+                /*
+                 *
+                 * NOT ALL METHODS TRACK MIN/MAX.  CHECK BEFORE TRYING TO COPY.
+                 *
+                 */
+                // NCSU Statistics - copy stat to new var struct
+                enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var (var);
+                uint8_t count = adios_get_stat_set_count(original_var_type);
+                uint8_t idx = 0;
+                uint64_t characteristic_size;
+
+                var_new->bitmap = var->bitmap;
+                var_new->stats = malloc (count * sizeof(struct adios_stat_struct *));
+
+                // Set of characteristics will be repeated thrice for complex numbers
+                for (c = 0; c < count; c ++)
                 {
-                    if (attr->var->data)
-                    {
-                        dim = cast_var_data_as_uint64 (attr->var->name
-                                                      ,attr->var->type
-                                                      ,attr->var->data
-                                                      );
-                    }
-                    else
+                    var_new->stats[c] = calloc(ADIOS_STAT_LENGTH, sizeof (struct adios_stat_struct));
+
+                    j = idx = 0;
+                    while (var->bitmap >> j)
                     {
-                        adios_error (err_dimension_required, "array dimension data missing\n");
+                        if ((var->bitmap >> j) & 1)
+                        {
+                            if (var->stats[c][idx].data != NULL)
+                            {
+                                if (j == adios_statistic_hist)
+                                {
+                                    var_new->stats[c][idx].data = (struct adios_hist_struct *) malloc (sizeof(struct adios_hist_struct));
+
+                                    struct adios_hist_struct * var_hist = var->stats[c][idx].data;
+                                    struct adios_hist_struct * var_new_hist = var_new->stats[c][idx].data;
+
+                                    var_new_hist->min = var_hist->min;
+                                    var_new_hist->max = var_hist->max;
+                                    var_new_hist->num_breaks = var_hist->num_breaks;
+
+                                    var_new_hist->frequencies = malloc ((var_hist->num_breaks + 1) * adios_get_type_size(adios_unsigned_integer, ""));
+                                    memcpy (var_new_hist->frequencies, var_hist->frequencies, (var_hist->num_breaks + 1) * adios_get_type_size(adios_unsigned_integer, ""));
+                                    var_new_hist->breaks = malloc ((var_hist->num_breaks) * adios_get_type_size(adios_double, ""));
+                                    memcpy (var_new_hist->breaks, var_hist->breaks, (var_hist->num_breaks) * adios_get_type_size(adios_double, ""));
+                                }
+                                else
+                                {
+                                    characteristic_size = adios_get_stat_size(var->stats[c][idx].data, original_var_type, j);
+                                    var_new->stats[c][idx].data = malloc (characteristic_size);
+                                    memcpy (var_new->stats[c][idx].data, var->stats[c][idx].data, characteristic_size);
+                                }
+
+                                idx ++;
+                            }
+                        }
+                        j ++;
                     }
                 }
-                else
+
+                // NCSU ALACRITY-ADIOS - Copy transform metadata
+                adios_transform_copy_var_transform(var_new, var);
+
+                c = count_dimensions (var->dimensions);
+
+                for (j = 0; j < c; j++)
                 {
-                    dim = cast_var_data_as_uint64 (attr->name, attr->type
-                                                  ,attr->value
-                                                  );
+                    struct adios_dimension_struct * d_new = (struct adios_dimension_struct *)
+                        malloc (sizeof (struct adios_dimension_struct));
+                    // de-reference dimension id
+                    d_new->dimension.var = NULL;
+                    d_new->dimension.attr = NULL;
+                    d_new->dimension.rank = adios_get_dim_value (&d->dimension);
+                    d_new->dimension.time_index = d->dimension.time_index;
+                    d_new->global_dimension.var = NULL;
+                    d_new->global_dimension.attr = NULL;
+                    d_new->global_dimension.rank = adios_get_dim_value (&d->global_dimension);
+                    d_new->global_dimension.time_index = d->global_dimension.time_index;
+                    d_new->local_offset.var = NULL;
+                    d_new->local_offset.attr = NULL;
+                    d_new->local_offset.rank = adios_get_dim_value (&d->local_offset);
+                    d_new->local_offset.time_index = d->local_offset.time_index;
+                    d_new->next = 0;
+
+                    adios_append_dimension (&var_new->dimensions, d_new);
+
+                    d = d->next;
                 }
             }
             else
             {
-                adios_error (err_invalid_dimension, 
-                             "invalid dimension member id: %d\n",
-                             dimension->id);
+                var_new->stats = 0;
+                var_new->data = malloc (size);
+                memcpy (var_new->data, var->data, size);
+            }
+
+            break;
+
+        case adios_string:
+            {
+                var_new->data = malloc (size + 1);
+                memcpy (var_new->data, var->data, size);
+                ((char *) (var_new->data)) [size] = 0;
+
+                break;
             }
-        }
     }
-    else
-    {
-        if (dimension->time_index == adios_flag_yes)
-            dim = 1;
-        else
-            dim = dimension->rank;
+
+    /* Insert new variable into the copy list */
+
+    /* Note: many routines parse the list of variables through the ->next pointer with
+     * "while (v) { ...; v=v->next }
+     * So we don't make a double linked circular list, just a simple list, with
+     * having an extra pointer to the tail
+     */
+    if (!g->vars_written) {
+        // first variable: g->vars_written     : V => (null)
+        //                 g->vars_written_tail: V => (null)
+        var_new->next = NULL;
+        g->vars_written = var_new;      // V => (null)
+        g->vars_written_tail = var_new; // V => (null)
+    } else {
+       var_new->next = NULL;
+       // append var to tail
+       g->vars_written_tail->next = var_new;  // g->vars => ... => tail => V => (null)
+       // new tail is var
+       g->vars_written_tail = var_new;
     }
 
-    return dim;
 }
 
+#if 0
 void adios_copy_var_written (struct adios_var_struct ** root
-                            ,struct adios_var_struct * var
-                            ,struct adios_file_struct * fd
-                            )
+        ,struct adios_var_struct * var
+        ,struct adios_file_struct * fd
+        )
 {
     struct adios_var_struct * var_new;
 
@@ -2665,10 +3022,10 @@ void adios_copy_var_written (struct adios_var_struct ** root
         if (!*root)
         {
             var_new = (struct adios_var_struct *) malloc
-                                                  (sizeof (struct adios_var_struct));
+                (sizeof (struct adios_var_struct));
             //var_new->id = ++fd->group->member_count;
             var_new->id = var->id;
-            var_new->parent_id = var->id;
+            var_new->parent_var = var;
             var_new->name = strdup (var->name);
             var_new->path = strdup (var->path);
             var_new->type = var->type;
@@ -2703,13 +3060,19 @@ void adios_copy_var_written (struct adios_var_struct ** root
                         uint8_t c;
                         uint8_t j;
                         struct adios_dimension_struct * d = var->dimensions;
+
+                        // NCSU ALACRITY-ADIOS - Copy transform metadata
+                        adios_transform_copy_var_transform(fd, var_new, var);
+
                         /*
                          *
                          * NOT ALL METHODS TRACK MIN/MAX.  CHECK BEFORE TRYING TO COPY.
                          *
                          */
-                       // NCSU Statistics - copy stat to new var struct
-                        uint8_t count = adios_get_stat_set_count(var->type);
+
+                        // NCSU Statistics - copy stat to new var struct
+                        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var (var);
+                        uint8_t count = adios_get_stat_set_count(original_var_type);
                         uint8_t idx = 0;
                         uint64_t characteristic_size;
 
@@ -2723,7 +3086,7 @@ void adios_copy_var_written (struct adios_var_struct ** root
 
                             j = idx = 0;
                             while (var->bitmap >> j)
-                             {
+                            {
                                 if ((var->bitmap >> j) & 1)
                                 {
                                     if (var->stats[c][idx].data != NULL)
@@ -2746,7 +3109,7 @@ void adios_copy_var_written (struct adios_var_struct ** root
                                         }
                                         else
                                         {
-                                            characteristic_size = adios_get_stat_size(var->stats[c][idx].data, var->type, j);
+                                            characteristic_size = adios_get_stat_size(var->stats[c][idx].data, original_var_type, j);
                                             var_new->stats[c][idx].data = malloc (characteristic_size);
                                             memcpy (var_new->stats[c][idx].data, var->stats[c][idx].data, characteristic_size);
                                         }
@@ -2763,16 +3126,19 @@ void adios_copy_var_written (struct adios_var_struct ** root
                         for (j = 0; j < c; j++)
                         {
                             struct adios_dimension_struct * d_new = (struct adios_dimension_struct *)
-                                                            malloc (sizeof (struct adios_dimension_struct));
+                                malloc (sizeof (struct adios_dimension_struct));
                             // de-reference dimension id
-                            d_new->dimension.id = 0;
-                            d_new->dimension.rank = get_value_for_dim (fd, &d->dimension);
+                            d_new->dimension.var = NULL;
+                            d_new->dimension.attr = NULL;
+                            d_new->dimension.rank = adios_get_dim_value (&d->dimension);
                             d_new->dimension.time_index = d->dimension.time_index;
-                            d_new->global_dimension.id = 0;
-                            d_new->global_dimension.rank = get_value_for_dim (fd, &d->global_dimension);
+                            d_new->global_dimension.var = NULL;
+                            d_new->global_dimension.attr = NULL;
+                            d_new->global_dimension.rank = adios_get_dim_value (&d->global_dimension);
                             d_new->global_dimension.time_index = d->global_dimension.time_index;
-                            d_new->local_offset.id = 0;
-                            d_new->local_offset.rank = get_value_for_dim (fd, &d->local_offset);
+                            d_new->local_offset.var = NULL;
+                            d_new->local_offset.attr = NULL;
+                            d_new->local_offset.rank = adios_get_dim_value (&d->local_offset);
                             d_new->local_offset.time_index = d->local_offset.time_index;
                             d_new->next = 0;
 
@@ -2791,13 +3157,13 @@ void adios_copy_var_written (struct adios_var_struct ** root
                     break;
 
                 case adios_string:
-                {
-                    var_new->data = malloc (size + 1);
-                    memcpy (var_new->data, var->data, size);
-                    ((char *) (var_new->data)) [size] = 0;
+                    {
+                        var_new->data = malloc (size + 1);
+                        memcpy (var_new->data, var->data, size);
+                        ((char *) (var_new->data)) [size] = 0;
 
-                    break;
-                }
+                        break;
+                    }
             }
 
             *root = var_new;
@@ -2809,12 +3175,10 @@ void adios_copy_var_written (struct adios_var_struct ** root
         }
     }
 }
+#endif
 
-void adios_build_index_v1 (struct adios_file_struct * fd
-                          ,struct adios_index_process_group_struct_v1 ** pg_root
-                          ,struct adios_index_var_struct_v1 ** vars_root
-                          ,struct adios_index_attribute_struct_v1 ** attrs_root
-                          )
+void adios_build_index_v1 (struct adios_file_struct * fd,
+                           struct adios_index_struct_v1 * index)
 {
     struct adios_group_struct * g = fd->group;
     struct adios_var_struct * v = g->vars_written;
@@ -2822,10 +3186,9 @@ void adios_build_index_v1 (struct adios_file_struct * fd
     struct adios_index_process_group_struct_v1 * g_item;
 
     uint64_t process_group_count = 0;
-    uint16_t var_count = 0;
 
     g_item = (struct adios_index_process_group_struct_v1 *)
-                malloc (sizeof (struct adios_index_process_group_struct_v1));
+        malloc (sizeof (struct adios_index_process_group_struct_v1));
     g_item->group_name = (g->name ? strdup (g->name) : 0L);
     g_item->adios_host_language_fortran = g->adios_host_language_fortran;
     g_item->process_id = g->process_id;
@@ -2835,7 +3198,7 @@ void adios_build_index_v1 (struct adios_file_struct * fd
     g_item->next = 0;
 
     // build the groups and vars index
-    index_append_process_group_v1 (pg_root, g_item);
+    index_append_process_group_v1 (&index->pg_root, g_item);
 
     while (v)
     {
@@ -2845,8 +3208,8 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             struct adios_index_var_struct_v1 * v_index;
             v_index = malloc (sizeof (struct adios_index_var_struct_v1));
             v_index->characteristics = malloc (
-                           sizeof (struct adios_index_characteristic_struct_v1)
-                          );
+                    sizeof (struct adios_index_characteristic_struct_v1)
+                    );
 
             v_index->id = v->id;
             v_index->group_name = (g->name ? strdup (g->name) : 0L);
@@ -2860,11 +3223,11 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             // We need this to calculate the correct payload_offset, because that
             // holds the variable references in the dimensions, while v-> contains
             // only numerical values
-            struct adios_var_struct * old_var = adios_find_var_by_id (g->vars, v->parent_id);
+            struct adios_var_struct * old_var = v->parent_var;
             v_index->characteristics [0].payload_offset = v->write_offset
-                            + adios_calc_var_overhead_v1 (old_var)
-                            - strlen (old_var->path)  // take out the length of path defined in XML
-                            + strlen (v->path); // add length of the actual, current path of this var
+                + adios_calc_var_overhead_v1 (old_var)
+                - strlen (old_var->path)  // take out the length of path defined in XML
+                + strlen (v->path); // add length of the actual, current path of this var
             v_index->characteristics [0].file_index = fd->subfile_index;
             v_index->characteristics [0].time_index = g_item->time_index;
 
@@ -2874,6 +3237,9 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             // NCSU - Initializing stat related info in index
             v_index->characteristics [0].bitmap = 0;
             v_index->characteristics [0].stats = 0;
+            // NCSU ALACRITY-ADIOS - Initialize the transform metadata
+            adios_transform_init_transform_characteristic(&v_index->characteristics[0].transform);
+            //v_index->characteristics [0].transform_type = adios_transform_none;
 
             uint64_t size = adios_get_type_size (v->type, v->data);
             switch (v->type)
@@ -2898,7 +3264,9 @@ void adios_build_index_v1 (struct adios_file_struct * fd
                         struct adios_dimension_struct * d = v->dimensions;
 
                         // NCSU - Copy statistics from var struct to index
-                        uint8_t count = adios_get_stat_set_count(v->type);
+                        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var (v);
+
+                        uint8_t count = adios_get_stat_set_count(original_var_type);
                         uint8_t idx = 0;
                         uint64_t characteristic_size;
 
@@ -2935,7 +3303,7 @@ void adios_build_index_v1 (struct adios_file_struct * fd
                                         }
                                         else
                                         {
-                                            characteristic_size = adios_get_stat_size(v->stats[c][idx].data, v->type, j);
+                                            characteristic_size = adios_get_stat_size(v->stats[c][idx].data, original_var_type, j);
                                             v_index->characteristics [0].stats[c][idx].data = malloc (characteristic_size);
                                             memcpy (v_index->characteristics [0].stats[c][idx].data, v->stats[c][idx].data, characteristic_size);
                                         }
@@ -2948,6 +3316,9 @@ void adios_build_index_v1 (struct adios_file_struct * fd
                         }
                         // NCSU - End of copy, for statistics
 
+                        // NCSU ALACRITY-ADIOS - copy transform type field
+                        adios_transform_copy_transform_characteristic(&v_index->characteristics[0].transform, v);
+
                         c = count_dimensions (v->dimensions);
                         v_index->characteristics [0].dims.count = c;
                         // (local, global, local offset)
@@ -2956,11 +3327,11 @@ void adios_build_index_v1 (struct adios_file_struct * fd
                         for (j = 0; j < c; j++)
                         {
                             v_index->characteristics [0].dims.dims [j * 3 + 0] =
-                                   get_value_for_dim (fd, &d->dimension);
+                                adios_get_dim_value (&d->dimension);
                             v_index->characteristics [0].dims.dims [j * 3 + 1] =
-                                   get_value_for_dim (fd, &d->global_dimension);
+                                adios_get_dim_value (&d->global_dimension);
                             v_index->characteristics [0].dims.dims [j * 3 + 2] =
-                                   get_value_for_dim (fd, &d->local_offset);
+                                adios_get_dim_value (&d->local_offset);
 
                             d = d->next;
                         }
@@ -2969,12 +3340,16 @@ void adios_build_index_v1 (struct adios_file_struct * fd
 
                     if (v->data)
                     {
+                        // NCSU - Copy statistics from var struct to index
                         v_index->characteristics [0].bitmap = 0;
                         v_index->characteristics [0].stats = 0;
+                        // NCSU ALACRITY-ADIOS - Clear the transform metadata
+                        // This is probably redundant with above code, but do it anyway to be safe
+                        adios_transform_clear_transform_characteristic(&v_index->characteristics[0].transform);
 
                         v_index->characteristics [0].value = malloc (size);
                         memcpy (v_index->characteristics [0].value, v->data
-                               ,size
+                                ,size
                                );
                         v_index->characteristics [0].dims.count = 0;
                         v_index->characteristics [0].dims.dims = 0;
@@ -2983,18 +3358,19 @@ void adios_build_index_v1 (struct adios_file_struct * fd
                     break;
 
                 case adios_string:
-                {
-                    v_index->characteristics [0].value = malloc (size + 1);
-                    memcpy (v_index->characteristics [0].value, v->data, size);
-                    ((char *) (v_index->characteristics [0].value)) [size] = 0;
+                    {
+                        v_index->characteristics [0].value = malloc (size + 1);
+                        memcpy (v_index->characteristics [0].value, v->data, size);
+                        ((char *) (v_index->characteristics [0].value)) [size] = 0;
 
-                    break;
-                }
+                        break;
+                    }
             }
             v_index->next = 0;
 
             // this fn will either take ownership for free
-            index_append_var_v1 (vars_root, v_index);
+            log_debug ("build index var %s/%s\n", v_index->var_path, v_index->var_name);
+            index_append_var_v1 (index, v_index);
         }
 
         v = v->next;
@@ -3008,8 +3384,8 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             struct adios_index_attribute_struct_v1 * a_index;
             a_index = malloc (sizeof (struct adios_index_attribute_struct_v1));
             a_index->characteristics = malloc (
-                           sizeof (struct adios_index_characteristic_struct_v1)
-                          );
+                    sizeof (struct adios_index_characteristic_struct_v1)
+                    );
 
             a_index->id = a->id;
             a_index->group_name = (g->name ? strdup (g->name) : 0L);
@@ -3025,9 +3401,12 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             a_index->characteristics [0].file_index = fd->subfile_index;
             a_index->characteristics [0].time_index = 0;
 
-            // NCSU -,Initializing stat related info in attribute index
+            // NCSU - Initializing stat related info in attribute index
             a_index->characteristics [0].bitmap = 0;
             a_index->characteristics [0].stats = 0;
+            // NCSU ALACRITY-ADIOS - Initialize transform metadata
+            adios_transform_init_transform_characteristic(&a_index->characteristics[0].transform);
+            //a_index->characteristics[0].transform_type = adios_transform_none;
 
             if (a->value)
             {
@@ -3049,7 +3428,7 @@ void adios_build_index_v1 (struct adios_file_struct * fd
             a_index->next = 0;
 
             // this fn will either take ownership for free
-            index_append_attribute_v1 (attrs_root, a_index);
+            index_append_attribute_v1 (&index->attrs_root, a_index);
         }
 
         a = a->next;
@@ -3057,13 +3436,11 @@ void adios_build_index_v1 (struct adios_file_struct * fd
 }
 
 int adios_write_index_v1 (char ** buffer
-                         ,uint64_t * buffer_size
-                         ,uint64_t * buffer_offset
-                         ,uint64_t index_start
-                         ,struct adios_index_process_group_struct_v1 * pg_root
-                         ,struct adios_index_var_struct_v1 * vars_root
-                         ,struct adios_index_attribute_struct_v1 * attrs_root
-                         )
+        ,uint64_t * buffer_size
+        ,uint64_t * buffer_offset
+        ,uint64_t index_start
+        ,struct adios_index_struct_v1 * index
+        )
 {
     uint64_t groups_count = 0;
     uint16_t vars_count = 0;
@@ -3077,6 +3454,10 @@ int adios_write_index_v1 (char ** buffer
     // we need to save the offset we will write the count and size
     uint64_t buffer_offset_start = 0; // since we realloc, we can't save a ptr
 
+    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
+    struct adios_index_var_struct_v1 * vars_root = index->vars_root;
+    struct adios_index_attribute_struct_v1 * attrs_root = index->attrs_root;
+
     // save for the process group index
     buffer_offset_start = *buffer_offset;
 
@@ -3098,21 +3479,21 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         group_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,pg_root->group_name, len
-                     );
+                ,pg_root->group_name, len
+                );
         index_size += len;
         group_size += len;
 
         flag = (pg_root->adios_host_language_fortran == adios_flag_yes ? 'y'
-                                                                       : 'n'
+                : 'n'
                );
         buffer_write (buffer, buffer_size, buffer_offset, &flag, 1);
         index_size += 1;
         group_size += 1;
 
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,&pg_root->process_id, 4
-                     );
+                ,&pg_root->process_id, 4
+                );
         index_size += 4;
         group_size += 4;
 
@@ -3130,20 +3511,20 @@ int adios_write_index_v1 (char ** buffer
         if (len)
         {
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,pg_root->time_index_name, len
-                         );
+                    ,pg_root->time_index_name, len
+                    );
         }
         index_size += len;
         group_size += len;
 
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,&pg_root->time_index, 4
-                     );
+                ,&pg_root->time_index, 4
+                );
         index_size += 4;
         group_size += 4;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,&pg_root->offset_in_file, 8
-                     );
+                ,&pg_root->offset_in_file, 8
+                );
         index_size += 8;
         group_size += 8;
 
@@ -3182,8 +3563,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         var_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,vars_root->group_name, len
-                     );
+                ,vars_root->group_name, len
+                );
         index_size += len;
         var_size += len;
 
@@ -3192,8 +3573,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         var_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,vars_root->var_name, len
-                     );
+                ,vars_root->var_name, len
+                );
         index_size += len;
         var_size += len;
 
@@ -3202,8 +3583,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         var_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,vars_root->var_path, len
-                     );
+                ,vars_root->var_path, len
+                );
         index_size += len;
         var_size += len;
 
@@ -3213,8 +3594,8 @@ int adios_write_index_v1 (char ** buffer
         var_size += 1;
 
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,&vars_root->characteristics_count, 8
-                     );
+                ,&vars_root->characteristics_count, 8
+                );
         index_size += 8;
         var_size += 8;
 
@@ -3223,6 +3604,10 @@ int adios_write_index_v1 (char ** buffer
             uint64_t size;
             uint8_t characteristic_set_count = 0;
             uint32_t characteristic_set_length = 0;
+            // NCSU ALACRITY-ADIOS - Temp vars to store bytes/num
+            //   characteristics written by a delegate write function.
+            uint64_t characteristic_write_length;
+            uint8_t characteristic_write_count;
 
             uint64_t characteristic_set_start = *buffer_offset;
             *buffer_offset += 1 + 4; // save space for characteristic count/len
@@ -3238,8 +3623,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&vars_root->characteristics [i].offset, 8
-                         );
+                    ,&vars_root->characteristics [i].offset, 8
+                    );
             index_size += 8;
             var_size += 8;
             characteristic_set_length += 8;
@@ -3253,8 +3638,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&vars_root->characteristics [i].payload_offset, 8
-                         );
+                    ,&vars_root->characteristics [i].payload_offset, 8
+                    );
             index_size += 8;
             var_size += 8;
             characteristic_set_length += 8;
@@ -3268,8 +3653,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&vars_root->characteristics [i].file_index, 4
-                         );
+                    ,&vars_root->characteristics [i].file_index, 4
+                    );
             index_size += 4;
             var_size += 4;
             characteristic_set_length += 4;
@@ -3283,8 +3668,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&vars_root->characteristics [i].time_index, 4
-                         );
+                    ,&vars_root->characteristics [i].time_index, 4
+                    );
             index_size += 4;
             var_size += 4;
             characteristic_set_length += 4;
@@ -3292,8 +3677,8 @@ int adios_write_index_v1 (char ** buffer
             // depending on if it is an array or not, generate a different
             // additional set of characteristics
             size = adios_get_type_size (vars_root->type
-                                       ,vars_root->characteristics [i].value
-                                       );
+                    ,vars_root->characteristics [i].value
+                    );
 
             switch (vars_root->type)
             {
@@ -3316,63 +3701,79 @@ int adios_write_index_v1 (char ** buffer
                         characteristic_set_count++;
                         flag = (uint8_t) adios_characteristic_dimensions;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&flag, 1
-                                     );
+                                ,&flag, 1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
 
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&vars_root->characteristics [i].dims.count
-                                     ,1
-                                     );
+                                ,&vars_root->characteristics [i].dims.count
+                                ,1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
 
                         len = 3 * 8 * vars_root->characteristics [i].dims.count;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&len, 2
-                                     );
+                                ,&len, 2
+                                );
                         index_size += 2;
                         var_size += 2;
                         characteristic_set_length += 2;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,vars_root->characteristics [i].dims.dims
-                                     ,len
-                                     );
+                                ,vars_root->characteristics [i].dims.dims
+                                ,len
+                                );
                         index_size += len;
                         var_size += len;
                         characteristic_set_length += len;
 
+                        // NCSU ALACRITY-ADIOS - Adding transform type field
+                        characteristic_write_length = 0;
+                        characteristic_write_count =
+                                adios_transform_serialize_transform_characteristic(
+                                    &vars_root->characteristics[i].transform,
+                                    &characteristic_write_length,
+                                    buffer, buffer_size, buffer_offset
+                                );
+
+                        characteristic_set_count += characteristic_write_count;
+                        index_size += characteristic_write_length;
+                        var_size += characteristic_write_length;
+                        characteristic_set_length += characteristic_write_length;
+
                         // NCSU - Adding bitmap
                         characteristic_set_count++;
                         flag = (uint8_t) adios_characteristic_bitmap;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&flag, 1
-                                     );
+                                ,&flag, 1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
 
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&vars_root->characteristics [i].bitmap, 4
-                                     );
+                                ,&vars_root->characteristics [i].bitmap, 4
+                                );
                         index_size += 4;
                         var_size += 4;
                         characteristic_set_length += 4;
 
                         // NCSU - Adding statistics
-                           characteristic_set_count++;
+                        characteristic_set_count++;
                         flag = (uint8_t) adios_characteristic_stat;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&flag, 1
-                                     );
+                                ,&flag, 1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
 
-                        uint8_t count = adios_get_stat_set_count(vars_root->type);
+                        enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_index (vars_root);
+                        uint8_t count = adios_get_stat_set_count(original_var_type);
+
                         uint8_t idx = 0, c, j;
                         uint64_t characteristic_size;
 
@@ -3389,37 +3790,37 @@ int adios_write_index_v1 (char ** buffer
                                         struct adios_hist_struct * hist = vars_root->characteristics [i].stats[c][idx].data;
 
                                         buffer_write (  buffer, buffer_size, buffer_offset
-                                                        , &hist->num_breaks, 4
-                                                     );
+                                                , &hist->num_breaks, 4
+                                                );
                                         characteristic_size = 4;
 
                                         buffer_write (  buffer, buffer_size, buffer_offset
-                                                        , &hist->min, 8
-                                                     );
+                                                , &hist->min, 8
+                                                );
                                         characteristic_size += 8;
 
                                         buffer_write (  buffer, buffer_size, buffer_offset
-                                                        , &hist->max, 8
-                                                     );
+                                                , &hist->max, 8
+                                                );
                                         characteristic_size += 8;
 
                                         buffer_write (  buffer, buffer_size, buffer_offset
-                                                        , hist->frequencies, (hist->num_breaks + 1) * 4
-                                                     );
+                                                , hist->frequencies, (hist->num_breaks + 1) * 4
+                                                );
                                         characteristic_size += (hist->num_breaks + 1) * 4;
 
                                         buffer_write (  buffer, buffer_size, buffer_offset
-                                                        , hist->breaks, hist->num_breaks * 8
-                                                     );
+                                                , hist->breaks, hist->num_breaks * 8
+                                                );
                                         characteristic_size += (hist->num_breaks) * 8;
                                     }
                                     else
                                     {
-                                        characteristic_size = adios_get_stat_size(vars_root->characteristics [i].stats[c][idx].data, vars_root->type, j);
+                                        characteristic_size = adios_get_stat_size(vars_root->characteristics [i].stats[c][idx].data, original_var_type, j);
 
-                                        buffer_write ( 	buffer, buffer_size, buffer_offset
-                                                         ,vars_root->characteristics [i].stats[c][idx].data, characteristic_size
-                                                      );
+                                        buffer_write (     buffer, buffer_size, buffer_offset
+                                                ,vars_root->characteristics [i].stats[c][idx].data, characteristic_size
+                                                );
 
                                     }
 
@@ -3433,6 +3834,20 @@ int adios_write_index_v1 (char ** buffer
                             }
                         }
                         // NCSU - End of addition statistic to buffer
+
+                        /*
+                        characteristic_set_count++;
+                        flag = (uint8_t) adios_characteristic_transform_type;
+                        buffer_write (buffer, buffer_size, buffer_offset, &flag, 1);
+                        index_size += 1;
+                        var_size += 1;
+                        characteristic_set_length += 1;
+
+                        buffer_write (buffer, buffer_size, buffer_offset, &vars_root->characteristics[i].transform_type, 1);
+                        index_size += 1;
+                        var_size += 1;
+                        characteristic_set_length += 1;
+                        */
                     }
 
                     if (vars_root->characteristics [i].value)
@@ -3441,14 +3856,14 @@ int adios_write_index_v1 (char ** buffer
                         characteristic_set_count++;
                         flag = (uint8_t) adios_characteristic_value;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&flag, 1
-                                     );
+                                ,&flag, 1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,vars_root->characteristics [i].value, size
-                                     );
+                                ,vars_root->characteristics [i].value, size
+                                );
                         index_size += size;
                         var_size += size;
                         characteristic_set_length += size;
@@ -3461,8 +3876,8 @@ int adios_write_index_v1 (char ** buffer
                         characteristic_set_count++;
                         flag = (uint8_t) adios_characteristic_value;
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,&flag, 1
-                                     );
+                                ,&flag, 1
+                                );
                         index_size += 1;
                         var_size += 1;
                         characteristic_set_length += 1;
@@ -3470,15 +3885,15 @@ int adios_write_index_v1 (char ** buffer
                         {
                             uint16_t len = (uint16_t) size;
                             buffer_write (buffer, buffer_size, buffer_offset
-                                         ,&len, 2
-                                         );
+                                    ,&len, 2
+                                    );
                             index_size += 2;
                             var_size += 2;
                             characteristic_set_length += 2;
                         }
                         buffer_write (buffer, buffer_size, buffer_offset
-                                     ,vars_root->characteristics [i].value, size
-                                     );
+                                ,vars_root->characteristics [i].value, size
+                                );
                         index_size += size;
                         var_size += size;
                         characteristic_set_length += size;
@@ -3487,11 +3902,11 @@ int adios_write_index_v1 (char ** buffer
             }
             // characteristics count/size prefix
             buffer_write (buffer, buffer_size, &characteristic_set_start
-                         ,&characteristic_set_count, 1
-                         );
+                    ,&characteristic_set_count, 1
+                    );
             buffer_write (buffer, buffer_size, &characteristic_set_start
-                         ,&characteristic_set_length, 4
-                         );
+                    ,&characteristic_set_length, 4
+                    );
         }
 
         buffer_write (buffer, buffer_size, &var_start, &var_size, 4);
@@ -3499,6 +3914,8 @@ int adios_write_index_v1 (char ** buffer
         vars_root = vars_root->next;
     }
 
+    log_debug ("%s: wrote %d variables into the var-index buffer\n", __func__, vars_count);
+
     // vars index count/size prefix
     buffer_write (buffer, buffer_size, &buffer_offset_start, &vars_count, 2);
     buffer_write (buffer, buffer_size, &buffer_offset_start, &index_size, 8);
@@ -3530,8 +3947,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         attr_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,attrs_root->group_name, len
-                     );
+                ,attrs_root->group_name, len
+                );
         index_size += len;
         attr_size += len;
 
@@ -3540,8 +3957,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         attr_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,attrs_root->attr_name, len
-                     );
+                ,attrs_root->attr_name, len
+                );
         index_size += len;
         attr_size += len;
 
@@ -3550,8 +3967,8 @@ int adios_write_index_v1 (char ** buffer
         index_size += 2;
         attr_size += 2;
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,attrs_root->attr_path, len
-                     );
+                ,attrs_root->attr_path, len
+                );
         index_size += len;
         attr_size += len;
 
@@ -3561,8 +3978,8 @@ int adios_write_index_v1 (char ** buffer
         attr_size += 1;
 
         buffer_write (buffer, buffer_size, buffer_offset
-                     ,&attrs_root->characteristics_count, 8
-                     );
+                ,&attrs_root->characteristics_count, 8
+                );
         index_size += 8;
         attr_size += 8;
 
@@ -3586,8 +4003,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&attrs_root->characteristics [i].offset, 8
-                         );
+                    ,&attrs_root->characteristics [i].offset, 8
+                    );
             index_size += 8;
             attr_size += 8;
             characteristic_set_length += 8;
@@ -3601,8 +4018,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&attrs_root->characteristics [i].payload_offset, 8
-                         );
+                    ,&attrs_root->characteristics [i].payload_offset, 8
+                    );
             index_size += 8;
             attr_size += 8;
             characteristic_set_length += 8;
@@ -3616,8 +4033,8 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&attrs_root->characteristics [i].file_index, 4
-                         );
+                    ,&attrs_root->characteristics [i].file_index, 4
+                    );
             index_size += 4;
             attr_size += 4;
             characteristic_set_length += 4;
@@ -3631,15 +4048,15 @@ int adios_write_index_v1 (char ** buffer
             characteristic_set_length += 1;
 
             buffer_write (buffer, buffer_size, buffer_offset
-                         ,&attrs_root->characteristics [i].time_index, 4
-                         );
+                    ,&attrs_root->characteristics [i].time_index, 4
+                    );
             index_size += 4;
             attr_size += 4;
             characteristic_set_length += 4;
 
             size = adios_get_type_size (attrs_root->type
-                                       ,attrs_root->characteristics [i].value
-                                       );
+                    ,attrs_root->characteristics [i].value
+                    );
 
             if (attrs_root->characteristics [i].value != 0)
             {
@@ -3647,8 +4064,8 @@ int adios_write_index_v1 (char ** buffer
                 characteristic_set_count++;
                 flag = (uint8_t) adios_characteristic_value;
                 buffer_write (buffer, buffer_size, buffer_offset
-                             ,&flag, 1
-                             );
+                        ,&flag, 1
+                        );
                 index_size += 1;
                 attr_size += 1;
                 characteristic_set_length += 1;
@@ -3656,15 +4073,15 @@ int adios_write_index_v1 (char ** buffer
                 {
                     uint16_t len = (uint16_t) size;
                     buffer_write (buffer, buffer_size, buffer_offset
-                                 ,&len, 2
-                                 );
+                            ,&len, 2
+                            );
                     index_size += 2;
                     attr_size += 2;
                     characteristic_set_length += 2;
                 }
                 buffer_write (buffer, buffer_size, buffer_offset
-                             ,attrs_root->characteristics [i].value, size
-                             );
+                        ,attrs_root->characteristics [i].value, size
+                        );
                 index_size += size;
                 attr_size += size;
                 characteristic_set_length += size;
@@ -3675,14 +4092,14 @@ int adios_write_index_v1 (char ** buffer
                 characteristic_set_count++;
                 flag = (uint8_t) adios_characteristic_var_id;
                 buffer_write (buffer, buffer_size, buffer_offset
-                             ,&flag, 1
-                             );
+                        ,&flag, 1
+                        );
                 index_size += 1;
                 attr_size += 1;
                 characteristic_set_length += 1;
                 buffer_write (buffer, buffer_size, buffer_offset
-                             ,&attrs_root->characteristics [i].var_id, 2
-                             );
+                        ,&attrs_root->characteristics [i].var_id, 2
+                        );
                 index_size += 2;
                 attr_size += 2;
                 characteristic_set_length += 2;
@@ -3690,11 +4107,11 @@ int adios_write_index_v1 (char ** buffer
 
             // characteristics count/size prefix
             buffer_write (buffer, buffer_size, &characteristic_set_start
-                         ,&characteristic_set_count, 1
-                         );
+                    ,&characteristic_set_count, 1
+                    );
             buffer_write (buffer, buffer_size, &characteristic_set_start
-                         ,&characteristic_set_length, 4
-                         );
+                    ,&characteristic_set_length, 4
+                    );
         }
 
         buffer_write (buffer, buffer_size, &attr_start, &attr_size, 4);
@@ -3707,18 +4124,18 @@ int adios_write_index_v1 (char ** buffer
     buffer_write (buffer, buffer_size, &buffer_offset_start, &index_size, 8);
 
 
-    /* Since ADIOS 1.4 Write new information before the last 24+4 bytes into the footer 
-        New information's format
-            24 characters: ADIOS-BP v<version>, padded with spaces up to 24
-            1 byte: major version
-            1 byte: minor version
-            1 byte: micro version
-            1 byte: 0
-    */
+    /* Since ADIOS 1.4 Write new information before the last 24+4 bytes into the footer
+       New information's format
+       24 characters: ADIOS-BP v<version>, padded with spaces up to 24
+       1 byte: major version
+       1 byte: minor version
+       1 byte: micro version
+       1 byte: 0
+       */
     {
         char verstr[25] = "                    ";
         unsigned char ver;
-        snprintf (verstr, 25, "ADIOS-BP v%-14.14s", VERSION); 
+        snprintf (verstr, 25, "ADIOS-BP v%-14.14s", VERSION);
         buffer_write (buffer, buffer_size, buffer_offset, verstr, 24);
         ver = VERSION_MAJOR;
         buffer_write (buffer, buffer_size, buffer_offset, &ver, 1);
@@ -3739,9 +4156,9 @@ int adios_write_index_v1 (char ** buffer
 }
 
 int adios_write_version_v1 (char ** buffer
-                           ,uint64_t * buffer_size
-                           ,uint64_t * buffer_offset
-                           )
+        ,uint64_t * buffer_size
+        ,uint64_t * buffer_offset
+        )
 {
     uint32_t test = 1;
 
@@ -3763,10 +4180,10 @@ int adios_write_version_v1 (char ** buffer
 }
 
 int adios_write_version_flag_v1 (char ** buffer
-                                ,uint64_t * buffer_size
-                                ,uint64_t * buffer_offset
-                                ,uint32_t flag
-                                )
+        ,uint64_t * buffer_size
+        ,uint64_t * buffer_offset
+        ,uint32_t flag
+        )
 {
     uint32_t test = 1;
 
@@ -3795,8 +4212,9 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
 
     size += 1; // var (y or n)
 
-    if (   dimension->dimension.id == 0
-        && dimension->dimension.time_index == adios_flag_no
+    if (    dimension->dimension.var == NULL
+         && dimension->dimension.attr == NULL
+         && dimension->dimension.time_index == adios_flag_no
        )  // it is a number
     {
         size += 8;  // size of value
@@ -3808,8 +4226,9 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
 
     size += 1; // var (y or n)
 
-    if (   dimension->global_dimension.id == 0
-        && dimension->global_dimension.time_index == adios_flag_no
+    if (    dimension->global_dimension.var == NULL
+         && dimension->global_dimension.attr == NULL
+         && dimension->global_dimension.time_index == adios_flag_no
        )  // it is a number
     {
         size += 8; // default to a rank
@@ -3821,8 +4240,9 @@ static uint16_t calc_dimension_size (struct adios_dimension_struct * dimension)
 
     size += 1; // var (y or n)
 
-    if (   dimension->local_offset.id == 0
-        && dimension->local_offset.time_index == adios_flag_no
+    if (    dimension->local_offset.var == NULL
+         && dimension->local_offset.var == NULL
+         && dimension->local_offset.time_index == adios_flag_no
        )  // it is a number
     {
         size += 8;  // default to a rank
@@ -3851,78 +4271,94 @@ static uint16_t calc_dimensions_size (struct adios_dimension_struct * dimension)
 
 static
 uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
-                                  ,struct adios_dimension_struct * dimension
-                                  )
+        ,struct adios_dimension_struct * dimension
+        )
 {
     uint64_t size = 0;
+    uint16_t id;
     uint8_t var;
 
-    if (   dimension->dimension.id == 0
-        && dimension->dimension.time_index == adios_flag_no
+    if (    dimension->dimension.var == NULL
+         && dimension->dimension.attr == NULL
+         && dimension->dimension.time_index == adios_flag_no
        )
     {
         var = 'n';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->dimension.rank, 8
-                     );
+                ,&dimension->dimension.rank, 8
+                );
         size += 8;
     }
     else
     {
+        if (dimension->dimension.var != NULL)
+            id = dimension->dimension.var->id;
+        else if (dimension->dimension.attr != NULL)
+            id = dimension->dimension.attr->id;
+        else
+            id = 0; // just write this garbage
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->dimension.id, 2
-                     );
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
         size += 2;
     }
 
-    if (   dimension->global_dimension.id == 0
-        && dimension->global_dimension.time_index == adios_flag_no
+    if (    dimension->global_dimension.var == NULL
+         && dimension->global_dimension.attr == NULL
+         && dimension->global_dimension.time_index == adios_flag_no
        )
     {
         var = 'n';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->global_dimension.rank, 8
-                     );
+                ,&dimension->global_dimension.rank, 8
+                );
         size += 8;
     }
     else
     {
+        if (dimension->global_dimension.var != NULL)
+            id = dimension->global_dimension.var->id;
+        else if (dimension->global_dimension.attr != NULL)
+            id = dimension->global_dimension.attr->id;
+        else
+            id = 0; // just write this garbage
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->global_dimension.id, 2
-                     );
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
         size += 2;
     }
 
-    if (   dimension->local_offset.id == 0
-        && dimension->local_offset.time_index == adios_flag_no
+    if (    dimension->local_offset.var == NULL
+         && dimension->local_offset.attr == NULL
+         && dimension->local_offset.time_index == adios_flag_no
        )
     {
         var = 'n';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->local_offset.rank, 8
-                     );
+                ,&dimension->local_offset.rank, 8
+                );
         size += 8;
     }
     else
     {
+        if (dimension->local_offset.var != NULL)
+            id = dimension->local_offset.var->id;
+        else if (dimension->local_offset.attr != NULL)
+            id = dimension->local_offset.attr->id;
+        else
+            id = 0; // just write this garbage
         var = 'y';
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &var, 1);
         size += 1;
-        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&dimension->local_offset.id, 2
-                     );
+        buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &id, 2);
         size += 2;
     }
 
@@ -3931,8 +4367,8 @@ uint64_t adios_write_dimension_v1 (struct adios_file_struct * fd
 
 static
 uint16_t adios_write_dimensions_v1 (struct adios_file_struct * fd
-                                   ,struct adios_dimension_struct * dimensions
-                                   )
+        ,struct adios_dimension_struct * dimensions
+        )
 {
     uint16_t size = 0;
     uint16_t dimensions_size = calc_dimensions_size (dimensions);
@@ -3954,8 +4390,8 @@ uint16_t adios_write_dimensions_v1 (struct adios_file_struct * fd
 }
 
 uint16_t adios_write_var_characteristics_dims_v1 (struct adios_file_struct * fd
-                                                 ,struct adios_var_struct * v
-                                                 )
+        ,struct adios_var_struct * v
+        )
 {
     uint16_t total_size = 0;
     uint8_t dims_count = 0;
@@ -3975,17 +4411,17 @@ uint16_t adios_write_var_characteristics_dims_v1 (struct adios_file_struct * fd
 
         dims_count++;
 
-        dim = get_value_for_dim (fd, &d->dimension);
+        dim = adios_get_dim_value (&d->dimension);
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &dim, 8);
         total_size += 8;
         dims_length += 8;
 
-        dim = get_value_for_dim (fd, &d->global_dimension);
+        dim = adios_get_dim_value (&d->global_dimension);
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &dim, 8);
         total_size += 8;
         dims_length += 8;
 
-        dim = get_value_for_dim (fd, &d->local_offset);
+        dim = adios_get_dim_value (&d->local_offset);
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &dim, 8);
         total_size += 8;
         dims_length += 8;
@@ -4000,8 +4436,8 @@ uint16_t adios_write_var_characteristics_dims_v1 (struct adios_file_struct * fd
 }
 
 uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
-                                            ,struct adios_var_struct * v
-                                            )
+        ,struct adios_var_struct * v
+        )
 {
     uint8_t flag;
     uint64_t size;
@@ -4039,8 +4475,8 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
                 characteristic_set_count++;
                 flag = (uint8_t) adios_characteristic_dimensions;
                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                             ,&flag, 1
-                             );
+                        ,&flag, 1
+                        );
                 index_size += 1;
                 characteristic_set_length += 1;
 
@@ -4048,32 +4484,48 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
                 index_size += len;
                 characteristic_set_length += len;
 
-                // add the bitmap of characteristics
+                // NCSU ALACRITY-ADIOS - Write transform metadata
+                // Transform has to be written before stats, because the
+                // original datatype is needed to determine the amount of data
+                // that needs to be read. This is not a problem during writes,
+                // but during reads.
+                uint64_t char_write_length = 0;
+                uint8_t char_write_count = 0;
+
+                char_write_count = adios_transform_serialize_transform_var(
+                    v, &char_write_length, &fd->buffer, &fd->buffer_size, &fd->offset);
+
+                characteristic_set_count += char_write_count;
+                index_size += char_write_length;
+                characteristic_set_length += char_write_length;
+
+                // NCSU - add the bitmap of characteristics
                 characteristic_set_count++;
                 flag = (uint8_t) adios_characteristic_bitmap;
                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                             ,&flag, 1
-                             );
+                        ,&flag, 1
+                        );
                 index_size += 1;
                 characteristic_set_length += 1;
 
                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                             ,&v->bitmap, 4
-                             );
+                        ,&v->bitmap, 4
+                        );
                 index_size += 4;
                 characteristic_set_length += 4;
 
-                // add a stat value characteristic
+                // NCSU - add a stat value characteristic
                 characteristic_set_count++;
                 flag = (uint8_t) adios_characteristic_stat;
                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                             ,&flag, 1
-                             );
+                        ,&flag, 1
+                        );
                 index_size += 1;
                 characteristic_set_length += 1;
 
                 uint8_t j, c;
-                uint8_t count = adios_get_stat_set_count(v->type);
+                enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(v);
+                uint8_t count = adios_get_stat_set_count(original_var_type);
                 uint8_t idx = 0;
                 uint64_t characteristic_size;
 
@@ -4090,41 +4542,41 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
                                 int32_t num_breaks = hist->num_breaks;
                                 // Adding number of bins
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                             ,&hist->num_breaks, 4
-                                             );
+                                        ,&hist->num_breaks, 4
+                                        );
                                 characteristic_size = 4;
 
-                                 // Adding min bin
+                                // Adding min bin
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                            ,&hist->min, 8
-                                             );
+                                        ,&hist->min, 8
+                                        );
                                 characteristic_size += 8;
 
-                                 // Adding max bin
+                                // Adding max bin
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                             ,&hist->max, 8
-                                             );
+                                        ,&hist->max, 8
+                                        );
                                 characteristic_size += 8;
 
                                 // add a frequencies value characteristic
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                             ,hist->frequencies, 4 * (num_breaks + 1)
-                                             );
+                                        ,hist->frequencies, 4 * (num_breaks + 1)
+                                        );
                                 characteristic_size += 4 * (num_breaks + 1);
 
                                 // add the breaks value characteristic
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                             ,hist->breaks, 8 * num_breaks
-                                             );
+                                        ,hist->breaks, 8 * num_breaks
+                                        );
                                 characteristic_size += 8 * num_breaks;
                             }
                             else
                             {
-                                characteristic_size = adios_get_stat_size(v->stats[c][idx].data, v->type, j);
+                                characteristic_size = adios_get_stat_size(v->stats[c][idx].data, original_var_type, j);
 
                                 buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                                         ,v->stats[c][idx].data, characteristic_size
-                                         );
+                                        ,v->stats[c][idx].data, characteristic_size
+                                        );
                             }
 
                             index_size += characteristic_size;
@@ -4134,6 +4586,23 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
                         j ++;
                     }
                 }
+
+
+                /*
+                characteristic_set_count++;
+                flag = (uint8_t) adios_characteristic_transform_type;
+                buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
+                             ,&flag, 1
+                             );
+                index_size += 1;
+                characteristic_set_length += 1;
+
+                buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
+                             ,&v->transform_type, 1
+                             );
+                index_size += 1;
+                characteristic_set_length += 1;
+                */
             }
             break;
 
@@ -4142,22 +4611,27 @@ uint16_t adios_write_var_characteristics_v1 (struct adios_file_struct * fd
     }
     // characteristics count/size prefix
     buffer_write (&fd->buffer, &fd->buffer_size, &characteristic_set_start
-                 ,&characteristic_set_count, 1
-                 );
+            ,&characteristic_set_count, 1
+            );
     buffer_write (&fd->buffer, &fd->buffer_size, &characteristic_set_start
-                 ,&characteristic_set_length, 4
-                 );
+            ,&characteristic_set_length, 4
+            );
 
 
     return index_size;
 }
 
-int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd
-                                    ,struct adios_var_struct * var
-                                    )
+int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd, struct adios_var_struct * var)
 {
-    uint64_t total_size = adios_get_var_size (var, fd->group, var->data);
+    uint64_t total_size = 0;
     uint64_t size = 0;
+    enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_var(var);
+
+    if (var->transform_type != adios_transform_none) {
+        total_size = adios_transform_get_pre_transform_var_size (fd->group, var);
+    } else {
+        total_size = adios_get_var_size (var, fd->group, var->data);
+    }
 
     if (var->bitmap == 0)
         return 0;
@@ -4167,148 +4641,148 @@ int adios_generate_var_characteristics_v1 (struct adios_file_struct * fd
 
 #if 1
 #define HIST(a) \
-{ \
-int j = 0, low, high, mid; \
-low=0; \
-high=hist->num_breaks - 1; \
-if (hist->breaks[low] > a) \
-    hist->frequencies[0] += 1; \
-else if (a >= hist->breaks[high]) \
-    hist->frequencies[high + 1] += 1; \
-else if (hist->breaks[low] <= a && a < hist->breaks[high]) \
-{ \
-    while(high-low>=2) \
     { \
-        mid=(high+low)/2; \
-        if(a >= hist->breaks[mid]) \
-        { \
-            low=mid; \
-        } \
-        else \
+        int j = 0, low, high, mid; \
+        low=0; \
+        high=hist->num_breaks - 1; \
+        if (hist->breaks[low] > a) \
+        hist->frequencies[0] += 1; \
+        else if (a >= hist->breaks[high]) \
+        hist->frequencies[high + 1] += 1; \
+        else if (hist->breaks[low] <= a && a < hist->breaks[high]) \
         { \
-            high=mid; \
+            while(high-low>=2) \
+            { \
+                mid=(high+low)/2; \
+                if(a >= hist->breaks[mid]) \
+                { \
+                    low=mid; \
+                } \
+                else \
+                { \
+                    high=mid; \
+                } \
+            } \
+            hist->frequencies[low + 1] += 1; \
         } \
-    } \
-    hist->frequencies[low + 1] += 1; \
-} \
-}
+    }
 #endif
 
 #if 1
 #define ADIOS_STATISTICS(a,b) \
 {\
-a * data = (a *) var->data; \
-int i, j; \
-struct adios_stat_struct * stats = var->stats[0]; \
-a * min, * max; \
-double * sum, * sum_square; \
-uint32_t * cnt; \
-struct adios_hist_struct * hist = 0; \
-i = j = 0; \
-while (var->bitmap >> j) { \
-    if ((var->bitmap >> j) & 1)	{\
-        map [j] = i; \
-        if (j == adios_statistic_hist) \
+    a * data = (a *) var->data; \
+    int i, j; \
+    struct adios_stat_struct * stats = var->stats[0]; \
+    a * min, * max; \
+    double * sum, * sum_square; \
+    uint32_t * cnt; \
+    struct adios_hist_struct * hist = 0; \
+    i = j = 0; \
+    while (var->bitmap >> j) { \
+        if ((var->bitmap >> j) & 1)    {\
+            map [j] = i; \
+            if (j == adios_statistic_hist) \
             ;\
-        else \
-            stats[i].data = malloc(adios_get_stat_size(NULL, var->type, j)); \
-        i ++; \
+            else \
+            stats[i].data = malloc(adios_get_stat_size(NULL, original_var_type, j)); \
+            i ++; \
+        } \
+        j ++; \
     } \
-    j ++; \
-} \
-min = (a *) stats[map[adios_statistic_min]].data; \
-max = (a *) stats[map[adios_statistic_max]].data; \
-sum = (double *) stats[map[adios_statistic_sum]].data; \
-sum_square = (double *) stats[map[adios_statistic_sum_square]].data; \
-cnt = (uint32_t *) stats[map[adios_statistic_cnt]].data; \
-*cnt = 0;\
-if (map[adios_statistic_hist] != -1) {\
-    hist = (struct adios_hist_struct *) stats[map[adios_statistic_hist]].data; \
-    hist->frequencies = calloc ((hist->num_breaks + 1), adios_get_type_size(adios_unsigned_integer, "")); \
-} \
-int finite = 0; \
-size = 0; \
-while ((size * b) < total_size) \
-{ \
-    if (isnan (data [size]) || !isfinite (data [size])) {\
-        size ++; \
-        continue; \
-    }\
-    if (!finite) { \
-        *min = data [size]; \
-        *max = data [size]; \
-        *sum = data [size]; \
-        *sum_square = (data [size] * data [size]) ; \
-        *cnt = *cnt + 1; \
-        if (map[adios_statistic_hist] != -1) \
+        min = (a *) stats[map[adios_statistic_min]].data; \
+        max = (a *) stats[map[adios_statistic_max]].data; \
+        sum = (double *) stats[map[adios_statistic_sum]].data; \
+        sum_square = (double *) stats[map[adios_statistic_sum_square]].data; \
+        cnt = (uint32_t *) stats[map[adios_statistic_cnt]].data; \
+        *cnt = 0;\
+        if (map[adios_statistic_hist] != -1) {\
+            hist = (struct adios_hist_struct *) stats[map[adios_statistic_hist]].data; \
+            hist->frequencies = calloc ((hist->num_breaks + 1), adios_get_type_size(adios_unsigned_integer, "")); \
+        } \
+        int finite = 0; \
+        size = 0; \
+        while ((size * b) < total_size) \
+        { \
+            if (isnan (data [size]) || !isfinite (data [size])) {\
+                size ++; \
+                continue; \
+            }\
+            if (!finite) { \
+                *min = data [size]; \
+                *max = data [size]; \
+                *sum = data [size]; \
+                *sum_square = (data [size] * data [size]) ; \
+                *cnt = *cnt + 1; \
+                if (map[adios_statistic_hist] != -1) \
+                HIST(data [size]); \
+                finite = 1; \
+                size ++; \
+                continue; \
+            } \
+            if (data [size] < *min) \
+            *min = data [size]; \
+            if (data [size] > *max) \
+            *max = data [size]; \
+            *sum += data [size]; \
+            *sum_square += (data [size] * data [size]) ; \
+            *cnt = *cnt + 1; \
+            if (map[adios_statistic_hist] != -1) \
             HIST(data [size]); \
-        finite = 1; \
-        size ++; \
-        continue; \
-    } \
-    if (data [size] < *min) \
-        *min = data [size]; \
-    if (data [size] > *max) \
-        *max = data [size]; \
-    *sum += data [size]; \
-    *sum_square += (data [size] * data [size]) ; \
-    *cnt = *cnt + 1; \
-    if (map[adios_statistic_hist] != -1) \
-        HIST(data [size]); \
-       size++; \
-} \
-if (map[adios_statistic_finite] != -1) \
-    * ((uint8_t * ) stats[map[adios_statistic_finite]].data) = finite; \
-return 0; \
-}
+            size++; \
+        } \
+        if (map[adios_statistic_finite] != -1) \
+        * ((uint8_t * ) stats[map[adios_statistic_finite]].data) = finite; \
+        return 0; \
+    }
 #else
 #define MIN_MAX(a,b)\
-{\
-a * data = (a *) var->data; \
-var->min = malloc (b); \
-var->max = malloc (b); \
-a * min = (a *) var->min; \
-a * max = (a *) var->max; \
-*min = data [0]; \
-*max = data [0]; \
-return 0; \
-}
+    {\
+        a * data = (a *) var->data; \
+        var->min = malloc (b); \
+        var->max = malloc (b); \
+        a * min = (a *) var->min; \
+        a * max = (a *) var->max; \
+        *min = data [0]; \
+        *max = data [0]; \
+        return 0; \
+    }
 #endif
 
-    switch (var->type)
+    switch (original_var_type)
     {
         case adios_byte:
             ADIOS_STATISTICS(int8_t,1)
 
         case adios_unsigned_byte:
-            ADIOS_STATISTICS(uint8_t,1)
+                ADIOS_STATISTICS(uint8_t,1)
 
         case adios_short:
-            ADIOS_STATISTICS(int16_t,2)
+                    ADIOS_STATISTICS(int16_t,2)
 
         case adios_unsigned_short:
-            ADIOS_STATISTICS(uint16_t,2)
+                        ADIOS_STATISTICS(uint16_t,2)
 
         case adios_integer:
-            ADIOS_STATISTICS(int32_t,4)
+                            ADIOS_STATISTICS(int32_t,4)
 
         case adios_unsigned_integer:
-            ADIOS_STATISTICS(uint32_t,4)
+                                ADIOS_STATISTICS(uint32_t,4)
 
         case adios_long:
-            ADIOS_STATISTICS(int64_t,8)
+                                    ADIOS_STATISTICS(int64_t,8)
 
         case adios_unsigned_long:
-            ADIOS_STATISTICS(uint64_t,8)
+                                        ADIOS_STATISTICS(uint64_t,8)
 
         case adios_real:
-            ADIOS_STATISTICS(float,4)
+                                            ADIOS_STATISTICS(float,4)
 
         case adios_double:
-            ADIOS_STATISTICS(double,8)
+                                                ADIOS_STATISTICS(double,8)
 
         case adios_long_double:
-            ADIOS_STATISTICS(long double,16)
+                                                    ADIOS_STATISTICS(long double,16)
 
         case adios_complex:
         {
@@ -4318,11 +4792,11 @@ return 0; \
             i = j = 0;
 
             while (var->bitmap >> j) {
-                if ((var->bitmap >> j) & 1)	{
+                if ((var->bitmap >> j) & 1)    {
                     map [j] = i;
                     for (c = 0; c < count; c ++)
                         if (j != adios_statistic_hist)
-                            stats[c][i].data = malloc(adios_get_stat_size(NULL, var->type, j));
+                            stats[c][i].data = malloc(adios_get_stat_size(NULL, original_var_type, j));
                     i ++;
                 }
                 j ++;
@@ -4447,11 +4921,11 @@ return 0; \
             i = j = 0;
 
             while (var->bitmap >> j) {
-                if ((var->bitmap >> j) & 1)	{
+                if ((var->bitmap >> j) & 1)    {
                     map [j] = i;
                     for (c = 0; c < count; c ++)
                         if (j != adios_statistic_hist)
-                            stats[c][i].data = malloc(adios_get_stat_size(NULL, var->type, j));
+                            stats[c][i].data = malloc(adios_get_stat_size(NULL, original_var_type, j));
                     i ++;
                 }
                 j ++;
@@ -4568,7 +5042,6 @@ return 0; \
 
             return 0;
         }
-
         case adios_string:
         {
             var->stats = 0;
@@ -4588,8 +5061,8 @@ return 0; \
 
 // data is only there for sizing
 uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
-                                   ,struct adios_var_struct * v
-                                   )
+        ,struct adios_var_struct * v
+        )
 {
     uint64_t total_size = 0;
     uint8_t flag;
@@ -4627,7 +5100,8 @@ uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
 
     total_size += adios_write_dimensions_v1 (fd, v->dimensions);
 
-    adios_generate_var_characteristics_v1 (fd, v);
+    // Generate characteristics has been moved up, before transforms are applied
+    // adios_generate_var_characteristics_v1 (fd, v);
     total_size += adios_write_var_characteristics_v1 (fd, v);
 
     total_size += adios_get_var_size (v, fd->group, v->data); // payload
@@ -4643,8 +5117,8 @@ uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
 }
 
 int adios_write_var_payload_v1 (struct adios_file_struct * fd
-                               ,struct adios_var_struct * var
-                               )
+        ,struct adios_var_struct * var
+        )
 {
     uint64_t size;
 
@@ -4659,8 +5133,8 @@ int adios_write_var_payload_v1 (struct adios_file_struct * fd
 }
 
 int adios_write_attribute_v1 (struct adios_file_struct * fd
-                             ,struct adios_attribute_struct * a
-                             )
+        ,struct adios_attribute_struct * a
+        )
 {
     uint64_t start;        // save the start to write the size
     uint32_t size = 0;
@@ -4696,8 +5170,8 @@ int adios_write_attribute_v1 (struct adios_file_struct * fd
     if (a->var)
     {
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,&a->var->id, 2
-                     );
+                ,&a->var->id, 2
+                );
         size += 2;
     }
     else
@@ -4711,8 +5185,8 @@ int adios_write_attribute_v1 (struct adios_file_struct * fd
         size += 4;
 
         buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset
-                     ,a->value, t
-                     );
+                ,a->value, t
+                );
         size += t;
     }
 
@@ -4778,11 +5252,11 @@ int adios_write_close_attributes_v1 (struct adios_file_struct * fd)
 
 // *****************************************************************************
 
-static int adios_multiply_dimensions (uint64_t * size
-                                     ,struct adios_var_struct * var
-                                     ,enum ADIOS_DATATYPES type
-                                     ,void * data
-                                     )
+int adios_multiply_dimensions (uint64_t * size
+        ,struct adios_var_struct * var
+        ,enum ADIOS_DATATYPES type
+        ,void * data
+        )
 {
     switch (type)
     {
@@ -4819,132 +5293,117 @@ static int adios_multiply_dimensions (uint64_t * size
             return 1;
 
         default:
-            adios_error (err_invalid_var_as_dimension, 
-                         "Invalid datatype for array dimension on var %s: %s\n",
-                         var->name,
-                         adios_type_to_string_int (type));
+            adios_error (err_invalid_var_as_dimension,
+                    "Invalid datatype for array dimension on var %s: %s\n",
+                    var->name,
+                    adios_type_to_string_int (type));
             return 0;
     }
 }
 
-uint64_t adios_get_var_size (struct adios_var_struct * var
-                            ,struct adios_group_struct * group, void * data
-                            )
-{
-    uint64_t size = 0;
-
-    size = adios_get_type_size (var->type, data);
-
-    if (var->dimensions)
+// NCSU ALACRITY-ADIOS - generalizes the dimension multiplication in adios_get_var_size
+//                       to work on a dimension struct, rather than a var struct, so it
+//                       can be reused to compute the size from pre_transform_dimensions
+// TODO: Factor out "var", since needed because of adios_multiply_dimensions, which needs
+//       it only for debugging output.
+uint64_t adios_get_dimension_space_size (struct adios_var_struct *var
+                                        ,struct adios_dimension_struct * d
+                                        ,struct adios_group_struct * group) {
+    uint64_t size = 1;
+    while (d)
     {
-        struct adios_dimension_struct * d = var->dimensions;
-
-        while (d)
+        // calculate the size for this dimension element
+        if (d->dimension.var != 0)
         {
-            // calculate the size for this dimension element
-            if (d->dimension.id != 0)
+            struct adios_var_struct * dim_var = d->dimension.var;
+            if (!dim_var->data)
             {
-                struct adios_var_struct * dim_var = 0;
-
-                dim_var = adios_find_var_by_id (group->vars, d->dimension.id);
-
-                // first check to make sure all vars are provided
-                if (!dim_var)
+                adios_error (err_invalid_var_as_dimension,
+                        "adios_get_var_size: "
+                        "sizing of %s failed because "
+                        "dimension component %s was "
+                        "not provided\n",
+                        var->name, dim_var->name);
+                return 0;
+            }
+            else
+            {
+                if (!adios_multiply_dimensions (&size, var
+                            ,dim_var->type
+                            ,dim_var->data
+                            )
+                   )
                 {
-                    struct adios_attribute_struct * attr = 0;
-                    attr = adios_find_attribute_by_id (group->attributes
-                                                      ,d->dimension.id
-                                                      );
-                    if (attr)
-                    {
-                        if (attr->var)
-                        {
-                            if (!attr->var->data)
-                            {
-                                adios_error (err_invalid_var_as_dimension, 
-                                             "adios_get_var_size: "
-                                             "sizing of %s failed because "
-                                             "dimension component %s was "
-                                             "not provided\n",
-                                             var->name, attr->var->name);
-                                return 0;
-                            }
-                            else
-                            {
-                                if (!adios_multiply_dimensions (&size, var
-                                                               ,attr->var->type
-                                                               ,attr->var->data
-                                                               )
-                                   )
-                                {
-                                    return 0;
-                                }
-                            }
-                        }
-                        else
-                        {
-                            if (!adios_multiply_dimensions (&size, var
-                                                           ,attr->type
-                                                           ,attr->value
-                                                           )
-                               )
-                            {
-                                return 0;
-                            }
-                        }
-                    }
-                    else
-                    {
-                        adios_error (err_invalid_var_as_dimension, 
-                                "adios_get_var_size: "
-                                "sizing of %s failed because "
-                                "dimension component %s was "
-                                "not provided\n",
-                                var->name);
-                        return 0;
-                    }
+                    return 0;
+                }
+            }
+        }
+        else if (d->dimension.attr != NULL)
+        {
+            struct adios_attribute_struct * attr = d->dimension.attr;
+            if (attr->var)
+            {
+                if (!attr->var->data)
+                {
+                    adios_error (err_invalid_var_as_dimension,
+                            "adios_get_var_size: "
+                            "sizing of %s failed because "
+                            "dimension component %s was "
+                            "not provided\n",
+                            var->name, attr->var->name);
+                    return 0;
                 }
                 else
                 {
-                    if (!dim_var->data)
+                    if (!adios_multiply_dimensions (&size, var
+                                ,attr->var->type
+                                ,attr->var->data
+                                )
+                       )
                     {
-                        adios_error (err_invalid_var_as_dimension, 
-                                "adios_get_var_size: "
-                                "sizing of %s failed because "
-                                "dimension component %s was "
-                                "not provided\n",
-                                var->name, dim_var->name);
                         return 0;
                     }
-                    else
-                    {
-                        if (!adios_multiply_dimensions (&size, var
-                                                       ,dim_var->type
-                                                       ,dim_var->data
-                                                       )
-                           )
-                        {
-                            return 0;
-                        }
-                    }
                 }
             }
             else
             {
-                if (d->dimension.time_index == adios_flag_no)
+                if (!adios_multiply_dimensions (&size, var
+                            ,attr->type
+                            ,attr->value
+                            )
+                   )
                 {
-                    size *= d->dimension.rank;
+                    return 0;
                 }
-                // the time index doesn't take up space...
             }
-
-            d = d->next;
         }
+        else
+        {
+            if (d->dimension.time_index == adios_flag_no)
+            {
+                size *= d->dimension.rank;
+            }
+            // the time index doesn't take up space...
+        }
+
+        d = d->next;
     }
 
     return size;
 }
 
+// NCSU ALACRITY-ADIOS: Refactored to call the above dimension space compute code
+uint64_t adios_get_var_size (struct adios_var_struct * var
+        ,struct adios_group_struct * group, void * data
+        )
+{
+    uint64_t size = adios_get_type_size (var->type, data);
+    if (var->dimensions)
+        size *= adios_get_dimension_space_size(var, var->dimensions, group);
+
+    return size;
+}
+
 const char * adios_type_to_string_int (int type)
 {
     switch (type)
@@ -4968,11 +5427,11 @@ const char * adios_type_to_string_int (int type)
         case adios_double_complex:   return "double complex";
 
         default:
-        {
-            static char buf [50];
-            sprintf (buf, "(unknown: %d)", type);
-            return buf;
-        }
+                                     {
+                                         static char buf [50];
+                                         sprintf (buf, "(unknown: %d)", type);
+                                         return buf;
+                                     }
     }
 }
 
@@ -4988,7 +5447,7 @@ const char * adios_file_mode_to_string (int mode)
         case adios_mode_append: return "append";
 
         default:
-            sprintf (buf, "(unknown: %d)", mode);
+                                sprintf (buf, "(unknown: %d)", mode);
     }
 
     return buf;
@@ -5100,3 +5559,2145 @@ int queue_dequeue (Queue * queue, void ** data)
 {
     return list_rem_next (queue, NULL, data);
 }
+
+// Functions for non-XML API fo ADIOS Schema some of which are also called from functions in adios_internals_mxml.c
+int adios_define_schema_version(struct adios_group_struct * new_group, char * schema_version){
+    int64_t      p_new_group = (int64_t) new_group;
+
+    if (strcasecmp (schema_version,"")){
+        char * ver;// copy version
+        char * d;  // dot location
+        char * ptr_end;
+        ver = strdup (schema_version);
+        char * schema_version_major;
+        char * schema_version_minor;
+        char * schema_version_major_att_nam;
+        char * schema_version_minor_att_nam;
+        d = strtok (ver, ".");
+        int counter = 0; // counter
+        //int slength = 0;
+        while (d)
+        {
+            int slength = 0;
+            if (!strtod (d,&ptr_end)){
+                printf("Schema version invalid.\n");
+                counter = 0;
+                break;
+            }else{
+                slength = strlen("adios_schema/");
+                if (counter == 0 ){
+                    slength = slength + strlen("version_major") + 1;
+                    schema_version_major_att_nam = malloc (slength);
+                    strcpy(schema_version_major_att_nam,"adios_schema/version_major");
+                    //schema_version_major = strdup(d);
+                    adios_common_define_attribute (p_new_group,schema_version_major_att_nam,"/",adios_string,d,"");
+                }else if (counter == 1){
+                    slength = slength + strlen("version_minor") + 1;
+                    schema_version_minor_att_nam = malloc (slength);
+                    strcpy(schema_version_minor_att_nam,"adios_schema/version_minor");
+                    //schema_version_minor = strdup(d);
+                    adios_common_define_attribute (p_new_group,schema_version_minor_att_nam,"/",adios_string,d,"");
+                }
+            }
+            counter++;
+            d = strtok (NULL, ".");
+        }
+        if (counter == 0){
+            printf("Error: Could not detect valid schema version.\n");
+        }
+        free(ver);
+    }
+    return 0;
+}
+
+// Parse mesh time series (single file for multiple time steps or
+// multiple files for time steps, basename + timeformat + extension)
+int adios_define_mesh_timeSeriesFormat (const char * timeseries
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * format_att_nam = 0;     // extension format .xxxx att name
+    char * format_att_val = 0;     // extension format att value
+
+    // We expect a number from 1-10 (max 10?)
+    // The number indicates how to write the time steps. Ex: 4 ==>
+    // varname.XXXX.png where XXXX is the time step padded with 0s
+    // We do not fail if this is not given as variables all have nsteps
+    if (!timeseries){
+        return 1;
+    }
+
+    char * ptr_end;
+    d1 = strdup (timeseries);
+    if (strtod (d1, &ptr_end)){
+        adios_conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
+        adios_common_define_attribute (p_new_group,format_att_nam,"/",adios_double,d1,"");
+        free(format_att_val);    }
+        free (d1);
+        return 1;
+}
+
+// Parse mesh time scale (real time tracking, not integers)
+int adios_define_mesh_timeScale (const char * timescale
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;                      // comma location
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * gettscalefrom0 = 0;     // scale attribute xml value
+    char * gettscalefrom1 = 0;     // scale attribute xml value
+    char * gettscalefrom2 = 0;     // scale attribute xml value
+    char * time_var_att_nam = 0;   // scale attribute name for var or num
+    char * time_start_att_nam = 0; // scale attribute name for start
+    char * time_stride_att_nam = 0;// scale attribute name for stride
+    char * time_count_att_nam = 0; // scale attribute name for count
+    char * time_max_att_nam = 0;   // scale attribute name for max
+    char * time_min_att_nam = 0;   // scale attribute name for min
+    char * time_var_att_val = 0;   // scale attribute value for var or num
+    char * time_start_att_val = 0; // scale attribute value for start
+    char * time_stride_att_val = 0;// scale attribute value for stride
+    char * time_count_att_val = 0; // scale attribute value for count
+    char * time_max_att_val = 0;   // scale attribute value for max
+    char * time_min_att_val = 0;   // scale attribute value for min
+    int counter = 0;               // used to get type of time scale bounds
+
+    // We are going to allow
+    // 1. a number =  just the number of time scale default start = 0
+    // 2. start/stride/count 3 components
+    // 3. min/max range where this mesh is used
+    // 4. An ADIOS var = time could be a list of int stored by user
+    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
+
+    /* We do not fail if this is not given as variables all have nsteps
+       in ADIOS_inq_var = # of times the var was written
+       */
+    if (!timescale){
+        printf("time-scale attribute for mesh: %s not provided.\n", name);
+        return 1;
+    }
+
+    d1 = strdup (timescale);
+    char * ptr_end;
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        struct adios_var_struct * var = 0;
+        //if (adios_int_is_num (c))
+        if (!strtod (c,&ptr_end))
+        {
+            var =
+                adios_find_var_by_name (new_group, c);
+            if (!var)
+            {
+                log_warn ("config.xml: invalid variable %s\n"
+                        "for time scale of mesh: %s\n"
+                        ,c
+                        ,name
+                        );
+                free (d1);
+
+                return 0;
+
+            }else{
+                // Found variable ==> create a dims attribute for it.
+                if (counter == 0){
+                    gettscalefrom0 = 0;
+                    gettscalefrom0 = strdup(c);
+                }else if (counter == 1){
+                    gettscalefrom1 = 0;
+                    gettscalefrom1 = strdup(c);
+                }else if (counter == 2){
+                    gettscalefrom2 = 0;
+                    gettscalefrom2 = strdup(c);
+                }
+                counter++;
+            }
+        }
+        else
+        {
+            if (counter == 0){
+                gettscalefrom0 = 0;
+                gettscalefrom0 = strdup(c);
+            }else if (counter == 1){
+                gettscalefrom1 = 0;
+                gettscalefrom1 = strdup(c);
+            }else if (counter == 2){
+                gettscalefrom2 = 0;
+                gettscalefrom2 = strdup(c);
+            }
+            counter++;
+        }
+
+        c = strtok (NULL, ",");
+    }
+    if (counter == 3){
+        time_start_att_val = strdup(gettscalefrom0);
+        adios_conca_mesh_att_nam(&time_start_att_nam, name, "time-scale-start");
+        // if this is string
+        if (!strtod (time_start_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
+        time_stride_att_val = strdup(gettscalefrom1);
+        adios_conca_mesh_att_nam(&time_stride_att_nam, name, "time-scale-stride");
+        // if this is string
+        if (!strtod (time_stride_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
+        time_count_att_val = strdup(gettscalefrom2);
+        adios_conca_mesh_att_nam(&time_count_att_nam, name, "time-scale-count");
+        // if this is string
+        if (!strtod (time_count_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
+        free(time_start_att_val);
+        free(time_stride_att_val);
+        free(time_count_att_val);
+        free(gettscalefrom2);
+        free(gettscalefrom1);
+        free(gettscalefrom0);
+    }else if (counter == 2) {
+        adios_conca_mesh_att_nam(&time_min_att_nam, name, "time-scale-min");
+        // if this is string
+        if (!strtod (time_min_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
+        time_max_att_val = strdup(gettscalefrom1);
+        adios_conca_mesh_att_nam(&time_max_att_nam, name, "time-scale-max");
+        // if this is string
+        if (!strtod (time_max_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
+        free(time_min_att_val);
+        free(time_max_att_val);
+        free(gettscalefrom1);
+        free(gettscalefrom0);
+    } else if (counter == 1){
+        time_var_att_val = strdup(gettscalefrom0);
+        if (!strtod (time_var_att_val, &ptr_end)){
+            adios_conca_mesh_att_nam(&time_var_att_nam, name, "time-scale-var");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
+        }else{
+            adios_conca_mesh_att_nam(&time_var_att_nam, name, "time-scale-count");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
+        }
+        free(gettscalefrom0);
+        free(time_var_att_val);
+    }else{
+        printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
+        free(d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+// Parse mesh time steps (integers = number of times vars are written)
+int adios_define_mesh_timeSteps (const char * timesteps
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;                      // comma location
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * gettstepsfrom0 = 0;     // tstep attribute xml value
+    char * gettstepsfrom1 = 0;     // tstep attribute xml value
+    char * gettstepsfrom2 = 0;     // tstep attribute xml value
+    char * time_var_att_nam = 0;   // tstep attribute name for var or num
+    char * time_start_att_nam = 0; // tstep attribute name for start
+    char * time_stride_att_nam = 0;// tstep attribute name for stride
+    char * time_count_att_nam = 0; // tstep attribute name for count
+    char * time_max_att_nam = 0;   // tstep attribute name for max
+    char * time_min_att_nam = 0;   // tstep attribute name for min
+    char * time_var_att_val = 0;   // tstep attribute value for var or num
+    char * time_start_att_val = 0; // tstep attribute value for start
+    char * time_stride_att_val = 0;// tstep attribute value for stride
+    char * time_count_att_val = 0; // tstep attribute value for count
+    char * time_max_att_val = 0;   // tstep attribute value for max
+    char * time_min_att_val = 0;   // tstep attribute value for min
+    int counter = 0;               // used to get type of time steps bounds
+
+    // We are going to allow
+    // 1. a number =  just the number of time steps default start = 0
+    // 2. start/stride/count 3 components
+    // 3. min/max range where this mesh is used
+    // 4. An ADIOS var = time could be a list of int stored by user
+    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
+
+    /* We do not fail if this is not given as variables all have nsteps
+       in ADIOS_inq_var = # of times the var was written
+       */
+    if (!timesteps){
+        printf("time-steps for mesh %s attribute not provided.\n", name);
+        return 1;
+    }
+
+    d1 = strdup (timesteps);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        struct adios_var_struct * var = 0;
+        if (adios_int_is_var (c))
+        {
+            var =
+                adios_find_var_by_name (new_group, c);
+            if (!var)
+            {
+                log_warn ("config.xml: invalid variable %s\n"
+                        "for dimensions of mesh: %s\n"
+                        ,c
+                        ,name
+                        );
+                free (d1);
+
+                return 0;
+
+            }else{
+                // Found variable ==> create a dims attribute for it.
+                if (counter == 0){
+                    gettstepsfrom0 = 0;
+                    gettstepsfrom0 = strdup(c);
+                }else if (counter == 1){
+                    gettstepsfrom1 = 0;
+                    gettstepsfrom1 = strdup(c);
+                }else if (counter == 2){
+                    gettstepsfrom2 = 0;
+                    gettstepsfrom2 = strdup(c);
+                }
+                counter++;
+            }
+        }
+        else
+        {
+            if (counter == 0){
+                gettstepsfrom0 = 0;
+                gettstepsfrom0 = strdup(c);
+            }else if (counter == 1){
+                gettstepsfrom1 = 0;
+                gettstepsfrom1 = strdup(c);
+            }else if (counter == 2){
+                gettstepsfrom2 = 0;
+                gettstepsfrom2 = strdup(c);
+            }
+            counter++;
+        }
+
+        c = strtok (NULL, ",");
+    }
+
+    if (counter == 3){
+        time_start_att_val = strdup(gettstepsfrom0);
+        adios_conca_mesh_att_nam(&time_start_att_nam, name, "time-steps-start");
+        // if this is string
+        if (adios_int_is_var (time_start_att_val))
+            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
+        time_stride_att_val = strdup(gettstepsfrom1);
+        adios_conca_mesh_att_nam(&time_stride_att_nam, name, "time-steps-stride");
+        // if this is string
+        if (adios_int_is_var (time_stride_att_val))
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
+        time_count_att_val = strdup(gettstepsfrom2);
+        adios_conca_mesh_att_nam(&time_count_att_nam, name, "time-steps-count");
+        // if this is string
+        if (adios_int_is_var (time_count_att_val))
+            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
+        free(time_start_att_val);
+        free(time_stride_att_val);
+        free(time_count_att_val);
+        free(gettstepsfrom2);
+        free(gettstepsfrom1);
+        free(gettstepsfrom0);
+    }else if (counter == 2) {
+        time_min_att_val = strdup(gettstepsfrom0);
+        adios_conca_mesh_att_nam(&time_min_att_nam, name, "time-steps-min");
+        // if this is string
+        if (adios_int_is_var (time_min_att_val))
+            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
+        time_max_att_val = strdup(gettstepsfrom1);
+        adios_conca_mesh_att_nam(&time_max_att_nam, name, "time-steps-max");
+        // if this is string
+        if (adios_int_is_var (time_max_att_val))
+            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
+        free(time_min_att_val);
+        free(time_max_att_val);
+        free(gettstepsfrom1);
+        free(gettstepsfrom0);
+    } else if (counter == 1){
+        time_var_att_val = strdup(gettstepsfrom0);
+        if (adios_int_is_var (time_var_att_val)){
+            adios_conca_mesh_att_nam(&time_var_att_nam, name, "time-steps-var");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
+        }else{
+            adios_conca_mesh_att_nam(&time_var_att_nam, name, "time-steps-count");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
+        }
+        free(time_var_att_val);
+        free(gettstepsfrom0);
+    }else{
+        printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
+        free(d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+// defining a uniform mesh
+int adios_define_mesh_uniform (char * dimensions, char * origin, char * spacing, char * maximum, struct adios_group_struct * new_group ,const char * name)
+{
+    if (dimensions)
+    {
+        if (!adios_define_mesh_uniform_dimensions (dimensions, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "dimensions required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+
+    if (origin)
+    {
+        if (!adios_define_mesh_uniform_origins (origin, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "origin required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    if (spacing)
+    {
+        if (!adios_define_mesh_uniform_spacings (spacing, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "spacing required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+
+    if (maximum)
+    {
+        if (!adios_define_mesh_uniform_maximums (maximum, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "max required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+
+    return 1;
+}
+
+int adios_define_mesh_rectilinear (char * dimensions, char * coordinates
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    if (dimensions)
+    {
+        if (!adios_define_mesh_rectilinear_dimensions (dimensions, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "dimensions required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+
+    // Determine if it is the multi-var or single-var case
+    if (coordinates)
+    {
+        char *p;
+        // If we do not find "," in the coordinates
+        if (!(p = strstr(coordinates, ","))){
+            if (!adios_define_mesh_rectilinear_coordinatesSingleVar (coordinates, new_group, name))
+                return 0;
+        }else{
+            if (!adios_define_mesh_rectilinear_coordinatesMultiVar (coordinates, new_group, name))
+                return 0;
+        }
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "coordinates required for rectilinear mesh: (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    return 1;
+}
+
+int adios_define_mesh_structured(char * dimensions, char * nspace
+        , char * points
+        ,struct adios_group_struct * new_group
+        , char * name){
+    if (dimensions){
+        if (!adios_define_mesh_structured_dimensions (dimensions, new_group, name))
+            return 0;
+    }else{
+        log_warn ("config.xml: value attribute on "
+                "dimensions required (%s)\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    if (nspace){
+        if (!adios_define_mesh_structured_nspace (nspace, new_group, name))
+            return 0;
+    }
+    if (points){
+        char *p;
+        // If we do find "," in points (single-var case)
+        if (!(p = strstr(points, ","))){
+            if (!adios_define_mesh_structured_pointsSingleVar (points, new_group, name))
+                return 0;
+        }else{
+            if (!adios_define_mesh_structured_pointsMultiVar (points, new_group, name))
+                return 0;
+        }
+    }else{
+        log_warn ("config.xml: value on"
+                "points required for mesh type=structured (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured(char *nspace
+        , char *npoints, char *points
+        , char * data, char * count, char * type
+        , struct adios_group_struct * new_group
+        , const char * name)
+{
+    int saw_cell_set = 0;
+    if (nspace)
+    {
+        if (!adios_define_mesh_unstructured_nspace (nspace, new_group, name))
+            return 0;
+    }
+    if (npoints)
+    {
+        if (!adios_define_mesh_unstructured_npoints (npoints, new_group, name))
+            return 0;
+
+    }
+    if (points){
+        char *p;
+        // If we do find "," in points (single-var case)
+        if (!(p = strstr(points, ","))){
+            if (!adios_define_mesh_unstructured_pointsSingleVar (points, new_group, name))
+                return 0;
+        }else{
+            if (!adios_define_mesh_unstructured_pointsMultiVar (points, new_group, name))
+                return 0;
+        }
+    }else{
+        log_warn ("config.xml: value on"
+                "points required for mesh type=structured (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    if (!data){
+        log_warn ("config.xml: data attribute on "
+                "uniform-cells required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    if (!count)
+    {
+        log_warn ("config.xml: count attribute on "
+                "uniform-cells required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    if (!type)
+    {
+        log_warn ("config.xml: type attribute on "
+                "uniform-cells required (%s)\n"
+                ,name
+                );
+        return 0;
+    }
+    char *pt;
+    // If we do find "," in data (uniform cell case)
+    if (!(pt = strstr(data, ","))){
+        if (pt = strstr(count,",")){
+            log_warn ("count value on uniform-cells (check data value)"
+                    " should not contain ',' (%s)\n",name);
+            return 0;
+        }
+        if (pt = strstr(type,",")){
+            log_warn ("type value on uniform-cells (check data value)"
+                    " should not contain ',' (%s)\n", name);
+            return 0;
+        }
+        if (!adios_define_mesh_unstructured_uniformCells (count, data, type
+                    , new_group
+                    ,name
+                    )
+           )
+            return 0;
+        // Mixed cells calse
+    }else{
+        if (!(pt = strstr(count,","))){
+            log_warn ("count value on mixed-cells (check data value)"
+                    " should contain ',' (%s)\n",name);
+            return 0;
+        }
+        if (!(pt = strstr(type,","))){
+            log_warn ("type value on mixed-cells (check data value)"
+                    " should contain ',' (%s)\n", name);
+            return 0;
+        }
+        if (!adios_define_mesh_unstructured_mixedCells (count, data, type
+                    , new_group, name))
+            return 0;
+    }
+
+    return 1;
+}
+
+// Compose schema attributes for mesh and var
+// concat numbered mesh attribute name strings
+void conca_mesh_numb_att_nam(char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]) {
+    *returnstr = malloc (strlen("adios_schema/") + strlen(meshname) + strlen(att_nam) + strlen(counterstr) + 3);
+    strcpy(*returnstr,"adios_schema");
+    strcat(*returnstr,"/");
+    strcat(*returnstr,meshname);
+    strcat(*returnstr,"/");
+    strcat(*returnstr,att_nam);
+    strcat(*returnstr,counterstr);
+}
+
+// concat mesh attribute name strings
+void adios_conca_mesh_att_nam(char ** returnstr, const char * meshname, char * att_nam) {
+    int slength = 0;
+    slength = strlen("adios_schema/");
+    slength = slength + strlen(meshname);
+    slength = slength + 1;
+    slength = slength + 1;
+    slength = slength + strlen(att_nam);
+
+    *returnstr = malloc (slength);
+
+    strcpy(*returnstr,"adios_schema/");
+    strcat(*returnstr,meshname);
+    strcat(*returnstr,"/");
+    strcat(*returnstr,att_nam);
+}
+
+// concat var attribute name strings
+void conca_var_att_nam(char ** returnstr, const char * varname, char * att_nam) {
+    int slength = 0;
+    slength = strlen("adios_schema/");
+    slength = slength + strlen(varname);
+    slength = slength + 1;
+    slength = slength + 1;
+    slength = slength + strlen(att_nam);
+
+    *returnstr = malloc (slength);
+
+    strcpy(*returnstr,varname);
+    strcat(*returnstr,"/adios_schema/");
+    strcat(*returnstr,att_nam);
+}
+
+// At this point mesh structures are not really being used,
+// but this function still makes sure that we don't add a
+// mesh twice (same name)
+// Append a mesh to a group
+enum ADIOS_FLAG adios_append_mesh (struct adios_mesh_struct ** root
+        ,struct adios_mesh_struct * mesh
+        ,uint16_t id
+        )
+{
+    while (root)
+    {
+        if (*root && !strcasecmp ((*root)->name, mesh->name))
+        {
+            return adios_flag_no;
+        }
+        if (!*root)
+        {
+            *root = mesh;
+            root = 0;
+        }
+        else
+        {
+            root = &(*root)->next;
+        }
+    }
+
+    return adios_flag_yes;
+}
+
+// Define a new mesh
+struct adios_mesh_struct * adios_common_define_mesh (
+        int64_t group_id, const char * name,
+        enum ADIOS_FLAG time_varying,
+        enum ADIOS_MESH_TYPE type)
+{
+    struct adios_group_struct * t = (struct adios_group_struct *) group_id;
+    struct adios_mesh_struct * m = (struct adios_mesh_struct *)
+        malloc (sizeof (struct adios_mesh_struct));
+    enum ADIOS_FLAG flag;
+
+    m->name = strdup (name);
+    m->type = type;
+    m->time_varying = time_varying;
+    m->next = 0;
+
+    flag = adios_append_mesh (&t->meshs, m, t->mesh_count);
+    if (flag == adios_flag_no)
+    {
+        log_warn ("config.xml: unique mesh names required; "
+                "second mesh: %s will be ignored.\n"
+                ,name
+                );
+        free(m);
+        m = 0;
+    } else {
+        t->mesh_count++;
+    }
+
+    return m;
+}
+
+// Define time steps, scale and formatting
+// Parse var time steps (integers = number of times vars are written)
+int adios_define_var_timesteps (const char * timesteps
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        ,const char * path
+        )
+{
+    char * c;                      // comma location
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * gettstepsfrom0 = 0;     // tstep attribute xml value
+    char * gettstepsfrom1 = 0;     // tstep attribute xml value
+    char * gettstepsfrom2 = 0;     // tstep attribute xml value
+    char * time_var_att_nam = 0;   // tstep attribute name for var or num
+    char * time_start_att_nam = 0; // tstep attribute name for start
+    char * time_stride_att_nam = 0;// tstep attribute name for stride
+    char * time_count_att_nam = 0; // tstep attribute name for count
+    char * time_max_att_nam = 0;   // tstep attribute name for max
+    char * time_min_att_nam = 0;   // tstep attribute name for min
+    char * time_var_att_val = 0;   // tstep attribute value for var or num
+    char * time_start_att_val = 0; // tstep attribute value for start
+    char * time_stride_att_val = 0;// tstep attribute value for stride
+    char * time_count_att_val = 0; // tstep attribute value for count
+    char * time_max_att_val = 0;   // tstep attribute value for max
+    char * time_min_att_val = 0;   // tstep attribute value for min
+    int counter = 0;               // used to get type of time steps bounds
+
+    // We are going to allow
+    // 1. a number =  just the number - a multiple of mesh time step
+    // 2. start/stride/count 3 components - indices of the mesh time steps
+    // 3. min/max range of the mesh time step
+    // 4. An ADIOS var = time could be a list of int stored by user
+    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
+
+    /* We do not fail if this is not given as variables all have nsteps
+       in ADIOS_inq_var = # of times the var was written
+       */
+    if (!timesteps){
+        return 1;
+    }
+
+    d1 = strdup (timesteps);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        struct adios_var_struct * var = 0;
+        if (adios_int_is_var (c))
+        {
+            var =
+                adios_find_var_by_name (new_group, c);
+            if (!var)
+            {
+                log_warn ("config.xml: invalid variable %s\n"
+                        "for time-steps of var: %s\n"
+                        ,c
+                        ,name
+                        );
+                free (d1);
+
+                return 0;
+
+            }else{
+                // Found variable ==> create a dims attribute for it.
+                if (counter == 0){
+                    gettstepsfrom0 = 0;
+                    gettstepsfrom0 = strdup(c);
+                }else if (counter == 1){
+                    gettstepsfrom1 = 0;
+                    gettstepsfrom1 = strdup(c);
+                }else if (counter == 2){
+                    gettstepsfrom2 = 0;
+                    gettstepsfrom2 = strdup(c);
+                }
+                counter++;
+            }
+        }
+        else
+        {
+            if (counter == 0){
+                gettstepsfrom0 = 0;
+                gettstepsfrom0 = strdup(c);
+            }else if (counter == 1){
+                gettstepsfrom1 = 0;
+                gettstepsfrom1 = strdup(c);
+            }else if (counter == 2){
+                gettstepsfrom2 = 0;
+                gettstepsfrom2 = strdup(c);
+            }
+            counter++;
+        }
+
+        c = strtok (NULL, ",");
+    }
+
+    if (counter == 3){
+        time_start_att_val = strdup(gettstepsfrom0);
+        conca_var_att_nam(&time_start_att_nam, name, "time-steps-start");
+        // if this is string
+        if (adios_int_is_var (time_start_att_val))
+            adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_string,time_start_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_double,time_start_att_val,"");
+        time_stride_att_val = strdup(gettstepsfrom1);
+        conca_var_att_nam(&time_stride_att_nam, name, "time-steps-stride");
+        // if this is string
+        if (adios_int_is_var (time_stride_att_val))
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_string,time_stride_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_double,time_stride_att_val,"");
+        time_count_att_val = strdup(gettstepsfrom2);
+        conca_var_att_nam(&time_count_att_nam, name, "time-steps-count");
+        // if this is string
+        if (adios_int_is_var (time_count_att_val))
+            adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_string,time_count_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_double,time_count_att_val,"");
+        free(time_start_att_val);
+        free(time_stride_att_val);
+        free(time_count_att_val);
+        free(gettstepsfrom2);
+        free(gettstepsfrom1);
+        free(gettstepsfrom0);
+    }else if (counter == 2) {
+        time_min_att_val = strdup(gettstepsfrom0);
+        conca_var_att_nam(&time_min_att_nam, name, "time-steps-min");
+        // if this is string
+        if (adios_int_is_var (time_min_att_val))
+            adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_string,time_min_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_double,time_min_att_val,"");
+        time_max_att_val = strdup(gettstepsfrom1);
+        conca_var_att_nam(&time_max_att_nam, name, "time-steps-max");
+        // if this is string
+        if (adios_int_is_var (time_max_att_val))
+            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_max_att_nam,path,adios_double,time_max_att_val,"");
+        free(time_min_att_val);
+        free(time_max_att_val);
+        free(gettstepsfrom1);
+        free(gettstepsfrom0);
+    } else if (counter == 1){
+        time_var_att_val = strdup(gettstepsfrom0);
+        if (adios_int_is_var (time_var_att_val)){
+            conca_var_att_nam(&time_var_att_nam, name, "time-steps-var");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,path,adios_string,time_var_att_val,"");
+        }else{
+            conca_var_att_nam(&time_var_att_nam, name, "time-steps-count");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,path,adios_double,time_var_att_val,"");
+        }
+        free(time_var_att_val);
+        free(gettstepsfrom0);
+    }else{
+        printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
+        free(d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+// Parse var time series format (real time tracking, not integers)
+int adios_define_var_timeseriesformat (const char * timeseries
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        ,const char * path
+        )
+{
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * format_att_nam = 0;     // extension format .xxxx att name
+    char * format_att_val = 0;     // extension format att value
+
+    // We expect a number from 1-10 (max 10?)
+    // The number indicates how to write the time steps. Ex: 4 ==>
+    // varname.XXXX.png where XXXX is the time step padded with 0s
+    // We do not fail if this is not given as variables all have nsteps
+    if (!timeseries){
+        return 1;
+    }
+
+    char * ptr_end;
+    d1 = strdup (timeseries);
+    if (strtod(d1, &ptr_end)){
+        adios_conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
+        adios_common_define_attribute (p_new_group,format_att_nam,path,adios_string,d1,"");
+        free(format_att_val);
+    }
+    free (d1);
+    return 1;
+}
+
+// Parse var time scale (real time tracking, not integers)
+int adios_define_var_timescale (const char * timescale
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        ,const char * path
+        )
+{
+    char * c;                      // comma location
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * gettscalefrom0 = 0;     // scale attribute xml value
+    char * gettscalefrom1 = 0;     // scale attribute xml value
+    char * gettscalefrom2 = 0;     // scale attribute xml value
+    char * time_var_att_nam = 0;   // scale attribute name for var or num
+    char * time_start_att_nam = 0; // scale attribute name for start
+    char * time_stride_att_nam = 0;// scale attribute name for stride
+    char * time_count_att_nam = 0; // scale attribute name for count
+    char * time_max_att_nam = 0;   // scale attribute name for max
+    char * time_min_att_nam = 0;   // scale attribute name for min
+    char * time_var_att_val = 0;   // scale attribute value for var or num
+    char * time_start_att_val = 0; // scale attribute value for start
+    char * time_stride_att_val = 0;// scale attribute value for stride
+    char * time_count_att_val = 0; // scale attribute value for count
+    char * time_max_att_val = 0;   // scale attribute value for max
+    char * time_min_att_val = 0;   // scale attribute value for min
+    int counter = 0;               // used to get type of time scale bounds
+
+    // We are going to allow
+    // 1. a number =  just the real time scale - note: not the number of time steps (this is already in adios inq var) but the correpdance between timesteps and real time scale 1 step = 15ms for example
+    // 2. start/stride/count 3 components - multiple of the mesh time steps
+    // 3. min/max range where this var is used - a range of the mesh time steps
+    // 4. An ADIOS var = time could be a list of int stored by user
+    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
+
+
+    /* We do not fail if this is not given as variables all have nsteps
+       in ADIOS_inq_var = # of times the var was written
+       */
+    if (!timescale){
+        return 1;
+    }
+
+    d1 = strdup (timescale);
+    char * ptr_end;
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        struct adios_var_struct * var = 0;
+        //if (adios_int_is_num (c))
+        if (!strtod (c,&ptr_end))
+        {
+            var =
+                adios_find_var_by_name (new_group, c);
+            if (!var)
+            {
+                log_warn ("config.xml: invalid variable %s\n"
+                        "for attribute of var: %s\n"
+                        ,c
+                        ,name
+                        );
+                free (d1);
+
+                return 0;
+
+            }else{
+                // Found variable ==> create a dims attribute for it.
+                if (counter == 0){
+                    gettscalefrom0 = 0;
+                    gettscalefrom0 = strdup(c);
+                }else if (counter == 1){
+                    gettscalefrom1 = 0;
+                    gettscalefrom1 = strdup(c);
+                }else if (counter == 2){
+                    gettscalefrom2 = 0;
+                    gettscalefrom2 = strdup(c);
+                }
+                counter++;
+            }
+        }
+        else
+        {
+            if (counter == 0){
+                gettscalefrom0 = 0;
+                gettscalefrom0 = strdup(c);
+            }else if (counter == 1){
+                gettscalefrom1 = 0;
+                gettscalefrom1 = strdup(c);
+            }else if (counter == 2){
+                gettscalefrom2 = 0;
+                gettscalefrom2 = strdup(c);
+            }
+            counter++;
+        }
+
+        c = strtok (NULL, ",");
+    }
+
+    if (counter == 3){
+        time_start_att_val = strdup(gettscalefrom0);
+        conca_var_att_nam(&time_start_att_nam, name, "time-scale-start");
+        // if this is string
+        if (!strtod (time_start_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_string,time_start_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_start_att_nam,path,adios_double,time_start_att_val,"");
+        time_stride_att_val = strdup(gettscalefrom1);
+        conca_var_att_nam(&time_stride_att_nam, name, "time-scale-stride");
+        // if this is string
+        if (!strtod (time_stride_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_string,time_stride_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_stride_att_nam,path,adios_double,time_stride_att_val,"");
+        time_count_att_val = strdup(gettscalefrom2);
+        conca_var_att_nam(&time_count_att_nam, name, "time-scale-count");
+        // if this is string
+        if (!strtod (time_count_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_string,time_count_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_count_att_nam,path,adios_double,time_count_att_val,"");
+        free(time_start_att_val);
+        free(time_stride_att_val);
+        free(time_count_att_val);
+        free(gettscalefrom2);
+        free(gettscalefrom1);
+        free(gettscalefrom0);
+    }else if (counter == 2) {
+        time_min_att_val = strdup(gettscalefrom0);
+        conca_var_att_nam(&time_min_att_nam, name, "time-scale-min");
+        // if this is string
+        if (!strtod (time_min_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_string,time_min_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_min_att_nam,path,adios_double,time_min_att_val,"");
+        time_max_att_val = strdup(gettscalefrom1);
+        conca_var_att_nam(&time_max_att_nam, name, "time-scale-max");
+        // if this is string
+        if (!strtod (time_max_att_val, &ptr_end))
+            adios_common_define_attribute (p_new_group,time_max_att_nam,path,adios_string,time_max_att_val,"");
+        else
+            adios_common_define_attribute (p_new_group,time_max_att_nam,path,adios_double,time_max_att_val,"");
+        free(time_min_att_val);
+        free(time_max_att_val);
+        free(gettscalefrom1);
+        free(gettscalefrom0);
+    } else if (counter == 1){
+        time_var_att_val = strdup(gettscalefrom0);
+        if (!strtod (time_var_att_val, &ptr_end)){
+            conca_var_att_nam(&time_var_att_nam, name, "time-scale-var");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,path,adios_string,time_var_att_val,"");
+        }else{
+            conca_var_att_nam(&time_var_att_nam, name, "time-scale-count");
+            adios_common_define_attribute (p_new_group,time_var_att_nam,path,adios_double,time_var_att_val,"");
+        }
+        free(gettscalefrom0);
+        free(time_var_att_val);
+    }else{
+        printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
+        free(d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+// Parse var hyper slab: lines or planes from a higher dimension mesh
+int adios_define_var_hyperslab ( const char * hyperslab,
+        struct adios_group_struct * new_group,
+        const char * name,
+        const char * path)
+{
+    char * c;                      // comma location
+    char * d1;                     // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * gethslabfrom0 = 0;       // hslab attribute xml value
+    char * gethslabfrom1 = 0;       // hslab attribute xml value
+    char * gethslabfrom2 = 0;       // hslab attribute xml value
+    char * hslab_var_att_nam = 0;   // hslab attribute name for var or num
+    char * hslab_start_att_nam = 0; // hslab attribute name for start
+    char * hslab_stride_att_nam = 0;// hslab attribute name for stride
+    char * hslab_count_att_nam = 0; // hslab attribute name for count
+    char * hslab_max_att_nam = 0;   // hslab attribute name for max
+    char * hslab_min_att_nam = 0;   // hslab attribute name for min
+    char * hslab_single_att_nam = 0;// hslab attribute name for min
+    char * hslab_var_att_val = 0;   // hslab attribute value for var or num
+    char * hslab_start_att_val = 0; // hslab attribute value for start
+    char * hslab_stride_att_val = 0;// hslab attribute value for stride
+    char * hslab_count_att_val = 0; // hslab attribute value for count
+    char * hslab_max_att_val = 0;   // hslab attribute value for max
+    char * hslab_min_att_val = 0;   // hslab attribute value for min
+    char * hslab_sngl_att_val = 0;  // hslab attribute value for single value  of an array ("25, 4, 50")
+                                    // use the ":" symble to indicate that there is an extra dimension to process (process all lines, all planes etc.)
+    int counter = 0;                // used to get type of time hslab bounds
+    // We are going to allow
+    // 1. start/stride/count 3 components - indices of the mesh dimensions
+    // 2. min/max range of the mesh dimensions
+    // 3. single value
+    //    single value of ":" means there is an extra dimension to process
+    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
+
+    /* We do not fail if this is not given as variables all have nsteps
+       in ADIOS_inq_var = # of times the var was written
+       */
+    if (!hyperslab){
+        return 1;
+    }
+
+    d1 = strdup (hyperslab);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        if (counter == 0){
+            gethslabfrom0 = 0;
+            gethslabfrom0 = strdup(c);
+        }else if (counter == 1){
+            gethslabfrom1 = 0;
+            gethslabfrom1 = strdup(c);
+        }else if (counter == 2){
+            gethslabfrom2 = 0;
+            gethslabfrom2 = strdup(c);
+        }
+        counter++;
+        c = strtok (NULL, ",");
+    }
+    // TODO: these should be ints only, no decimal for start, stride count, not any number should work
+    if (counter == 3){
+        hslab_start_att_val = strdup(gethslabfrom0);
+        conca_var_att_nam(&hslab_start_att_nam, name, "start");
+        adios_common_define_attribute (p_new_group,hslab_start_att_nam,path,adios_string,hslab_start_att_val,"");
+        hslab_stride_att_val = strdup(gethslabfrom1);
+        conca_var_att_nam(&hslab_stride_att_nam, name, "stride");
+        adios_common_define_attribute (p_new_group,hslab_stride_att_nam,path,adios_string,hslab_stride_att_val,"");
+        hslab_count_att_val = strdup(gethslabfrom2);
+        conca_var_att_nam(&hslab_count_att_nam, name, "count");
+        adios_common_define_attribute (p_new_group,hslab_count_att_nam,path,adios_string,hslab_count_att_val,"");
+        free(hslab_start_att_val);
+        free(hslab_stride_att_val);
+        free(hslab_count_att_val);
+        free(gethslabfrom2);
+        free(gethslabfrom1);
+        free(gethslabfrom0);
+    }else if (counter == 2) {
+        hslab_min_att_val = strdup(gethslabfrom0);
+        conca_var_att_nam(&hslab_min_att_nam, name, "min");
+        adios_common_define_attribute (p_new_group,hslab_min_att_nam,path,adios_string,hslab_min_att_val,"");
+        hslab_max_att_val = strdup(gethslabfrom1);
+        conca_var_att_nam(&hslab_max_att_nam, name, "max");
+        adios_common_define_attribute (p_new_group,hslab_max_att_nam,path,adios_string,hslab_max_att_val,"");
+        free(hslab_min_att_val);
+        free(hslab_max_att_val);
+        free(gethslabfrom1);
+        free(gethslabfrom0);
+    } else if (counter == 1){
+        hslab_sngl_att_val = strdup(gethslabfrom0);
+        conca_var_att_nam(&hslab_single_att_nam, name, "singleton");
+        adios_common_define_attribute (p_new_group,hslab_single_att_nam,path,adios_string,hslab_sngl_att_val,"");
+        free(hslab_sngl_att_val);
+        free(gethslabfrom0);
+    }else{
+        printf("Error: hyperslab format not recognized.\nPlease check documentation for hyperslab formatting.\n");
+        free(d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+
+}
+
+int adios_define_mesh_uniform_dimensions (const char * dimensions
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * dim_att_nam = 0; // dimensions attribute name
+    char * getdimsfrom = 0; // dimensions attribute that is a var
+    int counter = 0;        // used to create dimX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
+
+    if (!dimensions)
+    {
+        log_warn ("config.xml: dimensions value required for"
+                "uniform mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (dimensions);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        dim_att_nam = 0;
+        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
+        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
+        free (dim_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * dims = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    dims = 0;
+    adios_conca_mesh_att_nam(&dims, name, "dimensions-num");
+
+    adios_common_define_attribute (p_new_group,dims,"/",adios_integer,counterstr,"");
+
+    free (dims);
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_uniform_maximums (const char * maximum
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * max_att_nam = 0; // maxima attribute name
+    char * getmaxafrom = 0; // maxima attribute name that is a var
+    int counter = 0;        // used to create maxX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create maxX attributes
+
+    if (!maximum)
+    {
+        log_warn ("config.xml: maximum value required"
+                "for uniform mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (maximum);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        max_att_nam = 0;
+        conca_mesh_numb_att_nam(&max_att_nam, name, "maximums", counterstr);
+        adios_common_define_attribute (p_new_group,max_att_nam,"/",adios_string,c,"");
+        free (max_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * maxa = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    maxa = 0;
+    adios_conca_mesh_att_nam(&maxa, name, "maximums-num");
+    adios_common_define_attribute (p_new_group,maxa,"/",adios_integer,counterstr,"");
+    free (maxa);
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_uniform_origins (const char * origin
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_item_list_struct * item = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * org_att_nam = 0; // origins attribute name
+    char * getorgsfrom = 0; // origins attribute name that is a var
+    int counter = 0;        // used to create orgX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create orgX attributes
+
+    if (!origin)
+    {
+        log_warn ("config.xml: origin value required "
+                "for uniform mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (origin);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        org_att_nam = 0;
+        conca_mesh_numb_att_nam(&org_att_nam, name, "origins", counterstr);
+        adios_common_define_attribute (p_new_group,org_att_nam,"/",adios_string,c,"");
+        free (org_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * orgs = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    orgs = 0;
+    adios_conca_mesh_att_nam(&orgs, name, "origins-num");
+    adios_common_define_attribute (p_new_group,orgs,"/",adios_integer,counterstr,"");
+
+    free (orgs);
+    free (d1);
+    return 1;
+}
+
+int adios_define_mesh_uniform_spacings (const char * spacing
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    char * spa_att_nam = 0; // spacings attribute name
+    char * getspasfrom = 0; // spacings attribute name that is a var
+    int counter = 0;        // used to create spaX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create spaX attributes if (!spacing)
+
+    if (!spacing)
+    {
+        log_warn ("config.xml: mesh uniform spacing value "
+                "required for mesh: %s\n"
+                ,name
+                );
+        return 0;
+    }
+
+    d1 = strdup (spacing);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        spa_att_nam = 0;
+        conca_mesh_numb_att_nam(&spa_att_nam, name, "spacings", counterstr);
+        adios_common_define_attribute (p_new_group,spa_att_nam,"/",adios_string,c,"");
+        free (spa_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * spas = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    spas = 0;
+    adios_conca_mesh_att_nam(&spas, name, "spacings-num");
+    adios_common_define_attribute (p_new_group,spas,"/",adios_integer,counterstr,"");
+    free (spas);
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_rectilinear_dimensions (const char * dimensions
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_item_list_struct * item = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * dim_att_nam = 0; // dimensions attribute name
+    char * getdimsfrom = 0; // dimensions attribute name that is a var
+    int counter = 0;        // used to create dimX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
+
+    if (!dimensions)
+    {
+        log_warn ("config.xml: dimensions value required"
+                "for rectilinear mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (dimensions);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        dim_att_nam = 0;
+        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
+        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
+        free (dim_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * dims = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    dims = 0;
+    adios_conca_mesh_att_nam(&dims, name, "dimensions-num");
+    adios_common_define_attribute (p_new_group,dims,"/",adios_integer,counterstr,"");
+
+    free (dims);
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * coo_att_nam = 0; // coordinates attribute name
+    int counter = 0;        // used to create ptsX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
+
+    if (!coordinates)
+    {
+        log_warn ("config.xml: coordinates-multi-var value required"
+                "for rectilinear mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (coordinates);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        coo_att_nam = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        conca_mesh_numb_att_nam(&coo_att_nam, name, "coords-multi-var", counterstr);
+        adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,c,"");
+        free (coo_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    // At this points, coordinates should point to at least 2 variables
+    // otherwise let the user know to use the coordinates-single-var tag
+    if (counter > 1) {
+        char * coords = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        adios_conca_mesh_att_nam(&coords, name, "coords-multi-var-num");
+        adios_common_define_attribute (p_new_group,coords,"/",adios_integer,counterstr,"");
+        free (coords);
+    } else
+    {
+        log_warn ("config.xml: coordinates-multi-var expects "
+                "at least 2 variables (%s)\n"
+                ,name
+                );
+        free (d1);
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * coo_att_nam = 0; // coordinates attribute name
+
+    if (!coordinates)
+    {
+        log_warn ("config.xml: coordinates-single-var value required"
+                "for rectilinear mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (coordinates);
+    adios_conca_mesh_att_nam(&coo_att_nam, name, "coords-single-var");
+    adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,d1,"");
+    free (coo_att_nam);
+    free (d1);
+    return 1;
+}
+
+int adios_define_mesh_structured_nspace (const char * nspace
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    struct adios_mesh_item_struct * item = 0;
+    char * nsp_att_nam = 0; // nspace attribute name
+
+    if (!nspace)
+    {
+        log_warn ("config.xml: npsace value required "
+                "for structured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (nspace);
+    adios_conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
+    adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,nspace,"");
+    free (nsp_att_nam);
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_structured_dimensions (const char * dimensions
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_item_list_struct * item = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * dim_att_nam = 0; // dimensions attribute name
+    char * getdimsfrom = 0; // dimensions attribute name that is a var
+    int counter = 0;        // used to create dimX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
+
+    if (!dimensions)
+    {
+        log_warn ("config.xml: dimensions value required"
+                "for structured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (dimensions);
+    c = strtok (d1, ",");
+    while (c)
+    {
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        dim_att_nam = 0;
+        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
+        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
+        free (dim_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    char * dims = 0;
+    counterstr[0] = '\0';
+    snprintf(counterstr, 5, "%d", counter);
+    dims = 0;
+    adios_conca_mesh_att_nam(&dims, name, "dimensions-num");
+    adios_common_define_attribute (p_new_group,dims,"/",adios_integer,counterstr,"");
+
+    free (dims);
+    free (d1);
+    return 1;
+}
+
+int adios_define_mesh_structured_pointsSingleVar (const char * points
+        ,struct adios_group_struct * new_group
+        ,const char * name
+                                              )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * pts_att_nam = 0; // points attribute name
+
+    if (!points)
+    {
+        log_warn ("config.xml: points-single-var value required"
+                         "for structured mesh: %s\n"
+                         ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (points);
+        adios_conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
+        adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
+        free (pts_att_nam);
+    free (d1);
+    return 1;
+}
+
+int adios_define_mesh_structured_pointsMultiVar (const char * points
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * pts_att_nam = 0; // pointss attribute name
+    int counter = 0;        // used to create ptsX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
+
+    if (!points)
+    {
+        log_warn ("config.xml: points-multi-var value required"
+                "for structured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (points);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        pts_att_nam = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
+        adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
+        free (pts_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    // Define an attribute showing the number of mesh_vars
+    // Should be more than one in this multi-var parsing
+    if (counter > 1){
+        char * pts = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        adios_conca_mesh_att_nam(&pts, name, "points-multi-var-num");
+        adios_common_define_attribute (p_new_group,pts,"/",adios_integer,counterstr,"");
+        free (pts);
+    } else
+    {
+        log_warn ("config.xml: points-multi-var tag for mesh: %s "
+                " expects at least 2 variables\n"
+                ,name
+                );
+        free (d1);
+
+        return 0;
+    }
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_nspace (const char * nspace
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    struct adios_mesh_item_struct * item = 0;
+    char * nsp_att_nam = 0; // nspace attribute name
+
+    if (!nspace)
+    {
+        log_warn ("config.xml: nspace value required"
+                         "for unstructured mesh: %s\n"
+                         ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (nspace);
+    adios_conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
+    adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,nspace,"");
+    free (nsp_att_nam);
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_npoints (const char * npoints
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * d1; // save of strdup
+    int64_t      p_new_group = (int64_t) new_group;
+    struct adios_mesh_item_struct * item = 0;
+    char * npts_att_nam = 0; // npoints attribute name
+
+    if (!npoints)
+    {
+        log_warn ("config.xml: npoints value required"
+                "for unstructured mesh\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (npoints);
+
+    adios_conca_mesh_att_nam(&npts_att_nam, name, "npoints");
+    adios_common_define_attribute (p_new_group,npts_att_nam,"/",adios_string,npoints,"");
+    free (npts_att_nam);
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_pointsMultiVar (const char * points
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * pts_att_nam = 0; // pointss attribute name
+    int counter = 0;        // used to create ptsX attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
+
+    if (!points)
+    {
+        log_warn ("config.xml: points-multi-var value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (points);
+
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        pts_att_nam = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
+        adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
+        free (pts_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+
+    // At this point we expect at least 2 "points-multi-var values
+    if (counter > 1){
+        char * pts = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        adios_conca_mesh_att_nam(&pts, name, "points-multi-var-num");
+        adios_common_define_attribute (p_new_group,pts,"/",adios_integer,counterstr,"");
+        free (pts);
+        free (d1);
+    } else
+    {
+        log_warn ("config.xml: points-multi-var tag expects "
+                " at least two variabels. (%s)\n"
+                ,name
+                );
+        free (d1);
+        return 0;
+    }
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_pointsSingleVar (const char * points
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_var_list_struct * var = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * pts_att_nam = 0; // points attribute name
+
+    if (!points)
+    {
+        log_warn ("config.xml: points-single-var value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (points);
+    adios_conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
+    adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
+    free (pts_att_nam);
+
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_uniformCells (const char * count
+        ,const char * data
+        ,const char * type
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_cell_list_list_struct * cell_list = 0;
+    struct adios_mesh_item_struct * item = 0;
+    int64_t      p_new_group = (int64_t) new_group;
+    char * ncellset_att_nam = 0;  // ncellset attribute
+    char * cellcount_att_nam = 0; // single cell count attribute
+    char * celldata_att_nam = 0;  // single cell data  attribute
+    char * celltype_att_nam = 0;  // single cell type attribute
+
+    adios_conca_mesh_att_nam(&ncellset_att_nam,name,"ncsets");
+    adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_integer,"1","");
+    free (ncellset_att_nam);
+
+    if (!count)
+    {
+        log_warn ("config.xml: uniform-cells count value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+    if (!data)
+    {
+        log_warn ("config.xml: uniform-cells data value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+    if (!type)
+    {
+        log_warn ("config.xml: uniform-cells type value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (count);
+    adios_conca_mesh_att_nam(&cellcount_att_nam, name, "ccount");
+    adios_common_define_attribute (p_new_group,cellcount_att_nam,"/",adios_string,d1,"");
+    free (cellcount_att_nam);
+    free (d1);
+
+    d1 = strdup (data);
+    adios_conca_mesh_att_nam(&celldata_att_nam, name, "cdata");
+    adios_common_define_attribute (p_new_group,celldata_att_nam,"/",adios_string,d1,"");
+    free (celldata_att_nam);
+    free (d1);
+
+    d1 = strdup (type);
+    adios_conca_mesh_att_nam(&celltype_att_nam, name, "ctype");
+    adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
+    free(celltype_att_nam);
+    free (d1);
+
+    return 1;
+}
+
+int adios_define_mesh_unstructured_mixedCells (const char * count
+        ,const char * data
+        ,const char * types
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
+{
+    char * c;  // comma location
+    char * d1; // save of strdup
+    struct adios_mesh_cell_list_list_struct * cell_list = 0;
+    struct adios_mesh_item_struct * item = 0;
+    int counter = 0;        // used to create countX, typeX, dataX? attributes
+    char counterstr[5] = {0,0,0,0,0}; // used to create countX, typeX, dataX? attributes
+    int64_t      p_new_group = (int64_t) new_group;
+    char * ncellset_att_nam = 0;  // ncellset attribute
+    char * ccounts_att_nam = 0;   // ccountX attributes
+    char * cdata_att_nam = 0;     // cdataX attributes
+    char * celltype_att_nam = 0;  // ctypeX attributes
+
+    if (!count)
+    {
+        log_warn ("config.xml: mixed-cells count value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+    if (!data)
+    {
+        log_warn ("config.xml: mixed-cells data value required"
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+    if (!types)
+    {
+        log_warn ("config.xml: mixed-cells type value required "
+                "for unstructured mesh: %s\n"
+                ,name
+                );
+
+        return 0;
+    }
+
+    d1 = strdup (count);
+    c = strtok (d1, ",");
+   
+    while (c)
+    {
+        //cell_list->cell_list.count.var = 0;
+        //cell_list->cell_list.count.rank = strtod (c, 0);
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        ccounts_att_nam = 0;
+        conca_mesh_numb_att_nam(&ccounts_att_nam, name, "ccount", counterstr);
+        adios_common_define_attribute (p_new_group,ccounts_att_nam,"/",adios_string,c,"");
+        free (ccounts_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+//    free (d1);
+
+    // We should have at least 2 cell sets, otherwise the cells are uniform
+    if (counter <= 1){
+        log_warn ("config.xml: Please provide at least 2 cell counts of mesh: %s\n"
+                "or use the 'uniform-cells' tag.\n"
+                ,name
+                );
+        return 0;
+    }
+
+    snprintf(counterstr, 5, "%d", counter);
+    adios_conca_mesh_att_nam(&ncellset_att_nam, name, "ncsets");
+    adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_integer,counterstr,"");
+    free (ncellset_att_nam);
+
+    // From the number of counts expect the same number of data and type items
+    int cell_set_count = counter;
+    // Reset counter
+    counter = 0;
+
+    d1 = strdup (data);
+    c = strtok (d1, ",");
+    while (c)
+    {
+        cdata_att_nam = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        conca_mesh_numb_att_nam(&cdata_att_nam, name, "cdata", counterstr);
+        adios_common_define_attribute (p_new_group,cdata_att_nam,"/",adios_string,c,"");
+        free (cdata_att_nam);
+        counter++;
+        c = strtok (NULL, ",");
+    }
+    free (d1);
+
+    // If the number of data variables does not match the number of counts
+    // Generate an error message
+    if (counter != cell_set_count){
+        log_warn ("config.xml: Please provide at least %d cell data of mesh: %s\n"
+                "or use the 'uniform-cells' tag\n"
+                ,cell_set_count
+                ,name
+                );
+        return 0;
+    }
+
+    // Reset counter
+    counter = 0;
+
+    d1 = strdup (types);
+    c = strtok (d1, ",");
+
+    while (c)
+    {
+        celltype_att_nam = 0;
+        counterstr[0] = '\0';
+        snprintf(counterstr, 5, "%d", counter);
+        conca_mesh_numb_att_nam(&celltype_att_nam, name, "ctype", counterstr);
+        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
+        c = strtok (NULL, ",");
+        counter++;
+        free (celltype_att_nam);
+    }
+    free (d1);
+
+    // If the number of data variables does not match the number of counts
+    // Generate an error message
+    if (counter != cell_set_count){
+        log_warn ("config.xml: Please provide at least %d cell types of mesh: %s\n"
+                "or use the 'uniform-cells' tag\n"
+                ,cell_set_count
+                ,name
+                );
+        return 0;
+    }
+
+    return 1;
+}
+
+// NO-XML API
+int adios_define_var_mesh(int64_t ptr_new_group, char * varname, char * varpath, char * meshname){
+    char *mpath = 0;
+    mpath = malloc(strlen("/adios_schema")+strlen(varname)+1);
+    strcpy(mpath,varname);
+    strcat(mpath,"/adios_schema");
+    adios_common_define_attribute (ptr_new_group,mpath,varpath,adios_string,meshname,"");
+    free (mpath);
+    return 0;
+}
+
+int adios_define_var_centering(int64_t ptr_new_group, char * varname, char * varpath, char * centering){
+    char *mpath = 0;
+    mpath = malloc(strlen("/adios_schema/centering")+strlen(varname)+1);
+    strcpy(mpath,varname);
+    strcat(mpath,"/adios_schema/centering");
+    adios_common_define_attribute (ptr_new_group,mpath,varpath,adios_string,centering,"");
+    free (mpath);
+    return 0;
+}
+
+int adios_define_mesh_group(int64_t ptr_new_group, char * name, char * group){
+    char * meshgroup = 0;
+    adios_conca_mesh_att_nam(&group, name, "mesh-group");
+    adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,group,"");
+    return 0;
+}
+
+int adios_define_mesh_file(int64_t ptr_new_group, char * name, char * file){
+    char * meshfile = 0;
+    adios_conca_mesh_att_nam(&meshfile, name, "mesh-file");
+    adios_common_define_attribute (ptr_new_group,file,"/",adios_string,file,"");
+    return 0;
+}
+
diff --git a/src/core/adios_internals.h b/src/core/adios_internals.h
index d92ab22..1346ad4 100644
--- a/src/core/adios_internals.h
+++ b/src/core/adios_internals.h
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -15,6 +15,11 @@
 #include "public/adios_mpi.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_bp_v1.h"
+#include "core/qhashtbl.h"
+#include "public/adios_schema.h"
+
+// NCSU ALACRITY-ADIOS: Include needed for the transform spec struct
+#include "core/transforms/adios_transforms_specparse.h"
 
 #ifdef SKEL_TIMING
 #include "core/adios_timing.h"
@@ -28,20 +33,19 @@ enum ADIOS_METHOD_MODE {adios_mode_write  = 1
 
 struct adios_dimension_struct;
 struct adios_var_struct;
-// ADIOS Schema: modifying mesh struct
-struct adios_mesh_struct;
 
 // NCSU - Generic data for statistics
-struct adios_stat_struct 
+struct adios_stat_struct
 {
-	void * data;
+    void * data;
 };
 
 
 struct adios_var_struct
 {
     uint16_t id;
-    uint16_t parent_id;
+    //uint16_t parent_id; // obsolete: remove
+    struct adios_var_struct *parent_var; // copy_var_written links "written var" to "var definition"
 
     char * name;
     char * path;
@@ -57,17 +61,28 @@ struct adios_var_struct
     enum ADIOS_FLAG free_data;    // primarily used for writing
     void * data;                  // primarily used for reading
     uint64_t data_size;           // primarily used for reading
+    uint16_t write_count; // added to support multiple writes for transform layer.
+                          // Might needed for other things in the future.
+
+    // NCSU - Adding stat related variables
+    struct adios_stat_struct ** stats; // 2D array. Complex numbers can contain upto 3 parts
+    uint32_t bitmap;
 
-	// NCSU - Adding stat related variables
-	struct adios_stat_struct ** stats; // 2D array. Complex numbers can contain upto 3 parts
-	uint32_t bitmap;
+    // NCSU ALACRITY-ADIOS - Adding transform-related fields
+    uint8_t transform_type;
+    struct adios_transform_spec *transform_spec;
+
+    enum ADIOS_DATATYPES pre_transform_type;
+    struct adios_dimension_struct *pre_transform_dimensions;
+    uint16_t transform_metadata_len;
+    void *transform_metadata;
 
     struct adios_var_struct * next;
 };
 
 // NCSU - structure for histogram
 struct adios_hist_struct
-{   
+{
     double min; //minimum value of histogram ** for when we use complex variables
     double max; //maximum value of histogram
     uint32_t num_breaks; //number of break points for the histogram
@@ -107,61 +122,22 @@ struct adios_method_list_struct
     struct adios_method_list_struct * next;
 };
 
-enum ADIOS_MESH_TYPE
-{
-     ADIOS_MESH_UNIFORM      = 1
-    ,ADIOS_MESH_STRUCTURED   = 2
-    ,ADIOS_MESH_RECTILINEAR  = 3
-    ,ADIOS_MESH_UNSTRUCTURED = 4
-};
-
-// ADIOS Schema: supported cell types
-enum ADIOS_CELL_TYPE
-{
-     ADIOS_CELL_PT         = 1
-    ,ADIOS_CELL_LINE       = 2
-    ,ADIOS_CELL_TRI        = 3
-    ,ADIOS_CELL_QUAD       = 4
-    ,ADIOS_CELL_HEX        = 5
-    ,ADIOS_CELL_PRI        = 6
-    ,ADIOS_CELL_TET        = 7
-    ,ADIOS_CELL_PYR        = 8
-};
-
-struct adios_mesh_uniform_struct;
-struct adios_mesh_rectilinear_struct;
-struct adios_mesh_structured_struct;
-struct adios_mesh_unstructured_struct;
-
-struct adios_mesh_struct
-{
-    // ADIOS Schema: adding mesh names 
-    // Groups can have multiple meshes
-    char * name;
-    enum ADIOS_FLAG time_varying;
-    enum ADIOS_MESH_TYPE type;
-    union 
-    {
-        struct adios_mesh_uniform_struct * uniform;
-        struct adios_mesh_rectilinear_struct * rectilinear;
-        struct adios_mesh_structured_struct * structured;
-        struct adios_mesh_unstructured_struct * unstructured;
-    };
-    struct adios_mesh_struct * next;
-};
 
 struct adios_group_struct
 {
     uint16_t id;
-    uint16_t member_count;
+    uint16_t member_count; // count of variables + attributes
     uint64_t group_offset;
 
     char * name;
     int var_count;
     enum ADIOS_FLAG adios_host_language_fortran;
-    enum ADIOS_FLAG all_unique_var_names;
+    enum ADIOS_FLAG all_unique_var_names; // obsolete: remove
     struct adios_var_struct * vars;
+    struct adios_var_struct * vars_tail;  // last variable in the list 'vars'
+    qhashtbl_t *hashtbl_vars;
     struct adios_var_struct * vars_written;
+    struct adios_var_struct * vars_written_tail; // last variable in 'vars_written'
     struct adios_attribute_struct * attributes;
     char * group_comm;
     char * group_by;
@@ -175,7 +151,7 @@ struct adios_group_struct
     struct adios_mesh_struct * meshs;
     int mesh_count;
     enum ADIOS_FLAG all_unique_mesh_names;
-   
+
     int attrid_update_epoch; // ID of special attribute "/__adios__/update_time_epoch" to find it fast
 };
 
@@ -217,8 +193,10 @@ struct adios_file_struct
 
 struct adios_dimension_item_struct
 {
-    uint64_t rank;
-    uint16_t id;
+    uint64_t rank;                 // for numerical value
+    //uint16_t id; //obsolete: remove
+    struct adios_var_struct * var; // for value stored in variable
+    struct adios_attribute_struct * attr; // for value stored in attribute
     enum ADIOS_FLAG time_index;
 };
 
@@ -230,72 +208,23 @@ struct adios_dimension_struct
     struct adios_dimension_struct * next;
 };
 
-typedef void (* ADIOS_INIT_FN) (const PairStruct * parameters
-                               ,struct adios_method_struct * method
-                               );
-typedef int (* ADIOS_OPEN_FN) (struct adios_file_struct * fd
-                              ,struct adios_method_struct * method, MPI_Comm comm
-                              );
-typedef enum ADIOS_FLAG (* ADIOS_SHOULD_BUFFER_FN)
-                                       (struct adios_file_struct * fd
-                                       ,struct adios_method_struct * method
-                                       );
-typedef void (* ADIOS_WRITE_FN) (struct adios_file_struct * fd
-                                ,struct adios_var_struct * v
-                                ,void * data
-                                ,struct adios_method_struct * method
-                                );
-typedef void (* ADIOS_GET_WRITE_BUFFER_FN) (struct adios_file_struct * fd
-                                           ,struct adios_var_struct * v
-                                           ,uint64_t * size
-                                           ,void ** buffer
-                                           ,struct adios_method_struct * method
-                                           );
-typedef void (* ADIOS_READ_FN) (struct adios_file_struct * fd
-                               ,struct adios_var_struct * v
-                               ,void * buffer
-                               ,uint64_t buffer_size
-                               ,struct adios_method_struct * method
-                               );
-typedef void (* ADIOS_CLOSE_FN) (struct adios_file_struct * fd
-                                ,struct adios_method_struct * method
-                                );
-typedef void (* ADIOS_FINALIZE_FN) (int mype
-                                   ,struct adios_method_struct * method
-                                   );
-typedef void (* ADIOS_END_ITERATION_FN) (struct adios_method_struct * method);
-typedef void (* ADIOS_START_CALCULATION_FN)
-                                        (struct adios_method_struct * method);
-typedef void (* ADIOS_STOP_CALCULATION_FN)
-                                        (struct adios_method_struct * method);
-
-struct adios_transport_struct
-{
-    ADIOS_INIT_FN adios_init_fn;
-    ADIOS_OPEN_FN adios_open_fn;
-    ADIOS_SHOULD_BUFFER_FN adios_should_buffer_fn;
-    ADIOS_WRITE_FN adios_write_fn;
-    ADIOS_GET_WRITE_BUFFER_FN adios_get_write_buffer_fn;
-    ADIOS_READ_FN adios_read_fn;
-    ADIOS_CLOSE_FN adios_close_fn;
-    ADIOS_FINALIZE_FN adios_finalize_fn;
-    ADIOS_END_ITERATION_FN adios_end_iteration_fn;
-    ADIOS_START_CALCULATION_FN adios_start_calculation_fn;
-    ADIOS_STOP_CALCULATION_FN adios_stop_calculation_fn;
-};
-
-struct adios_buffer_part_entry
-{
-    void * buffer;
-    size_t buffer_size;
-};
-
-struct adios_parse_buffer_struct
+//mesh structure used by write method
+// ADIOS Schema: modifying mesh struct
+struct adios_mesh_struct
 {
-    struct adios_var_struct * vars;
-    enum ADIOS_FLAG all_unique_var_names;
-    uint64_t buffer_len;
-    void * buffer;
+    // ADIOS Schema: adding mesh names
+    // Groups can have multiple meshes
+    char * name;
+    enum ADIOS_FLAG time_varying;
+    enum ADIOS_MESH_TYPE type;
+/*    union
+    {
+        struct adios_mesh_uniform_struct * uniform;
+        struct adios_mesh_rectilinear_struct * rectilinear;
+        struct adios_mesh_structured_struct * structured;
+        struct adios_mesh_unstructured_struct * unstructured;
+    };*/
+    struct adios_mesh_struct * next;
 };
 
 ////////////////////////
@@ -333,7 +262,7 @@ struct adios_mesh_cell_list_list_struct
     struct adios_mesh_cell_list_list_struct * next;
 };
 
-//////////////////////////////////////////////////////////////
+/*
 // Main mesh structs
 //////////////////////////////////////////////////////////////
 struct adios_mesh_uniform_struct
@@ -373,6 +302,76 @@ struct adios_mesh_unstructured_struct
     struct adios_mesh_cell_list_list_struct * cell_list;
     struct adios_mesh_item_struct * cell_set_count;
 };
+*/
+
+typedef void (* ADIOS_INIT_FN) (const PairStruct * parameters
+                               ,struct adios_method_struct * method
+                               );
+typedef int (* ADIOS_OPEN_FN) (struct adios_file_struct * fd
+                              ,struct adios_method_struct * method, MPI_Comm comm
+                              );
+typedef enum ADIOS_FLAG (* ADIOS_SHOULD_BUFFER_FN)
+                                       (struct adios_file_struct * fd
+                                       ,struct adios_method_struct * method
+                                       );
+typedef void (* ADIOS_WRITE_FN) (struct adios_file_struct * fd
+                                ,struct adios_var_struct * v
+                                ,void * data
+                                ,struct adios_method_struct * method
+                                );
+typedef void (* ADIOS_GET_WRITE_BUFFER_FN) (struct adios_file_struct * fd
+                                           ,struct adios_var_struct * v
+                                           ,uint64_t * size
+                                           ,void ** buffer
+                                           ,struct adios_method_struct * method
+                                           );
+typedef void (* ADIOS_READ_FN) (struct adios_file_struct * fd
+                               ,struct adios_var_struct * v
+                               ,void * buffer
+                               ,uint64_t buffer_size
+                               ,struct adios_method_struct * method
+                               );
+typedef void (* ADIOS_CLOSE_FN) (struct adios_file_struct * fd
+                                ,struct adios_method_struct * method
+                                );
+typedef void (* ADIOS_FINALIZE_FN) (int mype
+                                   ,struct adios_method_struct * method
+                                   );
+typedef void (* ADIOS_END_ITERATION_FN) (struct adios_method_struct * method);
+typedef void (* ADIOS_START_CALCULATION_FN)
+                                        (struct adios_method_struct * method);
+typedef void (* ADIOS_STOP_CALCULATION_FN)
+                                        (struct adios_method_struct * method);
+
+struct adios_transport_struct
+{
+    ADIOS_INIT_FN adios_init_fn;
+    ADIOS_OPEN_FN adios_open_fn;
+    ADIOS_SHOULD_BUFFER_FN adios_should_buffer_fn;
+    ADIOS_WRITE_FN adios_write_fn;
+    ADIOS_GET_WRITE_BUFFER_FN adios_get_write_buffer_fn;
+    ADIOS_READ_FN adios_read_fn;
+    ADIOS_CLOSE_FN adios_close_fn;
+    ADIOS_FINALIZE_FN adios_finalize_fn;
+    ADIOS_END_ITERATION_FN adios_end_iteration_fn;
+    ADIOS_START_CALCULATION_FN adios_start_calculation_fn;
+    ADIOS_STOP_CALCULATION_FN adios_stop_calculation_fn;
+};
+
+struct adios_buffer_part_entry
+{
+    void * buffer;
+    size_t buffer_size;
+};
+
+struct adios_parse_buffer_struct
+{
+    struct adios_var_struct * vars;
+    enum ADIOS_FLAG all_unique_var_names;
+    uint64_t buffer_len;
+    void * buffer;
+};
+
 
 //////////////////////////////////////////////////////////////////////////////
 // Function Delcarations
@@ -385,10 +384,8 @@ uint64_t adios_data_size (struct adios_group_struct * g);
 struct adios_method_list_struct * adios_get_methods (void);
 struct adios_group_list_struct * adios_get_groups (void);
 
-struct adios_var_struct * adios_find_var_by_name (struct adios_var_struct * root
-                                                 ,const char * name
-                                                 ,enum ADIOS_FLAG unique_names
-                                                 );
+struct adios_var_struct * adios_find_var_by_name (struct adios_group_struct * g,
+                                                  const char * fullpath);
 struct adios_var_struct * adios_find_var_by_id (struct adios_var_struct * root
                                                ,uint16_t id
                                                );
@@ -441,11 +438,7 @@ void adios_add_method_to_group (struct adios_method_list_struct ** root
 
 void adios_append_group (struct adios_group_struct * group);
 
-// is the var name unique
-enum ADIOS_FLAG adios_append_var (struct adios_var_struct ** root
-                                 ,struct adios_var_struct * var
-                                 ,uint16_t id
-                                 );
+//void adios_append_var (struct adios_group_struct * g, struct adios_var_struct * var);
 
 void adios_append_dimension (struct adios_dimension_struct ** root
                             ,struct adios_dimension_struct * dimension
@@ -469,20 +462,22 @@ int64_t adios_common_define_var (int64_t group_id, const char * name
                                 ,const char * dimensions
                                 ,const char * global_dimensions
                                 ,const char * local_offsets
+                            ,char *transform_type_str // NCSU ALACRITY-ADIOS
                                 );
 
 int adios_common_define_var_characteristcs  (struct adios_group_struct * g, const char * var_name
-                            				,const char * bin_interval 
-                            				,const char * bin_min
-                            				,const char * bin_max
-                            				,const char * bin_count
-                            				);
+                                            ,const char * bin_interval
+                                            ,const char * bin_min
+                                            ,const char * bin_max
+                                            ,const char * bin_count
+                                            );
 
 void adios_common_get_group (int64_t * group_id, const char * name);
 int adios_common_free_group (int64_t id);
 
 // ADIOS file format functions
 
+uint16_t adios_calc_var_characteristics_dims_overhead(struct adios_dimension_struct * d);
 uint16_t adios_calc_var_overhead_v1 (struct adios_var_struct * v);
 uint32_t adios_calc_attribute_overhead_v1 (struct adios_attribute_struct * a);
 uint64_t adios_calc_overhead_v1 (struct adios_file_struct * fd);
@@ -495,6 +490,9 @@ int adios_write_process_group_header_v1 (struct adios_file_struct * fd
                                         ,uint64_t total_size
                                         );
 
+void adios_copy_var_written (struct adios_group_struct * g,
+                             struct adios_var_struct * var);
+
 // data is only there for sizing
 uint64_t adios_write_var_header_v1 (struct adios_file_struct * fd
                                    ,struct adios_var_struct * v
@@ -515,38 +513,42 @@ int adios_write_open_vars_v1 (struct adios_file_struct * fd);
 int adios_write_close_vars_v1 (struct adios_file_struct * fd);
 int adios_write_open_attributes_v1 (struct adios_file_struct * fd);
 int adios_write_close_attributes_v1 (struct adios_file_struct * fd);
+
+// allocate the adios_index_struct, freed in adios_free_index_v1
+struct adios_index_struct_v1 * adios_alloc_index_v1 (int alloc_hashtables);
+
 int adios_write_index_v1 (char ** buffer
                          ,uint64_t * buffer_size
                          ,uint64_t * buffer_offset
                          ,uint64_t index_start
-                         ,struct adios_index_process_group_struct_v1 * pg_root
-                         ,struct adios_index_var_struct_v1 * vars_root
-                         ,struct adios_index_attribute_struct_v1 * attrs_root
+                         ,struct adios_index_struct_v1 * index
                          );
 
 void adios_build_index_v1 (struct adios_file_struct * fd
-                       ,struct adios_index_process_group_struct_v1 ** pg_root
-                       ,struct adios_index_var_struct_v1 ** vars_root
-                       ,struct adios_index_attribute_struct_v1 ** attrs_root
+                         ,struct adios_index_struct_v1 * index
                        );
 void adios_merge_index_v1 (
-                   struct adios_index_process_group_struct_v1 ** main_pg_root
-                  ,struct adios_index_var_struct_v1 ** main_vars_root
-                  ,struct adios_index_attribute_struct_v1 ** main_attrs_root
+                   struct adios_index_struct_v1 * main_index
                   ,struct adios_index_process_group_struct_v1 * new_pg_root
                   ,struct adios_index_var_struct_v1 * new_vars_root
                   ,struct adios_index_attribute_struct_v1 * new_attrs_root
                   );
-void adios_clear_index_v1 (struct adios_index_process_group_struct_v1 * pg_root
-                          ,struct adios_index_var_struct_v1 * vars_root
-                          ,struct adios_index_attribute_struct_v1 * attrs_root
-                          );
+void adios_clear_index_v1 (struct adios_index_struct_v1 * index); // in each adios_<method>_close()
+void adios_free_index_v1 (struct adios_index_struct_v1 * index);  // in adios_<method>_finalize()
+
+
+// NCSU ALACRITY-ADIOS - This function was static, but is now needed in adios_transforms_*.c
+uint8_t count_dimensions (const struct adios_dimension_struct * dimensions);
 
 uint64_t adios_get_type_size (enum ADIOS_DATATYPES type, void * var);
+// NCSU ALACRITY-ADIOS - added this for use in the transform layer
+uint64_t adios_get_dimension_space_size (struct adios_var_struct * var
+                                        ,struct adios_dimension_struct * d
+                                        ,struct adios_group_struct * group);
 uint64_t adios_get_var_size (struct adios_var_struct * var
                             ,struct adios_group_struct * group, void * data
                             );
-
+uint64_t adios_get_dim_value (struct adios_dimension_item_struct * dimension);
 uint64_t adios_get_stat_size (void * data, enum ADIOS_DATATYPES type, enum ADIOS_STAT stat_id);
 uint8_t adios_get_stat_set_count (enum ADIOS_DATATYPES type);
 
@@ -562,6 +564,50 @@ int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
 /* some internal functions that adios_internals.c and adios_internals_mxml.c share */
 int adios_int_is_var (const char * temp); // 1 == yes, 0 == no
 int adios_int_is_num (char * temp); // 1 == yes, 0 == no
+void adios_conca_mesh_numb_att_nam(char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]);
+void adios_conca_mesh_att_nam(char ** returnstr, const char * meshname, char * att_nam);
+int adios_define_schema_version(struct adios_group_struct * new_group, char * schema_version);
+
+// No-XML API
+int adios_define_var_mesh(int64_t ptr_new_group, char * varname, char * varpath, char * meshname);
+int adios_define_var_centering(int64_t ptr_new_group, char * varname, char * varpath, char * centering);
+int adios_define_var_timesteps (const char * timesteps,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_define_var_timescale (const char * timescale,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_define_var_timeseriesformat (const char * timeseries,struct adios_group_struct * new_group,const char * name, const char *path);
+int adios_define_var_hyperslab ( const char * hyperslab,struct adios_group_struct * new_group,const char * name, const char *path);
+
+// defineMesh functions (missing mesh structs for now dueto problems checking accross groups
+int adios_define_mesh_group(int64_t ptr_new_group, char * name, char * group);
+int adios_define_mesh_file(int64_t ptr_new_group, char * name, char * file);
+int adios_define_mesh_timeSeriesFormat (const char * timeseries, struct adios_group_struct * new_group, const char * name);
+int adios_define_mesh_timeScale (const char * timescale, struct adios_group_struct * new_group, const char * name);
+int adios_define_mesh_timeSteps (const char * timesteps, struct adios_group_struct * new_group, const char * name);
+
+int adios_define_mesh_rectilinear (char * dimensions, char * coordinates,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_rectilinear_dimensions (const char * dimensions,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_rectilinear_coordinatesSingleVar (const char * coordinates,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_rectilinear_coordinatesMultiVar (const char * coordinates,struct adios_group_struct * new_group,const char * name);
+
+int adios_define_mesh_uniform (char * dimensions, char * origin, char * spacing, char * maximum, struct adios_group_struct * new_group ,const char * name);
+int adios_define_mesh_uniform_dimensions (const char * dimensions, struct adios_group_struct * new_group, const char * name);
+int adios_define_mesh_uniform_origins (const char * origin ,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_uniform_spacings (const char * spacing,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_uniform_maximums (const char * maximum,struct adios_group_struct * new_group,const char * name);
+
+int adios_define_mesh_structured(char * dimensions, char * nspace, char * points,struct adios_group_struct * new_group, char * name);
+int adios_define_mesh_structured_dimensions (const char * dimensions,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_structured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_structured_pointsSingleVar (const char * points,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_structured_pointsMultiVar (const char * points,struct adios_group_struct * new_group,const char * name);
+
+int adios_define_mesh_unstructured(char *nspace, char *npoints, char *points, char * data, char * count, char * type, struct adios_group_struct * new_group, const char * name);
+int adios_define_mesh_unstructured_npoints (const char * npoints,struct adios_group_struct * new_group ,const char * name);
+int adios_define_mesh_unstructured_nspace (const char * nspace,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_unstructured_pointsSingleVar (const char * points,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_unstructured_pointsMultiVar (const char * points,struct adios_group_struct * new_group ,const char * name);
+int adios_define_mesh_unstructured_uniformCells (const char * count,const char * data,const char * type,struct adios_group_struct * new_group,const char * name);
+int adios_define_mesh_unstructured_mixedCells (const char * count,const char * data,const char * types,struct adios_group_struct * new_group,const char * name);
+
 
 // queue code for adaptive message passing
 #ifdef __cplusplus
diff --git a/src/core/adios_internals_mxml.c b/src/core/adios_internals_mxml.c
index 4561dc3..86ebfd6 100644
--- a/src/core/adios_internals_mxml.c
+++ b/src/core/adios_internals_mxml.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -28,95 +28,94 @@
 #endif
 
 static enum ADIOS_FLAG adios_host_language_fortran = adios_flag_yes;
-
-struct adios_method_list_struct * adios_methods = 0;
-struct adios_group_list_struct * adios_groups = 0;
-
-//extern struct adios_method_list_struct * adios_methods;
-//extern struct adios_group_list_struct * adios_groups;
+// NCSU ALACRITY-ADIOS: Need these to be extern so they can be accessed by both adios_internals.c and here
+extern struct adios_method_list_struct * adios_methods;
+extern struct adios_group_list_struct * adios_groups;
+//struct adios_method_list_struct * adios_methods = 0;
+//struct adios_group_list_struct * adios_groups = 0;
 
 struct adios_transport_struct * adios_transports = 0;
 static int adios_transports_initialized = 0;
 
 static MPI_Comm init_comm; // communicator for each method's init call
 
-// ADIOS Schema: adding utility functions
-void conca_var_att_nam(char ** returnstr, const char * varname, char * att_nam);
-void conca_mesh_att_nam(char ** returnstr, const char * meshname, char * att_nam);
-void conca_mesh_numb_att_nam(char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]);
-
 // this macro makes getting the attributes easier
 // fix the bgp bugs
 #define GET_ATTR(n,attr,var,en)                              \
-if (!strcasecmp (n, attr->name)) {                           \
-    if (!var)                                                \
-    {                                                        \
-        var = attr->value;                                   \
-        continue;                                            \
-    }                                                        \
-    else                                                     \
-    {                                                        \
-        log_warn ("xml: duplicate attribute %s on %s (ignored)",n,en); \
-        continue;                                            \
-    }                                                        \
-}
+    if (!strcasecmp (n, attr->name)) {                           \
+        if (!var)                                                \
+        {                                                        \
+            var = attr->value;                                   \
+            continue;                                            \
+        }                                                        \
+        else                                                     \
+        {                                                        \
+            log_warn ("xml: duplicate attribute %s on %s (ignored)",n,en); \
+            continue;                                            \
+        }                                                        \
+    }
 
 static enum ADIOS_DATATYPES parseType (const char * type, const char * name)
 {
     if (   !strcasecmp (type, "byte")
-        || !strcasecmp (type, "integer*1")
+            || !strcasecmp (type, "char")
+            || !strcasecmp (type, "integer*1")
        )
         return adios_byte;
 
     if (   !strcasecmp (type, "short")
-        || !strcasecmp (type, "integer*2")
+            || !strcasecmp (type, "integer*2")
        )
         return adios_short;
 
     if (   !strcasecmp (type, "integer")
-        || !strcasecmp (type, "integer*4")
+            || !strcasecmp (type, "int")
+            || !strcasecmp (type, "integer*4")
        )
         return adios_integer;
 
     if (   !strcasecmp (type, "long")
-        || !strcasecmp (type, "integer*8")
+            || !strcasecmp (type, "long long")
+            || !strcasecmp (type, "integer*8")
        )
         return adios_long;
 
     if (   !strcasecmp (type, "unsigned byte")
-        || !strcasecmp (type, "unsigned integer*1")
+            || !strcasecmp (type, "unsigned char")
+            || !strcasecmp (type, "unsigned integer*1")
        )
         return adios_unsigned_byte;
 
     if (   !strcasecmp (type, "unsigned short")
-        || !strcasecmp (type, "unsigned integer*2")
+            || !strcasecmp (type, "unsigned integer*2")
        )
         return adios_unsigned_short;
 
     if (   !strcasecmp (type, "unsigned integer")
-        || !strcasecmp (type, "unsigned integer*4")
+            || !strcasecmp (type, "unsigned int")
+            || !strcasecmp (type, "unsigned integer*4")
        )
         return adios_unsigned_integer;
 
     if (   !strcasecmp (type, "unsigned long")
-        || !strcasecmp (type, "unsigned integer*8")
+            || !strcasecmp (type, "unsigned integer*8")
        )
         return adios_unsigned_long;
 
     if (   !strcasecmp (type, "real")
-        || !strcasecmp (type, "real*4")
-        || !strcasecmp (type, "float")
+            || !strcasecmp (type, "real*4")
+            || !strcasecmp (type, "float")
        )
         return adios_real;
 
     if (   !strcasecmp (type, "real*8")
-        || !strcasecmp (type, "double")
-        || !strcasecmp (type, "long float")
+            || !strcasecmp (type, "double")
+            || !strcasecmp (type, "long float")
        )
         return adios_double;
 
     if (   !strcasecmp (type, "real*16")
-        || !strcasecmp (type, "long double")
+            || !strcasecmp (type, "long double")
        )
         return adios_long_double;
 
@@ -124,12 +123,12 @@ static enum ADIOS_DATATYPES parseType (const char * type, const char * name)
         return adios_string;
 
     if (   !strcasecmp (type, "complex")
-        || !strcasecmp (type, "complex*8")
+            || !strcasecmp (type, "complex*8")
        )
         return adios_complex;
 
     if (   !strcasecmp (type, "double complex")
-        || !strcasecmp (type, "complex*16")
+            || !strcasecmp (type, "complex*16")
        )
         return adios_double_complex;
 
@@ -139,8 +138,8 @@ static enum ADIOS_DATATYPES parseType (const char * type, const char * name)
 }
 
 static enum ADIOS_FLAG parseFlag (const char * attr_name, const char * flag
-                                 ,enum ADIOS_FLAG default_value
-                                 )
+        ,enum ADIOS_FLAG default_value
+        )
 {
     if (!flag)
         return default_value;
@@ -152,7 +151,7 @@ static enum ADIOS_FLAG parseFlag (const char * attr_name, const char * flag
         return adios_flag_no;
 
     log_error ("config.xml: %s must have a value of 'yes' or 'no' "
-                     "not: %s\n", attr_name, flag
+            "not: %s\n", attr_name, flag
             );
 
     return adios_flag_unknown;
@@ -160,8 +159,8 @@ static enum ADIOS_FLAG parseFlag (const char * attr_name, const char * flag
 
 
 static void adios_append_mesh_item (struct adios_mesh_item_list_struct ** root
-                                   ,struct adios_mesh_item_list_struct * item
-                                   )
+        ,struct adios_mesh_item_list_struct * item
+        )
 {
     while (root)
     {
@@ -178,8 +177,8 @@ static void adios_append_mesh_item (struct adios_mesh_item_list_struct ** root
 }
 
 static void adios_append_mesh_var (struct adios_mesh_var_list_struct ** root
-                                  ,struct adios_mesh_var_list_struct * var
-                                  )
+        ,struct adios_mesh_var_list_struct * var
+        )
 {
     while (root)
     {
@@ -196,9 +195,9 @@ static void adios_append_mesh_var (struct adios_mesh_var_list_struct ** root
 }
 
 static void adios_append_mesh_cell_list
-                           (struct adios_mesh_cell_list_list_struct ** root
-                           ,struct adios_mesh_cell_list_list_struct * cell_list
-                           )
+(struct adios_mesh_cell_list_list_struct ** root
+ ,struct adios_mesh_cell_list_list_struct * cell_list
+ )
 {
     while (root)
     {
@@ -214,4680 +213,288 @@ static void adios_append_mesh_cell_list
     }
 }
 
-
-// Parse var time series format (real time tracking, not integers)
-static int parseVarTimeSeriesFormat (const char * timeseries
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * format_att_nam = 0;     // extension format .xxxx att name
-    char * format_att_val = 0;     // extension format att value
-
-    // We expect x xx xxx etc 
-    // We do not fail if this is not given as variables all have nsteps
-    if (!timeseries){
-        return 1;
-    }
-
-    d1 = strdup (timeseries);
-    conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
-    adios_common_define_attribute (p_new_group,format_att_nam,"/",adios_string,d1,"");
-    free(format_att_val);
-    free (d1);
-    return 1;
-}
-
-
-// Parse var time scale (real time tracking, not integers)
-static int parseVarTimeScale (const char * timescale
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
+// primary mesh XML parsing
+int parseMeshUniform (mxml_node_t * node
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
 {
-    char * c;                      // comma location
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * gettscalefrom0 = 0;     // scale attribute xml value
-    char * gettscalefrom1 = 0;     // scale attribute xml value
-    char * gettscalefrom2 = 0;     // scale attribute xml value
-    char * time_var_att_nam = 0;   // scale attribute name for var or num
-    char * time_start_att_nam = 0; // scale attribute name for start
-    char * time_stride_att_nam = 0;// scale attribute name for stride
-    char * time_count_att_nam = 0; // scale attribute name for count
-    char * time_max_att_nam = 0;   // scale attribute name for max
-    char * time_min_att_nam = 0;   // scale attribute name for min
-    char * time_var_att_val = 0;   // scale attribute value for var or num
-    char * time_start_att_val = 0; // scale attribute value for start 
-    char * time_stride_att_val = 0;// scale attribute value for stride
-    char * time_count_att_val = 0; // scale attribute value for count
-    char * time_max_att_val = 0;   // scale attribute value for max
-    char * time_min_att_val = 0;   // scale attribute value for min
-    int counter = 0;               // used to get type of time scale bounds
-
-    // We are going to allow
-    // 1. a number =  just the real time scale - note: not the number of time steps (this is already in adios inq var) but the correpdance between timesteps and real time scale 1 step = 15ms for example
-    // 2. start/stride/count 3 components - multiple of the mesh time steps
-    // 3. min/max range where this var is used - a range of the mesh time steps
-    // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
-
-    /* We do not fail if this is not given as variables all have nsteps
-       in ADIOS_inq_var = # of times the var was written
-    */
-    if (!timescale){
-        return 1;
-    }
-
-    d1 = strdup (timescale);
-    char * ptr_end;
-    c = strtok (d1, ",");
+    mxml_node_t * n;
+    int saw_dimensions = 0;
+    int saw_origin = 0;
+    int saw_spacing = 0;
+    int saw_maximum = 0;
 
-    while (c)
+    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
+            ;n
+            ;n = mxmlWalkNext (n, node, MXML_DESCEND)
+        )
     {
-        struct adios_var_struct * var = 0;
-        //if (adios_int_is_num (c))
-        if (!strtod (c,&ptr_end))
+        if (n->type != MXML_ELEMENT)
+        {
+            continue;
+        }
+
+        if (!strcasecmp (n->value.element.name, "dimensions"))
         {
-            var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var)
+            const char * dimensions;
+
+            if (saw_dimensions)
             {
-                log_warn ("config.xml: invalid variable %s\n"
-                                 "for attribute of var: %s\n"
-                                 ,c
-                                 ,name
+                log_warn ("config.xml: only one dimensions definition "
+                        "allowed per mesh sructured-points (%s)\n"
+                        ,name
                         );
-                free (d1);
 
                 return 0;
-
-            }else{
-                // Found variable ==> create a dims attribute for it.
-                if (counter == 0){
-                    gettscalefrom0 = 0;
-                    gettscalefrom0 = strdup(c);
-                }else if (counter == 1){
-                    gettscalefrom1 = 0;
-                    gettscalefrom1 = strdup(c);
-                }else if (counter == 2){
-                    gettscalefrom2 = 0;
-                    gettscalefrom2 = strdup(c);
-                }
-                counter++;
             }
-        }
-        else
-        {
-            if (counter == 0){
-                gettscalefrom0 = 0;
-                gettscalefrom0 = strdup(c);
-            }else if (counter == 1){
-                gettscalefrom1 = 0;
-                gettscalefrom1 = strdup(c);
-            }else if (counter == 2){
-                gettscalefrom2 = 0;
-                gettscalefrom2 = strdup(c);
-            }
-            counter++;
-        }
-
-        c = strtok (NULL, ",");
-    }
-
-    if (counter == 3){
-        time_start_att_val = strdup(gettscalefrom0);
-        conca_var_att_nam(&time_start_att_nam, name, "time-scale-start");
-        // if this is string
-        if (!strtod (time_start_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
-        time_stride_att_val = strdup(gettscalefrom1);
-        conca_var_att_nam(&time_stride_att_nam, name, "time-scale-stride");
-        // if this is string
-        if (!strtod (time_stride_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
-        time_count_att_val = strdup(gettscalefrom2);
-        conca_var_att_nam(&time_count_att_nam, name, "time-scale-count");
-        // if this is string
-        if (!strtod (time_count_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
-         free(time_start_att_val);
-         free(time_stride_att_val);
-         free(time_count_att_val);
-         free(gettscalefrom2);
-         free(gettscalefrom1);
-         free(gettscalefrom0);
-    }else if (counter == 2) {
-        time_min_att_val = strdup(gettscalefrom0);
-        conca_var_att_nam(&time_min_att_nam, name, "time-scale-min");
-        // if this is string
-        if (!strtod (time_min_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
-        time_max_att_val = strdup(gettscalefrom1);
-        conca_var_att_nam(&time_max_att_nam, name, "time-scale-max");
-        // if this is string
-        if (!strtod (time_max_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
-         free(time_min_att_val);
-         free(time_max_att_val);
-         free(gettscalefrom1);
-         free(gettscalefrom0);
-    } else if (counter == 1){
-        time_var_att_val = strdup(gettscalefrom0);
-        if (!strtod (time_var_att_val, &ptr_end)){
-            conca_var_att_nam(&time_var_att_nam, name, "time-scale-var");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
-        }else{
-            conca_var_att_nam(&time_var_att_nam, name, "time-scale-count");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
-        }
-       free(gettscalefrom0);
-       free(time_var_att_val);
-    }else{
-       printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
-       free(d1);
-       return 0;
-    }
-      
-    free (d1);
-
-    return 1;
-}
-
-
-// Parse mesh time series (single file for multiple time steps or
-// multiple files for time steps, basename + timeformat + extension)
-static int parseMeshTimeSeriesFormat (const char * timeseries
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * format_att_nam = 0;     // extension format .xxxx att name
-    char * format_att_val = 0;     // extension format att value
-
-    // We expect x xx xxx etc 
-    // We do not fail if this is not given as variables all have nsteps
-    if (!timeseries){
-        return 1;
-    }
-
-    d1 = strdup (timeseries);
-    conca_mesh_att_nam(&format_att_nam, name, "time-series-format");
-    adios_common_define_attribute (p_new_group,format_att_nam,"/",adios_string,d1,"");
-    free(format_att_val);
-    free (d1);
-    return 1;
-}
-
-// Parse mesh time scale (real time tracking, not integers)
-static int parseMeshTimeScale (const char * timescale
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * c;                      // comma location
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * gettscalefrom0 = 0;     // scale attribute xml value
-    char * gettscalefrom1 = 0;     // scale attribute xml value
-    char * gettscalefrom2 = 0;     // scale attribute xml value
-    char * time_var_att_nam = 0;   // scale attribute name for var or num
-    char * time_start_att_nam = 0; // scale attribute name for start
-    char * time_stride_att_nam = 0;// scale attribute name for stride
-    char * time_count_att_nam = 0; // scale attribute name for count
-    char * time_max_att_nam = 0;   // scale attribute name for max
-    char * time_min_att_nam = 0;   // scale attribute name for min
-    char * time_var_att_val = 0;   // scale attribute value for var or num
-    char * time_start_att_val = 0; // scale attribute value for start 
-    char * time_stride_att_val = 0;// scale attribute value for stride
-    char * time_count_att_val = 0; // scale attribute value for count
-    char * time_max_att_val = 0;   // scale attribute value for max
-    char * time_min_att_val = 0;   // scale attribute value for min
-    int counter = 0;               // used to get type of time scale bounds
-
-    // We are going to allow
-    // 1. a number =  just the number of time scale default start = 0
-    // 2. start/stride/count 3 components
-    // 3. min/max range where this mesh is used
-    // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create scale attributes
-
-    /* We do not fail if this is not given as variables all have nsteps
-       in ADIOS_inq_var = # of times the var was written
-    */
-    if (!timescale){
-        printf("time-scale attribute for mesh: %s not provided.\n", name);
-        return 1;
-    }
 
-    d1 = strdup (timescale);
-    char * ptr_end;
-    c = strtok (d1, ",");
+            saw_dimensions = 1;
+            dimensions = mxmlElementGetAttr (n, "value");
 
-    while (c)
-    {
-        struct adios_var_struct * var = 0;
-        //if (adios_int_is_num (c))
-        if (!strtod (c,&ptr_end))
-        {
-            var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var)
+            if (!dimensions)
             {
-                log_warn ("config.xml: invalid variable %s\n"
-                                 "for time scale of mesh: %s\n"
-                                 ,c
-                                 ,name
+                log_warn ("config.xml: value attribute on "
+                        "dimensions required (%s)\n"
+                        ,name
                         );
-                free (d1);
+                return 0;
+            }
 
+            if (!adios_define_mesh_uniform_dimensions (dimensions, new_group, name))
                 return 0;
+        } else
+            if (!strcasecmp (n->value.element.name, "origin"))
+            {
+                const char * value;
 
-            }else{
-                // Found variable ==> create a dims attribute for it.
-                if (counter == 0){
-                    gettscalefrom0 = 0;
-                    gettscalefrom0 = strdup(c);
-                }else if (counter == 1){
-                    gettscalefrom1 = 0;
-                    gettscalefrom1 = strdup(c);
-                }else if (counter == 2){
-                    gettscalefrom2 = 0;
-                    gettscalefrom2 = strdup(c);
-                }
-                counter++;
-            }
-        }
-        else
-        {
-            if (counter == 0){
-                gettscalefrom0 = 0;
-                gettscalefrom0 = strdup(c);
-            }else if (counter == 1){
-                gettscalefrom1 = 0;
-                gettscalefrom1 = strdup(c);
-            }else if (counter == 2){
-                gettscalefrom2 = 0;
-                gettscalefrom2 = strdup(c);
-            }
-            counter++;
-        }
+                if (saw_origin)
+                {
+                    log_warn ("config.xml: only one origin definition "
+                            "allowed per mesh uniform (%s)\n"
+                            ,name
+                            );
 
-        c = strtok (NULL, ",");
-    }
+                    return 0;
+                }
 
-    if (counter == 3){
-        time_start_att_val = strdup(gettscalefrom0);
-        conca_mesh_att_nam(&time_start_att_nam, name, "time-scale-start");
-        // if this is string
-        if (!strtod (time_start_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
-        time_stride_att_val = strdup(gettscalefrom1);
-        conca_mesh_att_nam(&time_stride_att_nam, name, "time-scale-stride");
-        // if this is string
-        if (!strtod (time_stride_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
-        time_count_att_val = strdup(gettscalefrom2);
-        conca_mesh_att_nam(&time_count_att_nam, name, "time-scale-count");
-        // if this is string
-        if (!strtod (time_count_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
-         free(time_start_att_val);
-         free(time_stride_att_val);
-         free(time_count_att_val);
-         free(gettscalefrom2);
-         free(gettscalefrom1);
-         free(gettscalefrom0);
-    }else if (counter == 2) {
-        time_min_att_val = strdup(gettscalefrom0);
-        conca_mesh_att_nam(&time_min_att_nam, name, "time-scale-min");
-        // if this is string
-        if (!strtod (time_min_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
-        time_max_att_val = strdup(gettscalefrom1);
-        conca_mesh_att_nam(&time_max_att_nam, name, "time-scale-max");
-        // if this is string
-        if (!strtod (time_max_att_val, &ptr_end))
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
-         free(time_min_att_val);
-         free(time_max_att_val);
-         free(gettscalefrom1);
-         free(gettscalefrom0);
-    } else if (counter == 1){
-        time_var_att_val = strdup(gettscalefrom0);
-        if (!strtod (time_var_att_val, &ptr_end)){
-            conca_mesh_att_nam(&time_var_att_nam, name, "time-scale-var");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
-        }else{
-            conca_mesh_att_nam(&time_var_att_nam, name, "time-scale-count");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
-       }
-       free(gettscalefrom0);
-       free(time_var_att_val);
-    }else{
-       printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
-       free(d1);
-       return 0;
-    }
-      
-    free (d1);
+                saw_origin = 1;
+                value = mxmlElementGetAttr (n, "value");
 
-    return 1;
-}
- 
-// Parse var hyper slab: lines or planes from a higher dimension mesh
-static int parseVarHyperSlab ( const char * hyperslab,
-                                struct adios_group_struct * new_group,
-                                const char * name)
-{
-    char * c;                      // comma location
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * gethslabfrom0 = 0;     // hslab attribute xml value
-    char * gethslabfrom1 = 0;     // hslab attribute xml value
-    char * gethslabfrom2 = 0;     // hslab attribute xml value
-    char * hslab_var_att_nam = 0;   // hslab attribute name for var or num
-    char * hslab_start_att_nam = 0; // hslab attribute name for start
-    char * hslab_stride_att_nam = 0;// hslab attribute name for stride
-    char * hslab_count_att_nam = 0; // hslab attribute name for count
-    char * hslab_max_att_nam = 0;   // hslab attribute name for max
-    char * hslab_min_att_nam = 0;   // hslab attribute name for min
-    char * hslab_var_att_val = 0;   // hslab attribute value for var or num
-    char * hslab_start_att_val = 0; // hslab attribute value for start 
-    char * hslab_stride_att_val = 0;// hslab attribute value for stride
-    char * hslab_count_att_val = 0; // hslab attribute value for count
-    char * hslab_max_att_val = 0;   // hslab attribute value for max
-    char * hslab_min_att_val = 0;   // hslab attribute value for min
-    int counter = 0;               // used to get type of time hslab bounds
-    // We are going to allow
-    // 1. start/stride/count 3 components - indices of the mesh dimensions
-    // 2. min/max range of the mesh dimensions
-    
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
-
-    /* We do not fail if this is not given as variables all have nsteps
-       in ADIOS_inq_var = # of times the var was written
-    */
-    if (!hyperslab){
-        return 1;
-    }
+                if (!value)
+                {
+                    log_warn ("config.xml: value attribute on "
+                            "origin required (%s)\n"
+                            ,name
+                            );
 
-    d1 = strdup (hyperslab);
+                    return 0;
+                }
 
-    c = strtok (d1, ",");
+                if (!adios_define_mesh_uniform_origins (value, new_group, name))
+                    return 0;
+            } else
+                if (!strcasecmp (n->value.element.name, "spacing"))
+                {
+                    const char * value;
 
-    while (c)
-    {
-        if (counter == 0){
-            gethslabfrom0 = 0;
-            gethslabfrom0 = strdup(c);
-        }else if (counter == 1){
-            gethslabfrom1 = 0;
-            gethslabfrom1 = strdup(c);
-        }else if (counter == 2){
-            gethslabfrom2 = 0;
-            gethslabfrom2 = strdup(c);
-        }
-        counter++;
-        c = strtok (NULL, ",");
-    }
-    // TODO: these should be ints only, no decimal for start, stride count, not any number should work
-    if (counter == 3){
-        hslab_start_att_val = strdup(gethslabfrom0);
-        conca_var_att_nam(&hslab_start_att_nam, name, "start");
-        adios_common_define_attribute (p_new_group,hslab_start_att_nam,"/",adios_string,hslab_start_att_val,"");
-        hslab_stride_att_val = strdup(gethslabfrom1);
-        conca_var_att_nam(&hslab_stride_att_nam, name, "stride");
-        adios_common_define_attribute (p_new_group,hslab_stride_att_nam,"/",adios_string,hslab_stride_att_val,"");
-        hslab_count_att_val = strdup(gethslabfrom2);
-        conca_var_att_nam(&hslab_count_att_nam, name, "count");
-        adios_common_define_attribute (p_new_group,hslab_count_att_nam,"/",adios_string,hslab_count_att_val,"");
-         free(hslab_start_att_val);
-         free(hslab_stride_att_val);
-         free(hslab_count_att_val);
-         free(gethslabfrom2);
-         free(gethslabfrom1);
-         free(gethslabfrom0);
-    }else if (counter == 2) {
-        hslab_min_att_val = strdup(gethslabfrom0);
-        conca_var_att_nam(&hslab_min_att_nam, name, "min");
-        adios_common_define_attribute (p_new_group,hslab_min_att_nam,"/",adios_string,hslab_min_att_val,"");
-        hslab_max_att_val = strdup(gethslabfrom1);
-        conca_var_att_nam(&hslab_max_att_nam, name, "max");
-        adios_common_define_attribute (p_new_group,hslab_max_att_nam,"/",adios_string,hslab_max_att_val,"");
-         free(hslab_min_att_val);
-         free(hslab_max_att_val);
-         free(gethslabfrom1);
-         free(gethslabfrom0);
-    }else{
-       printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
-       free(d1);
-       return 0;
-    }
+                    if (saw_spacing)
+                    {
+                        log_warn ("config.xml: only one spacing "
+                                "definition allowed per mesh uniform (%s)\n"
+                                ,name
+                                );
 
-    free (d1);
+                        return 0;
+                    }
 
-    return 1;
+                    saw_spacing = 1;
+                    value = mxmlElementGetAttr (n, "value");
 
-}
+                    if (!value)
+                    {
+                        log_warn ("config.xml: value attribute on "
+                                "spacing required (%s)\n"
+                                ,name
+                                );
 
+                        return 0;
+                    }
 
-// Parse var time steps (integers = number of times vars are written)
-static int parseVarTimeSteps (const char * timesteps
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * c;                      // comma location
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * gettstepsfrom0 = 0;     // tstep attribute xml value
-    char * gettstepsfrom1 = 0;     // tstep attribute xml value
-    char * gettstepsfrom2 = 0;     // tstep attribute xml value
-    char * time_var_att_nam = 0;   // tstep attribute name for var or num
-    char * time_start_att_nam = 0; // tstep attribute name for start
-    char * time_stride_att_nam = 0;// tstep attribute name for stride
-    char * time_count_att_nam = 0; // tstep attribute name for count
-    char * time_max_att_nam = 0;   // tstep attribute name for max
-    char * time_min_att_nam = 0;   // tstep attribute name for min
-    char * time_var_att_val = 0;   // tstep attribute value for var or num
-    char * time_start_att_val = 0; // tstep attribute value for start 
-    char * time_stride_att_val = 0;// tstep attribute value for stride
-    char * time_count_att_val = 0; // tstep attribute value for count
-    char * time_max_att_val = 0;   // tstep attribute value for max
-    char * time_min_att_val = 0;   // tstep attribute value for min
-    int counter = 0;               // used to get type of time steps bounds
-
-    // We are going to allow
-    // 1. a number =  just the number - a multiple of mesh time step 
-    // 2. start/stride/count 3 components - indices of the mesh time steps
-    // 3. min/max range of the mesh time step
-    // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
-
-    /* We do not fail if this is not given as variables all have nsteps
-       in ADIOS_inq_var = # of times the var was written
-    */
-    if (!timesteps){
-        return 1;
-    }
+                    if (!adios_define_mesh_uniform_spacings (value, new_group, name))
+                        return 0;
+                } else
+                    if (!strcasecmp (n->value.element.name, "maximum"))
+                    {
+                        const char * value;
 
-    d1 = strdup (timesteps);
+                        if (saw_maximum)
+                        {
+                            log_warn ("config.xml: only one maximum "
+                                    "definition allowed per mesh uniform (%s)\n"
+                                    ,name
+                                    );
 
-    c = strtok (d1, ",");
+                            return 0;
+                        }
 
-    while (c)
-    {
-        struct adios_var_struct * var = 0;
-        if (adios_int_is_var (c))
-        {
-            var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var)
-            {
-                log_warn ("config.xml: invalid variable %s\n"
-                                 "for time-steps of var: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
+                        saw_maximum = 1;
+                        value = mxmlElementGetAttr (n, "value");
 
-                return 0;
+                        if (!value)
+                        {
+                            log_warn ("config.xml: value attribute on "
+                                    "max required (%s)\n"
+                                    ,name
+                                    );
 
-            }else{
-                // Found variable ==> create a dims attribute for it.
-                if (counter == 0){
-                    gettstepsfrom0 = 0;
-                    gettstepsfrom0 = strdup(c);
-                }else if (counter == 1){
-                    gettstepsfrom1 = 0;
-                    gettstepsfrom1 = strdup(c);
-                }else if (counter == 2){
-                    gettstepsfrom2 = 0;
-                    gettstepsfrom2 = strdup(c);
-                }
-                counter++;
-            }
-        }
-        else
-        {
-            if (counter == 0){
-                gettstepsfrom0 = 0;
-                gettstepsfrom0 = strdup(c);
-            }else if (counter == 1){
-                gettstepsfrom1 = 0;
-                gettstepsfrom1 = strdup(c);
-            }else if (counter == 2){
-                gettstepsfrom2 = 0;
-                gettstepsfrom2 = strdup(c);
-            }
-            counter++;
-        }
+                            return 0;
+                        }
 
-        c = strtok (NULL, ",");
+                        if (!adios_define_mesh_uniform_maximums (value, new_group, name))
+                            return 0;
+                    } else
+                    {
+                        if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                        {
+                            continue;
+                        }
+                    }
     }
 
-    if (counter == 3){
-        time_start_att_val = strdup(gettstepsfrom0);
-        conca_var_att_nam(&time_start_att_nam, name, "time-steps-start");
-        // if this is string
-        if (adios_int_is_var (time_start_att_val))
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
-        time_stride_att_val = strdup(gettstepsfrom1);
-        conca_var_att_nam(&time_stride_att_nam, name, "time-steps-stride");
-        // if this is string
-        if (adios_int_is_var (time_stride_att_val))
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
-        time_count_att_val = strdup(gettstepsfrom2);
-        conca_var_att_nam(&time_count_att_nam, name, "time-steps-count");
-        // if this is string
-        if (adios_int_is_var (time_count_att_val))
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
-         free(time_start_att_val);
-         free(time_stride_att_val);
-         free(time_count_att_val);
-         free(gettstepsfrom2);
-         free(gettstepsfrom1);
-         free(gettstepsfrom0);
-    }else if (counter == 2) {
-        time_min_att_val = strdup(gettstepsfrom0);
-        conca_var_att_nam(&time_min_att_nam, name, "time-steps-min");
-        // if this is string
-        if (adios_int_is_var (time_min_att_val))
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
-        time_max_att_val = strdup(gettstepsfrom1);
-        conca_var_att_nam(&time_max_att_nam, name, "time-steps-max");
-        // if this is string
-        if (adios_int_is_var (time_max_att_val))
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
-         free(time_min_att_val);
-         free(time_max_att_val);
-         free(gettstepsfrom1);
-         free(gettstepsfrom0);
-    } else if (counter == 1){
-        time_var_att_val = strdup(gettstepsfrom0);
-        if (adios_int_is_var (time_var_att_val)){
-            conca_var_att_nam(&time_var_att_nam, name, "time-steps-var");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
-        }else{
-            conca_var_att_nam(&time_var_att_nam, name, "time-steps-count");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
-       }
-       free(time_var_att_val);
-       free(gettstepsfrom0);
-    }else{
-       printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
-       free(d1);
-       return 0;
-    }
-    
-    free (d1);
-    
     return 1;
 }
 
-// Parse mesh time steps (integers = number of times vars are written)
-static int parseMeshTimeSteps (const char * timesteps
-                                      ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
+int parseMeshRectilinear1 (mxml_node_t * node
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
 {
-    char * c;                      // comma location
-    char * d1;                     // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * gettstepsfrom0 = 0;     // tstep attribute xml value
-    char * gettstepsfrom1 = 0;     // tstep attribute xml value
-    char * gettstepsfrom2 = 0;     // tstep attribute xml value
-    char * time_var_att_nam = 0;   // tstep attribute name for var or num
-    char * time_start_att_nam = 0; // tstep attribute name for start
-    char * time_stride_att_nam = 0;// tstep attribute name for stride
-    char * time_count_att_nam = 0; // tstep attribute name for count
-    char * time_max_att_nam = 0;   // tstep attribute name for max
-    char * time_min_att_nam = 0;   // tstep attribute name for min
-    char * time_var_att_val = 0;   // tstep attribute value for var or num
-    char * time_start_att_val = 0; // tstep attribute value for start 
-    char * time_stride_att_val = 0;// tstep attribute value for stride
-    char * time_count_att_val = 0; // tstep attribute value for count
-    char * time_max_att_val = 0;   // tstep attribute value for max
-    char * time_min_att_val = 0;   // tstep attribute value for min
-    int counter = 0;               // used to get type of time steps bounds
-
-    // We are going to allow
-    // 1. a number =  just the number of time steps default start = 0
-    // 2. start/stride/count 3 components
-    // 3. min/max range where this mesh is used
-    // 4. An ADIOS var = time could be a list of int stored by user
-    char counterstr[5] = {0,0,0,0,0}; // used to create tsteps attributes
-
-    /* We do not fail if this is not given as variables all have nsteps
-       in ADIOS_inq_var = # of times the var was written
-    */
-    if (!timesteps){
-        printf("time-steps for mesh %s attribute not provided.\n", name);
-        return 1;
-    }
-
-    d1 = strdup (timesteps);
-
-    c = strtok (d1, ",");
+    mxml_node_t * n;
+    int saw_dimensions = 0;
+    int saw_coordinates_multi_var = 0;
+    int saw_coordinates_single_var = 0;
 
-    while (c)
+    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
+            ;n
+            ;n = mxmlWalkNext (n, node, MXML_DESCEND)
+        )
     {
-        struct adios_var_struct * var = 0;
-        if (adios_int_is_var (c))
+        if (n->type != MXML_ELEMENT)
         {
-            var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var)
+            continue;
+        }
+
+        if (!strcasecmp (n->value.element.name, "dimensions"))
+        {
+            const char * value;
+
+            if (saw_dimensions)
             {
-                log_warn ("config.xml: invalid variable %s\n"
-                                 "for dimensions of mesh: %s\n"
-                                 ,c
-                                 ,name
+                log_warn ("config.xml: only one dimensions "
+                        "definition allowed per mesh rectilinear (%s)\n"
+                        ,name
                         );
-                free (d1);
 
                 return 0;
-
-            }else{
-                // Found variable ==> create a dims attribute for it.
-                if (counter == 0){
-                    gettstepsfrom0 = 0;
-                    gettstepsfrom0 = strdup(c);
-                }else if (counter == 1){
-                    gettstepsfrom1 = 0;
-                    gettstepsfrom1 = strdup(c);
-                }else if (counter == 2){
-                    gettstepsfrom2 = 0;
-                    gettstepsfrom2 = strdup(c);
-                }
-                counter++;
-            }
-        }
-        else
-        {
-            if (counter == 0){
-                gettstepsfrom0 = 0;
-                gettstepsfrom0 = strdup(c);
-            }else if (counter == 1){
-                gettstepsfrom1 = 0;
-                gettstepsfrom1 = strdup(c);
-            }else if (counter == 2){
-                gettstepsfrom2 = 0;
-                gettstepsfrom2 = strdup(c);
             }
-            counter++;
-        }
-
-        c = strtok (NULL, ",");
-    }
-
-    if (counter == 3){
-        time_start_att_val = strdup(gettstepsfrom0);
-        conca_mesh_att_nam(&time_start_att_nam, name, "time-steps-start");
-        // if this is string
-        if (adios_int_is_var (time_start_att_val))
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_string,time_start_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_start_att_nam,"/",adios_double,time_start_att_val,"");
-        time_stride_att_val = strdup(gettstepsfrom1);
-        conca_mesh_att_nam(&time_stride_att_nam, name, "time-steps-stride");
-        // if this is string
-        if (adios_int_is_var (time_stride_att_val))
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_string,time_stride_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_stride_att_nam,"/",adios_double,time_stride_att_val,"");
-        time_count_att_val = strdup(gettstepsfrom2);
-        conca_mesh_att_nam(&time_count_att_nam, name, "time-steps-count");
-        // if this is string
-        if (adios_int_is_var (time_count_att_val))
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_string,time_count_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_count_att_nam,"/",adios_double,time_count_att_val,"");
-         free(time_start_att_val);
-         free(time_stride_att_val);
-         free(time_count_att_val);
-         free(gettstepsfrom2);
-         free(gettstepsfrom1);
-         free(gettstepsfrom0);
-    }else if (counter == 2) {
-        time_min_att_val = strdup(gettstepsfrom0);
-        conca_mesh_att_nam(&time_min_att_nam, name, "time-steps-min");
-        // if this is string
-        if (adios_int_is_var (time_min_att_val))
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_string,time_min_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_min_att_nam,"/",adios_double,time_min_att_val,"");
-        time_max_att_val = strdup(gettstepsfrom1);
-        conca_mesh_att_nam(&time_max_att_nam, name, "time-steps-max");
-        // if this is string
-        if (adios_int_is_var (time_max_att_val))
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_string,time_max_att_val,"");
-        else
-            adios_common_define_attribute (p_new_group,time_max_att_nam,"/",adios_double,time_max_att_val,"");
-         free(time_min_att_val);
-         free(time_max_att_val);
-         free(gettstepsfrom1);
-         free(gettstepsfrom0);
-    } else if (counter == 1){
-        time_var_att_val = strdup(gettstepsfrom0);
-        if (adios_int_is_var (time_var_att_val)){
-            conca_mesh_att_nam(&time_var_att_nam, name, "time-steps-var");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_string,time_var_att_val,"");
-        }else{
-            conca_mesh_att_nam(&time_var_att_nam, name, "time-steps-count");
-            adios_common_define_attribute (p_new_group,time_var_att_nam,"/",adios_double,time_var_att_val,"");
-       }
-       free(time_var_att_val);
-       free(gettstepsfrom0);
-    }else{
-       printf("Error: time format not recognized.\nPlease check documentation for time formatting.\n");
-       free(d1);
-       return 0;
-    }
-    
-    free (d1);
-    
-    return 1;
-}
-
-static int parseMeshUniformDimensions0 (const char * dimensions
-                                      ,struct adios_group_struct * new_group
-                                      ,struct adios_mesh_uniform_struct * mesh
-                                      ,const char * name
-                                      )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required for"
-                         "uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshUniformDimensions of mesh: %s\n"
-                             ,name
-                    );
-            free (d1);
 
-            return 0;
-        }
+            saw_dimensions = 1;
+            value = mxmlElementGetAttr (n, "value");
 
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
+            if (!value)
             {
-                log_warn ("config.xml: invalid variable %s\n"
-                                 "for dimensions of mesh: %s\n"
-                                 ,c
-                                 ,name
+                log_warn ("config.xml: value attribute on "
+                        "dimensions required (%s)\n"
+                        ,name
                         );
-                free (d1);
 
                 return 0;
-
-            }else{
-                // Found variable ==> create a dims attribute for it.
-                // char * getdimsfrom = 0;
-                getdimsfrom = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&getdimsfrom, name, "dimensions", counterstr);
-                adios_common_define_attribute (p_new_group,getdimsfrom,"/",adios_string,item->item.var->name,"");
-                free (getdimsfrom);
-                counter++;
             }
-        }
-        else
-        {
-            item->item.rank = strtod (c, 0);
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            dim_att_nam = 0;
-            conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-            adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_double,c,"");
-            free (dim_att_nam);
-            item->item.var = 0;
-            counter++;
-        }
 
-        adios_append_mesh_item (&(mesh->dimensions), item);
+            if (!adios_define_mesh_rectilinear_dimensions (value, new_group, name))
+                return 0;
+        } else
+            if (!strcasecmp (n->value.element.name, "coordinates-multi-var"))
+            {
+                const char * value;
 
-        c = strtok (NULL, ",");
-    }
+                if (saw_coordinates_multi_var || saw_coordinates_single_var)
+                {
+                    log_warn ("config.xml: only one coordinates "
+                            "definition allowed per mesh rectilinear (%s)\n"
+                            ,name
+                            );
 
-    char * dims = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
+                    return 0;
+                }
 
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
+                saw_coordinates_multi_var = 1;
+                value = mxmlElementGetAttr (n, "value");
 
-    free (dims);
+                if (!value)
+                {
+                    log_warn ("config.xml: value attribute on "
+                            "coordinates-multi-var required (%s)\n"
+                            ,name
+                            );
 
-    free (d1);
+                    return 0;
+                }
 
-    return 1;
-}
-
-static int parseMeshUniformDimensions1 (const char * dimensions
-        							  ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required for"
-                         "uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        dim_att_nam = 0;
-        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
-        free (dim_att_nam);
-        counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * dims = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
-
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
-
-    free (dims);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUniformMaximums0 (const char * maximum
-                                      ,struct adios_group_struct * new_group
-                                      ,struct adios_mesh_uniform_struct * mesh
-                                      ,const char * name
-                                      )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * max_att_nam = 0; // maxima attribute name   
-    char * getmaxafrom = 0; // maxima attribute name that is a var
-    int counter = 0;        // used to create maxX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create maxX attributes
-
-    if (!maximum)
-    {
-         log_warn ("config.xml: maximum value required"
-                         "for uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (maximum);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshUniformMaximums of mesh: %s\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
-            {
-                log_warn ("config.xml: invalid variable %s for maximum\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else{
-                // Found variable ==> create a maxa attribute for it.
-                // char * getmaxafrom = 0;
-                getmaxafrom = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&getmaxafrom, name, "maximums", counterstr);
-                adios_common_define_attribute (p_new_group,getmaxafrom,"/",adios_string,item->item.var->name,"");
-                free (getmaxafrom);
-                counter++;
-            }
-        }
-        else
-        {
-            // Create attributes for each maximum
-            item->item.rank = strtod (c, 0);
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            max_att_nam = 0;
-            conca_mesh_numb_att_nam(&max_att_nam, name, "maximums", counterstr);
-            adios_common_define_attribute (p_new_group,max_att_nam,"/",adios_double,c,"");
-            free (max_att_nam);
-            item->item.var = 0;
-            counter++;        
-        }
-
-        adios_append_mesh_item (&(mesh->maximum), item);
-
-        c = strtok (NULL, ",");
-    }
-
-    char * maxa = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    maxa = 0;
-    conca_mesh_att_nam(&maxa, name, "maximums-num");
-    adios_common_define_attribute (p_new_group,maxa,"/",adios_double,counterstr,"");
-    free (maxa);
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUniformMaximums1 (const char * maximum
-        							  ,struct adios_group_struct * new_group
-                                      ,const char * name
-                                      )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    char * max_att_nam = 0; // maxima attribute name
-    char * getmaxafrom = 0; // maxima attribute name that is a var
-    int counter = 0;        // used to create maxX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create maxX attributes
-
-    if (!maximum)
-    {
-         log_warn ("config.xml: maximum value required"
-                         "for uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (maximum);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        max_att_nam = 0;
-        conca_mesh_numb_att_nam(&max_att_nam, name, "maximums", counterstr);
-        adios_common_define_attribute (p_new_group,max_att_nam,"/",adios_string,c,"");
-        free (max_att_nam);
-        counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * maxa = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    maxa = 0;
-    conca_mesh_att_nam(&maxa, name, "maximums-num");
-    adios_common_define_attribute (p_new_group,maxa,"/",adios_double,counterstr,"");
-    free (maxa);
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUniformOrigin0 (const char * origin
-                                  ,struct adios_group_struct * new_group
-                                  ,struct adios_mesh_uniform_struct * mesh
-                                  ,const char * name
-                                  )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * org_att_nam = 0; // origins attribute name   
-    char * getorgsfrom = 0; // origins attribute name that is a var
-    int counter = 0;        // used to create orgX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create orgX attributes
-
-    if (!origin)
-    {
-        log_warn ("config.xml: origin value required "
-                         "for uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (origin);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshUniformOrigin of mesh: %s\n", name);
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
-            {
-                log_warn ("config.xml: invalid variable %s for origin\n"
-                        "of mesh: %s\n"
-                        ,c
-                        ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else{
-                // Found variable ==> create a orgs attribute for it.
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                getorgsfrom = 0;
-                conca_mesh_numb_att_nam(&getorgsfrom, name, "origins", counterstr);
-                adios_common_define_attribute (p_new_group,getorgsfrom,"/",adios_string,item->item.var->name,"");
-                free (getorgsfrom);
-                counter++;
-            }
-        }
-        else
-        {
-            // Create attributes for each origin 
-            item->item.rank = strtod (c, 0);
-            item->item.var = 0;
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            org_att_nam = 0;
-            conca_mesh_numb_att_nam(&org_att_nam, name, "origins", counterstr);
-            adios_common_define_attribute (p_new_group,org_att_nam,"/",adios_double,c,"");
-            free (org_att_nam);
-            counter++;
-        }
-
-        adios_append_mesh_item (&(mesh->origin), item);
-
-        c = strtok (NULL, ",");
-    }
-
-    char * orgs = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    orgs = 0;
-    conca_mesh_att_nam(&orgs, name, "origins-num");
-    adios_common_define_attribute (p_new_group,orgs,"/",adios_double,counterstr,"");
-    free (orgs);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUniformOrigin1 (const char * origin
-        						  ,struct adios_group_struct * new_group
-                                  ,const char * name
-                                  )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * org_att_nam = 0; // origins attribute name
-    char * getorgsfrom = 0; // origins attribute name that is a var
-    int counter = 0;        // used to create orgX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create orgX attributes
-
-    if (!origin)
-    {
-        log_warn ("config.xml: origin value required "
-                         "for uniform mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (origin);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        org_att_nam = 0;
-        conca_mesh_numb_att_nam(&org_att_nam, name, "origins", counterstr);
-        adios_common_define_attribute (p_new_group,org_att_nam,"/",adios_double,c,"");
-        free (org_att_nam);
-        counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * orgs = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    orgs = 0;
-    conca_mesh_att_nam(&orgs, name, "origins-num");
-    adios_common_define_attribute (p_new_group,orgs,"/",adios_double,counterstr,"");
-
-    free (orgs);
-    free (d1);
-    return 1;
-}
-
-static int parseMeshUniformSpacings0 (const char * spacing
-                                   ,struct adios_group_struct * new_group
-                                   ,struct adios_mesh_uniform_struct * mesh
-                                   ,const char * name
-                                   )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * spa_att_nam = 0; // spacings attribute name   
-    char * getspasfrom = 0; // spacings attribute name that is a var
-    int counter = 0;        // used to create spaX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create spaX attributes if (!spacing)
-
-    if (!spacing)
-    {
-        log_warn ("config.xml: mesh uniform spacing value "
-                "required for mesh: %s\n"
-                ,name
-                );
-        return 0;
-    }
-
-    d1 = strdup (spacing);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshUniformSpacings for mesh: %s\n", name);
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
-            {
-                log_warn ("config.xml: invalid variable: %s for spacing\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else{
-                // Found variable ==> create a spas attribute for it.
-                // char * getspasfrom = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                getspasfrom = 0;
-                conca_mesh_numb_att_nam(&getspasfrom, name, "spacings", counterstr);
-                adios_common_define_attribute (p_new_group,getspasfrom,"/",adios_string,item->item.var->name,"");
-                free (getspasfrom);
-                counter++;
-            }
-        }
-        else
-        {
-            // Create attributes for each dimension
-            item->item.rank = strtod (c, 0);
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            spa_att_nam = 0;
-            conca_mesh_numb_att_nam(&spa_att_nam, name, "spacings", counterstr);
-            adios_common_define_attribute (p_new_group,spa_att_nam,"/",adios_double,c,"");
-            free (spa_att_nam);
-            item->item.var = 0;
-            counter++;
-        }
-
-        adios_append_mesh_item (&(mesh->origin), item);
-
-        c = strtok (NULL, ",");
-    }
-
-    char * spas = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    spas = 0;
-    conca_mesh_att_nam(&spas, name, "spacings-num");
-    adios_common_define_attribute (p_new_group,spas,"/",adios_double,counterstr,"");
-    free (spas);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUniformSpacings1 (const char * spacing
-        						   ,struct adios_group_struct * new_group
-                                   ,const char * name
-                                   )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * spa_att_nam = 0; // spacings attribute name
-    char * getspasfrom = 0; // spacings attribute name that is a var
-    int counter = 0;        // used to create spaX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create spaX attributes if (!spacing)
-
-    if (!spacing)
-    {
-        log_warn ("config.xml: mesh uniform spacing value "
-                "required for mesh: %s\n"
-                ,name
-                );
-        return 0;
-    }
-
-    d1 = strdup (spacing);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-		item->item.rank = strtod (c, 0);
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		spa_att_nam = 0;
-		conca_mesh_numb_att_nam(&spa_att_nam, name, "spacings", counterstr);
-		adios_common_define_attribute (p_new_group,spa_att_nam,"/",adios_string,c,"");
-		free (spa_att_nam);
-		item->item.var = 0;
-		counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * spas = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    spas = 0;
-    conca_mesh_att_nam(&spas, name, "spacings-num");
-    adios_common_define_attribute (p_new_group,spas,"/",adios_double,counterstr,"");
-    free (spas);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearDimensions0 (const char * dimensions
-                                          ,struct adios_group_struct * new_group
-                                          ,struct adios_mesh_rectilinear_struct * mesh
-                                          ,const char * name
-                                          )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshRectilinearDimensions for mesh: %s\n"
-                             ,name
-                             );
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
-            {
-                log_warn ("config.xml: invalid variable: %s for dimensions\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else
-            {
-                // Found variable ==> create a dims attribute for it.
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                getdimsfrom = 0;
-                conca_mesh_numb_att_nam(&getdimsfrom, name, "dimensions", counterstr);
-                adios_common_define_attribute (p_new_group,getdimsfrom,"/",adios_string,item->item.var->name,"");
-                free (getdimsfrom);
-                counter++;
-            }
-        }
-        else
-        {
-            // Create attributes for each dimension
-            item->item.rank = strtod (c, 0);
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            dim_att_nam = 0;
-            conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-            adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_double,c,"");
-            free (dim_att_nam);
-            item->item.var = 0;
-            counter++;
-        }
-
-        adios_append_mesh_item (&(mesh->dimensions), item);
-
-        c = strtok (NULL, ",");
-    }
-
-    char * dims = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
-
-    free (dims);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearDimensions1 (const char * dimensions
-										  ,struct adios_group_struct * new_group
-                                          ,const char * name
-                                          )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        dim_att_nam = 0;
-        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
-        free (dim_att_nam);
-        counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * dims = 0;
-    counterstr[0] = '\0';    
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
-
-    free (dims); 
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearCoordinatesMultiVar0 (const char * coordinates
-                                                   ,struct adios_group_struct * new_group
-                                                   ,struct adios_mesh_rectilinear_struct * mesh
-                                                   ,const char * name
-                                                   )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * coo_att_nam = 0; // coordinates attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!coordinates)
-    {
-        log_warn ("config.xml: coordinates-multi-var value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (coordinates);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        var = (struct adios_mesh_var_list_struct *) malloc
-                        (sizeof (struct adios_mesh_var_list_struct));
-        var->next = 0;
-
-        if (!var)
-        {
-            log_warn ("Out of memory parseMeshRectilinearCoordinatesMultiVar\n"
-                             "for mesh: %s"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            var->var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var->var)
-            {
-                log_warn ("config.xml: invalid variable: %s for coordinates\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else
-            {
-                // Found variable ==> create a coords attribute for it.
-                coo_att_nam = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&coo_att_nam, name, "coords-multi-var", counterstr);
-                adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,c,"");
-                free (coo_att_nam);
-                counter++;
-            }
-        }
-        else
-        {
-            var->var = 0;
-            log_warn ("config.xml: invalid variable: %s for coordinates"
-                             "of rectilinear mesh: %s\n"
-                             ,c
-                             ,name
-                    );
-            free (d1);
-            return 0;
-        }
-
-        adios_append_mesh_var (&(mesh->coordinates), var);
-
-        c = strtok (NULL, ",");
-    }
-
-    // At this points, coordinates should point to at least 2 variables
-    // otherwise let the user know to use the coordinates-single-var tag
-    if (counter > 1) {
-        char * coords = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&coords, name, "coords-multi-var-num");
-        adios_common_define_attribute (p_new_group,coords,"/",adios_double,counterstr,"");
-        free (coords);
-    } else
-    {
-        log_warn ("config.xml: coordinates-multi-var expects "
-                         "at least 2 variables (%s)\n"
-                         ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearCoordinatesMultiVar1 (const char * coordinates
-												   ,struct adios_group_struct * new_group
-                                                   ,const char * name
-                                                   )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * coo_att_nam = 0; // coordinates attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!coordinates)
-    {
-        log_warn ("config.xml: coordinates-multi-var value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (coordinates);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-		coo_att_nam = 0;
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		conca_mesh_numb_att_nam(&coo_att_nam, name, "coords-multi-var", counterstr);
-		adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,c,"");
-		free (coo_att_nam);
-		counter++;
-        c = strtok (NULL, ",");
-    }
-
-    // At this points, coordinates should point to at least 2 variables
-    // otherwise let the user know to use the coordinates-single-var tag
-    if (counter > 1) {
-        char * coords = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&coords, name, "coords-multi-var-num");
-        adios_common_define_attribute (p_new_group,coords,"/",adios_double,counterstr,"");
-        free (coords);
-    } else
-    {
-        log_warn ("config.xml: coordinates-multi-var expects "
-                         "at least 2 variables (%s)\n"
-                         ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearCoordinatesSingleVar0 (const char * coordinates
-                                                    ,struct adios_group_struct * new_group
-                                                    ,struct adios_mesh_rectilinear_struct * mesh
-                                                    ,const char * name
-                                                    )
-{
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * coo_att_nam = 0; // coordinates attribute name
-
-    if (!coordinates)
-    {
-        log_warn ("config.xml: coordinates-single-var value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (coordinates);
-
-    var = (struct adios_mesh_var_list_struct *) malloc
-                    (sizeof (struct adios_mesh_var_list_struct));
-    var->next = 0;
-
-    if (!var)
-    {
-        log_warn ("Out of memory parseMeschRectilinearCoordinatesSingleVar\n");
-        free (d1);
-
-        return 0;
-     }
-
-     if (adios_int_is_var (d1))
-     {
-        var->var =
-               adios_find_var_by_name (new_group->vars, d1
-                                      ,new_group->all_unique_var_names
-                                      );
-        if (!var->var)
-        {
-            log_warn ("config.xml: invalid variable: %s for coordinates"
-                             "of mesh: %s\n"
-                             ,d1
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            // Found variable ==> create a nvars attribute for it.
-            conca_mesh_att_nam(&coo_att_nam, name, "coords-single-var");
-            adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,d1,"");
-            free (coo_att_nam);
-        }
-    }
-    else
-    {
-        var->var = 0;
-        log_warn ("config.xml: invalid variable: %s for coordinates of mesh: %s\n"
-                                 ,d1
-                                 ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    adios_append_mesh_var (&(mesh->coordinates), var);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshRectilinearCoordinatesSingleVar1 (const char * coordinates
-													,struct adios_group_struct * new_group
-                                                    ,const char * name
-                                                    )
-{
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * coo_att_nam = 0; // coordinates attribute name
-
-    if (!coordinates)
-    {
-        log_warn ("config.xml: coordinates-single-var value required"
-                         "for rectilinear mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (coordinates);
-	conca_mesh_att_nam(&coo_att_nam, name, "coords-single-var");
-	adios_common_define_attribute (p_new_group,coo_att_nam,"/",adios_string,d1,"");
-	free (coo_att_nam);
-    free (d1);
-    return 1;
-}
-
-static int parseMeshStructuredNspace0 (const char * nspace
-                                     ,struct adios_group_struct * new_group
-                                     ,struct adios_mesh_structured_struct * mesh
-                                     ,const char * name
-                                     )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * nsp_att_nam = 0; // nspace attribute name
-
-    if (!nspace)
-    {
-        log_warn ("config.xml: npsace value required "
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (nspace);
-
-    item = (struct adios_mesh_item_struct *) malloc
-                            (sizeof (struct adios_mesh_item_struct));
-
-    if (!item)
-    {
-        log_warn ("Out of memory parseMeshStructuredNspace for mesh: %s\n", name);
-        free (d1);
-
-        return 0;
-    }
-
-    conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
-
-    if (adios_int_is_var (nspace))
-    {
-        item->rank = 0.0;
-        item->var =
-               adios_find_var_by_name (new_group->vars, nspace
-                                       ,new_group->all_unique_var_names
-                                       );
-        if (!item->var)
-        {
-           log_warn ("config.xml: invalid variable: %s for nspace of mesh: %s\n"
-                            ,nspace
-                            ,name
-                   );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,item->var->name,"");
-            free (nsp_att_nam);
-        }
-    }
-    else
-    {
-        item->rank = strtod (nspace, 0);
-        adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_double,nspace,"");
-        free (nsp_att_nam);
-        item->var = 0;
-    }
-
-    mesh->nspace = item;
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredNspace1 (const char * nspace
-									 ,struct adios_group_struct * new_group
-                                     ,const char * name
-                                     )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * nsp_att_nam = 0; // nspace attribute name
-
-    if (!nspace)
-    {
-        log_warn ("config.xml: npsace value required "
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (nspace);
-    conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
-    adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_double,nspace,"");
-    free (nsp_att_nam);
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredDimensions0 (const char * dimensions
-                                         ,struct adios_group_struct * new_group
-                                         ,struct adios_mesh_structured_struct * mesh
-                                         ,const char * name
-                                         )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        item = (struct adios_mesh_item_list_struct *) malloc
-                            (sizeof (struct adios_mesh_item_list_struct));
-        item->next = 0;
-
-        if (!item)
-        {
-            log_warn ("Out of memory parseMeshStructuredDimensions of mesh: %s\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            item->item.rank = 0.0;
-            item->item.var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!item->item.var)
-            {
-                log_warn ("config.xml: invalid variable: %s for dimensions\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-
-                free (d1);
-
-                return 0;
-            } else
-            {
-                // Found variable ==> create a dims attribute for it.
-                // char * getdimsfrom = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                getdimsfrom = 0;
-                conca_mesh_numb_att_nam(&getdimsfrom, name, "dimensions", counterstr);
-                adios_common_define_attribute (p_new_group,getdimsfrom,"/",adios_string,item->item.var->name,"");
-                free (getdimsfrom);
-                counter++;
-            }
-        }
-        else
-        {
-            item->item.rank = strtod (c, 0);
-            item->item.var = 0;
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            dim_att_nam = 0;
-            conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-            adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_double,c,"");
-            free (dim_att_nam);
-            counter++;
-
-        }
-
-        adios_append_mesh_item (&(mesh->dimensions), item);
-
-        c = strtok (NULL, ",");
-    }
-
-    char * dims = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
-
-    free (dims);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredDimensions1 (const char * dimensions
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_item_list_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * dim_att_nam = 0; // dimensions attribute name
-    char * getdimsfrom = 0; // dimensions attribute name that is a var
-    int counter = 0;        // used to create dimX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create dimX attributes
-
-    if (!dimensions)
-    {
-        log_warn ("config.xml: dimensions value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (dimensions);
-    c = strtok (d1, ",");
-    while (c)
-    {
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        dim_att_nam = 0;
-        conca_mesh_numb_att_nam(&dim_att_nam, name, "dimensions", counterstr);
-        adios_common_define_attribute (p_new_group,dim_att_nam,"/",adios_string,c,"");
-        free (dim_att_nam);
-        counter++;
-        c = strtok (NULL, ",");
-    }
-
-    char * dims = 0;
-    counterstr[0] = '\0';
-    snprintf(counterstr, 5, "%d", counter);
-    dims = 0;
-    conca_mesh_att_nam(&dims, name, "dimensions-num");
-    adios_common_define_attribute (p_new_group,dims,"/",adios_double,counterstr,"");
-
-    free (dims);
-    free (d1);
-    return 1;
-}
-
-static int parseMeshStructuredPointsMultiVar0 (const char * points
-                                             ,struct adios_group_struct * new_group
-                                             ,struct adios_mesh_structured_struct * mesh
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // pointss attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-multi-var value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        var = (struct adios_mesh_var_list_struct *) malloc
-                        (sizeof (struct adios_mesh_var_list_struct));
-        var->next = 0;
-
-        if (!var)
-        {
-            log_warn ("Out of memory parseMeshStructuredPointsMultiVar"
-                             "of mesh: %s\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            var->var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var->var)
-            {
-                log_warn ("config.xml: invalid variable: %s points of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else
-            {
-                // Found variable ==> create a points attribute for it.
-                pts_att_nam = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
-                adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
-                free (pts_att_nam);
-                counter++;
-            }
-        }
-        else
-        {
-            var->var = 0;
-            log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                             ,c
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-
-        adios_append_mesh_var (&(mesh->points), var);
-
-        c = strtok (NULL, ",");
-    }
-
-    // Define an attribute showing the number of mesh_vars
-    // Should be more than one in this multi-var parsing
-    if (counter > 1){
-        char * pts = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&pts, name, "points-multi-var-num");
-        adios_common_define_attribute (p_new_group,pts,"/",adios_double,counterstr,"");
-        free (pts);
-    } else
-    {
-            log_warn ("config.xml: points-multi-var tag for mesh: %s "
-                             " expects at least 2 variables\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-    }
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredPointsMultiVar1 (const char * points
-											 ,struct adios_group_struct * new_group
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // pointss attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-multi-var value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-		pts_att_nam = 0;
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
-		adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
-		free (pts_att_nam);
-		counter++;
-        c = strtok (NULL, ",");
-    }
-
-    // Define an attribute showing the number of mesh_vars
-    // Should be more than one in this multi-var parsing
-    if (counter > 1){
-        char * pts = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&pts, name, "points-multi-var-num");
-        adios_common_define_attribute (p_new_group,pts,"/",adios_double,counterstr,"");
-        free (pts);
-    } else
-    {
-            log_warn ("config.xml: points-multi-var tag for mesh: %s "
-                             " expects at least 2 variables\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-    }
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredPointsSingleVar0 (const char * points
-                                              ,struct adios_group_struct * new_group
-                                              ,struct adios_mesh_structured_struct * mesh
-                                              ,const char * name
-                                              )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // points attribute name
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-single-var value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    var = (struct adios_mesh_var_list_struct *) malloc
-                    (sizeof (struct adios_mesh_var_list_struct));
-    var->next = 0;
-
-    if (!var)
-    {
-        log_warn ("Out of memory parseMeshStructuredPointsSingleVar"
-                         "for mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-     }
-
-     if (adios_int_is_var (d1))
-     {
-        var->var =
-               adios_find_var_by_name (new_group->vars, d1
-                                      ,new_group->all_unique_var_names
-                                      );
-        if (!var->var)
-        {
-            log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                             ,d1
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            // Found variable ==> create a number of vars attribute for it.
-            conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
-            adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
-            free (pts_att_nam);
-        }
-    }
-    else
-    {
-        var->var = 0;
-        log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                         ,d1
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }
-
-    adios_append_mesh_var (&(mesh->points), var);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshStructuredPointsSingleVar1 (const char * points
-											  ,struct adios_group_struct * new_group
-                                              ,const char * name
-                                              )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // points attribute name
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-single-var value required"
-                         "for structured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-	conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
-	adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
-	free (pts_att_nam);
-    free (d1);
-    return 1;
-}
-
-static int parseMeshUnstructuredNspace0 (const char * nspace
-                                     ,struct adios_group_struct * new_group
-                                     ,struct adios_mesh_unstructured_struct * mesh
-                                     ,const char * name
-                                     )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * nsp_att_nam = 0; // nspace attribute name
-
-    if (!nspace)
-    {
-        log_warn ("config.xml: nspace value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (nspace);
-
-    item = (struct adios_mesh_item_struct *) malloc
-                            (sizeof (struct adios_mesh_item_struct));
-
-    if (!item)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredNspace for mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }
-
-    conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
-
-    if (adios_int_is_var (nspace))
-    {
-        item->rank = 0.0;
-        item->var =
-               adios_find_var_by_name (new_group->vars, nspace
-                                       ,new_group->all_unique_var_names
-                                       );
-        if (!item->var)
-        {
-           log_warn ("config.xml: invalid variable: %s for nspace of mesh: %s\n"
-                            ,nspace
-                            ,name
-                   );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,item->var->name,"");
-            free (nsp_att_nam);
-        }
-    }
-    else
-    {
-        item->rank = strtod (nspace, 0);
-        adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_double,nspace,"");
-        free (nsp_att_nam);
-        item->var = 0;
-    }
-
-    mesh->nspace = item;
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredNspace1 (const char * nspace
-        ,struct adios_group_struct * new_group
-        ,const char * name
-        )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * nsp_att_nam = 0; // nspace attribute name
-
-    if (!nspace)
-    {
-        log_warn ("config.xml: nspace value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (nspace);
-    conca_mesh_att_nam(&nsp_att_nam, name, "nspace");
-    adios_common_define_attribute (p_new_group,nsp_att_nam,"/",adios_string,nspace,"");
-    free (nsp_att_nam);
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredNpoints0 (const char * npoints
-                                     ,struct adios_group_struct * new_group
-                                     ,struct adios_mesh_unstructured_struct * mesh
-                                     ,const char * name
-                                     )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * npts_att_nam = 0; // npoints attribute name
-
-    if (!npoints)
-    {
-        log_warn ("config.xml: npoints value required"
-                         "for unstructured mesh\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (npoints);
-
-    item = (struct adios_mesh_item_struct *) malloc
-                            (sizeof (struct adios_mesh_item_struct));
-
-    if (!item)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredNpoints for mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }
-
-    conca_mesh_att_nam(&npts_att_nam, name, "npoints");
-
-    if (adios_int_is_var (npoints))
-    {
-        item->rank = 0.0;
-        item->var =
-               adios_find_var_by_name (new_group->vars, npoints
-                                       ,new_group->all_unique_var_names
-                                       );
-        if (!item->var)
-        {
-           log_warn ("config.xml: invalid variable: %s for npoints of mesh: %s\n"
-                   ,npoints
-                   ,name
-                   );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            adios_common_define_attribute (p_new_group,npts_att_nam,"/",adios_string,item->var->name,"");
-            free (npts_att_nam);
-        }
-    }
-    else
-    {
-        item->rank = strtod (npoints, 0);
-        adios_common_define_attribute (p_new_group,npts_att_nam,"/",adios_double,npoints,"");
-        free (npts_att_nam);
-        item->var = 0;
-    }
-
-    mesh->points_count = item;
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredNpoints1 (const char * npoints
-									 ,struct adios_group_struct * new_group
-                                     ,const char * name
-                                     )
-{
-    char * d1; // save of strdup
-    int64_t      p_new_group = (int64_t) new_group;
-    struct adios_mesh_item_struct * item = 0;
-    char * npts_att_nam = 0; // npoints attribute name
-
-    if (!npoints)
-    {
-        log_warn ("config.xml: npoints value required"
-                         "for unstructured mesh\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (npoints);
-
-    conca_mesh_att_nam(&npts_att_nam, name, "npoints");
-    adios_common_define_attribute (p_new_group,npts_att_nam,"/",adios_string,npoints,"");
-    free (npts_att_nam);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredPointsMultiVar0 (const char * points
-                                             ,struct adios_group_struct * new_group
-                                             ,struct adios_mesh_unstructured_struct * mesh
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // pointss attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-multi-var value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        var = (struct adios_mesh_var_list_struct *) malloc
-                        (sizeof (struct adios_mesh_var_list_struct));
-        var->next = 0;
-
-        if (!var)
-        {
-            log_warn ("Out of memory parseMeshUnstructuredPointsMultiVar\n"
-                             "for mesh: %s\n"
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        }
-
-        if (adios_int_is_var (c))
-        {
-            var->var =
-                    adios_find_var_by_name (new_group->vars, c
-                                           ,new_group->all_unique_var_names
-                                           );
-            if (!var->var)
-            {
-                log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                        ,c
-                        ,name
-                        );
-                free (d1);
-
-                return 0;
-            }else
-            {
-                // Found variable ==> create a points attribute for it.
-                pts_att_nam = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
-                adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
-                free (pts_att_nam);
-                counter++;
-            }
-        }
-        else
-        {
-            var->var = 0;
-            log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                             ,c
-                             ,name
-                    );
-            free (d1);
-            return 0;
-        }
-
-        adios_append_mesh_var (&(mesh->points), var);
-
-        c = strtok (NULL, ",");
-    }
-
-    // At this point we expect at least 2 "points-multi-var values
-    if (counter > 1){
-        char * pts = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&pts, name, "points-multi-var-num");
-        adios_common_define_attribute (p_new_group,pts,"/",adios_double,counterstr,"");
-        free (pts);
-        free (d1);
-    } else
-    {
-        log_warn ("config.xml: points-multi-var tag expects "
-                         " at least two variabels. (%s)\n"
-                ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    return 1;
-}
-
-static int parseMeshUnstructuredPointsMultiVar1 (const char * points
-										     ,struct adios_group_struct * new_group
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // pointss attribute name
-    int counter = 0;        // used to create ptsX attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create ptsX attributes
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-multi-var value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-		pts_att_nam = 0;
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		conca_mesh_numb_att_nam(&pts_att_nam, name, "points-multi-var", counterstr);
-		adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,c,"");
-		free (pts_att_nam);
-		counter++;
-        c = strtok (NULL, ",");
-    }
-
-    // At this point we expect at least 2 "points-multi-var values
-    if (counter > 1){
-        char * pts = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_att_nam(&pts, name, "points-multi-var-num");
-        adios_common_define_attribute (p_new_group,pts,"/",adios_double,counterstr,"");
-        free (pts);
-        free (d1);
-    } else
-    {
-        log_warn ("config.xml: points-multi-var tag expects "
-                         " at least two variabels. (%s)\n"
-                ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    return 1;
-}
-
-static int parseMeshUnstructuredPointsSingleVar0 (const char * points
-                                              ,struct adios_group_struct * new_group
-                                              ,struct adios_mesh_unstructured_struct * mesh
-                                              ,const char * name
-                                              )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // points attribute name
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-single-var value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-
-    var = (struct adios_mesh_var_list_struct *) malloc
-                    (sizeof (struct adios_mesh_var_list_struct));
-    var->next = 0;
-
-    if (!var)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredPointsSingleVar"
-                         "for mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-     }
-
-     if (adios_int_is_var (d1))
-     {
-        var->var =
-               adios_find_var_by_name (new_group->vars, d1
-                                      ,new_group->all_unique_var_names
-                                      );
-        if (!var->var)
-        {
-            log_warn ("config.xml: invalid variable: %s for points of mesh: %s\n"
-                    ,d1
-                    ,name
-                    );
-            free (d1);
-
-            return 0;
-        }else
-        {
-            // Found variable ==> create a number of vars attribute for it.
-            conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
-            adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
-            free (pts_att_nam);
-        }
-    }
-    else
-    {
-        var->var = 0;
-        log_warn ("config.xml: invalid variable: %s "
-                         " for points-multi-var of mesh: %s\n"
-                ,d1
-                ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    adios_append_mesh_var (&(mesh->points), var);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredPointsSingleVar1 (const char * points
-											  ,struct adios_group_struct * new_group
-                                              ,const char * name
-                                              )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_var_list_struct * var = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * pts_att_nam = 0; // points attribute name
-
-    if (!points)
-    {
-        log_warn ("config.xml: points-single-var value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (points);
-	conca_mesh_att_nam(&pts_att_nam, name, "points-single-var");
-	adios_common_define_attribute (p_new_group,pts_att_nam,"/",adios_string,d1,"");
-	free (pts_att_nam);
-
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredUniformCells0 (const char * count
-                                             ,const char * data
-                                             ,const char * type
-                                             ,struct adios_group_struct * new_group
-                                             ,struct adios_mesh_unstructured_struct * mesh
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * ncellset_att_nam = 0;  // ncellset attribute
-    char * cellcount_att_nam = 0; // single cell count attribute
-    char * celldata_att_nam = 0;  // single cell data  attribute
-    char * celltype_att_nam = 0;  // single cell type attribute
-
-    item = (struct adios_mesh_item_struct *) malloc
-                            (sizeof (struct adios_mesh_item_struct));
-
-    if (!item)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredUniformCells of mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }else{
-        item->rank = 1;
-        conca_mesh_att_nam(&ncellset_att_nam,name,"ncsets");
-        adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_double,"1","");
-        free (ncellset_att_nam);
-        item->var = 0;
-    }
-
-    // Given that we expect only one variable in this case
-    // We should not have any "," in these values... Catch errors
-    mesh->cell_set_count = item;
-
-    if (!count)
-    {
-        log_warn ("config.xml: uniform-cells count value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!data)
-    {
-        log_warn ("config.xml: uniform-cells data value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!type)
-    {
-        log_warn ("config.xml: uniform-cells type value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (count);
-
-    cell_list = (struct adios_mesh_cell_list_list_struct *) malloc
-                        (sizeof (struct adios_mesh_cell_list_list_struct));
-    cell_list->next = 0;
-
-    if (!cell_list)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredUniformCells"
-                         "of mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }
-
-    if (adios_int_is_var (d1))
-    {
-        cell_list->cell_list.count.var =
-                adios_find_var_by_name (new_group->vars, d1
-                                       ,new_group->all_unique_var_names
-                                       );
-        cell_list->cell_list.count.rank = 0;
-        if (!cell_list->cell_list.count.var)
-        {
-            log_warn ("config.xml: invalid variable: %s for 'count' attribute\n"
-                             "of mesh: %s\n"
-                             ,d1
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        } else
-        {
-           conca_mesh_att_nam(&cellcount_att_nam, name, "ccount");
-           adios_common_define_attribute (p_new_group,cellcount_att_nam,"/",adios_string,cell_list->cell_list.count.var->name,"");
-           free (cellcount_att_nam);
-        }
-    }
-    else
-    {
-        cell_list->cell_list.count.var = 0;
-        cell_list->cell_list.count.rank = strtod (d1, 0);
-        conca_mesh_att_nam(&cellcount_att_nam, name, "ccount");
-        adios_common_define_attribute (p_new_group,cellcount_att_nam,"/",adios_double,d1,"");
-        free (cellcount_att_nam);
-    }
-
-    free (d1);
-
-    d1 = strdup (data);
-
-    if (adios_int_is_var (d1))
-    {
-        cell_list->cell_list.data =
-             adios_find_var_by_name (new_group->vars, d1
-                                    ,new_group->all_unique_var_names
-                                    );
-        if (!cell_list->cell_list.data)
-        {
-            log_warn ("config.xml: invalid variable: %s for cell data\n"
-                             "of mesh: %s\n"
-                             ,d1
-                             ,name
-                    );
-            free (d1);
-
-            return 0;
-        } else
-        {
-            conca_mesh_att_nam(&celldata_att_nam, name, "cdata");
-            adios_common_define_attribute (p_new_group,celldata_att_nam,"/",adios_string,d1,"");
-            free (celldata_att_nam);
-        }
-    }
-    else
-    {
-        cell_list->cell_list.data = 0;
-        log_warn ("config.xml: invalid data dimension: %s of mesh: %s\n"
-                         "Please provide a valid variable for cell data.\n"
-                         ,d1
-                         ,name
-                );
-        free (d1);
-        return 0;
-    }
-
-    free (d1);
-
-    d1 = strdup (type);
-
-    conca_mesh_att_nam(&celltype_att_nam, name, "ctype");
-
-    if (!strcmp(d1,"pt") || !strcmp(d1,"point"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 1; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"line"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 2; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"tri") || !strcmp(d1,"triangle"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 3; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"quad") || !strcmp(d1,"quadrilateral"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 4; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"hex") || !strcmp(d1,"hexahedron"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 5; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"pri") || !strcmp(d1,"prism"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 6; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"tet") || !strcmp(d1,"tetrahedron"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 7; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (!strcmp(d1,"pyr") || !strcmp(d1,"pyramid"))
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = 8; //strtod (c, 0);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    } else
-    if (adios_int_is_var (d1))
-    {
-        cell_list->cell_list.type.var =
-            adios_find_var_by_name (new_group->vars, d1
-                    ,new_group->all_unique_var_names
-                    );
-        cell_list->cell_list.type.rank = 0;
-        if (!cell_list->cell_list.type.var)
-        {
-            log_warn ("config.xml: invalid variable: %s for type attribute\n"
-                             "of mesh: %s\n"
-                             ,d1
-                             ,name
-                    );
-            free (celltype_att_nam);
-            free (d1);
-
-            return 0;
-        } else
-        {
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-        }
-    } else
-    {
-        cell_list->cell_list.type.var = 0;
-        cell_list->cell_list.type.rank = strtod (d1, 0);
-        if (cell_list->cell_list.type.rank > 0 && cell_list->cell_list.type.rank < 9)
-        {
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_double,d1,"");
-        } else {
-            log_warn ("config.xml: invalid type attribute: %s of mesh: %s.\n"
-                             "Please select a number between 1 and 8 for cell types\n"
-                             "or: pt, line, tri, quad, hex, pri, tet or pyr.\n"
-                             ,d1
-                             ,name
-                    );
-            free (celltype_att_nam);
-            free (d1);
-
-            return 0;
-        }
-    }
-
-    free(celltype_att_nam);
-
-    free (d1);
-
-    adios_append_mesh_cell_list (&(mesh->cell_list), cell_list);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredUniformCells1 (const char * count
-                                             ,const char * data
-                                             ,const char * type
-                                             ,struct adios_group_struct * new_group
-                                             ,const char * name
-                                             )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
-    int64_t      p_new_group = (int64_t) new_group;
-    char * ncellset_att_nam = 0;  // ncellset attribute
-    char * cellcount_att_nam = 0; // single cell count attribute
-    char * celldata_att_nam = 0;  // single cell data  attribute
-    char * celltype_att_nam = 0;  // single cell type attribute
-
-	conca_mesh_att_nam(&ncellset_att_nam,name,"ncsets");
-	adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_double,"1","");
-	free (ncellset_att_nam);
-
-    if (!count)
-    {
-        log_warn ("config.xml: uniform-cells count value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!data)
-    {
-        log_warn ("config.xml: uniform-cells data value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!type)
-    {
-        log_warn ("config.xml: uniform-cells type value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (count);
-    conca_mesh_att_nam(&cellcount_att_nam, name, "ccount");
-    adios_common_define_attribute (p_new_group,cellcount_att_nam,"/",adios_string,d1,"");
-    free (cellcount_att_nam);
-    free (d1);
-
-    d1 = strdup (data);
-    conca_mesh_att_nam(&celldata_att_nam, name, "cdata");
-    adios_common_define_attribute (p_new_group,celldata_att_nam,"/",adios_string,d1,"");
-    free (celldata_att_nam);
-    free (d1);
-
-    d1 = strdup (type);
-    conca_mesh_att_nam(&celltype_att_nam, name, "ctype");
-    adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,d1,"");
-    free(celltype_att_nam);
-    free (d1);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredMixedCells0 (const char * count
-                                           ,const char * data
-                                           ,const char * types
-                                           ,struct adios_group_struct * new_group
-                                           ,struct adios_mesh_unstructured_struct * mesh
-                                           ,const char * name
-                                           )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
-    int counter = 0;        // used to create countX, typeX, dataX? attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create countX, typeX, dataX? attributes
-    int64_t      p_new_group = (int64_t) new_group;
-    char * ncellset_att_nam = 0;  // ncellset attribute
-    char * ccounts_att_nam = 0;   // ccountX attributes
-    char * cdata_att_nam = 0;     // cdataX attributes
-    char * celltype_att_nam = 0;  // ctypeX attributes
-
-    item = (struct adios_mesh_item_struct *) malloc
-                            (sizeof (struct adios_mesh_item_struct));
-
-    if (!item)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredMixedCells of mesh: %s\n"
-                         ,name
-                );
-        free (d1);
-
-        return 0;
-    }
-
-    if (!count)
-    {
-        log_warn ("config.xml: mixed-cells count value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!data)
-    {
-        log_warn ("config.xml: mixed-cells data value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!types)
-    {
-        log_warn ("config.xml: mixed-cellsi type value required "
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (count);
-    c = strtok (d1, ",");
-
-    cell_list = (struct adios_mesh_cell_list_list_struct *) malloc
-                        (sizeof (struct adios_mesh_cell_list_list_struct));
-    cell_list->next = 0;
-
-    if (!cell_list)
-    {
-        log_warn ("Out of memory parseMeshUnstructuredMixedCells\n");
-        free (d1);
-
-        return 0;
-    }
-
-    while (c)
-    {
-        if (adios_int_is_var (c))
-        {
-            cell_list->cell_list.count.var =
-                   adios_find_var_by_name (new_group->vars, c
-                                          ,new_group->all_unique_var_names
-                                          );
-            cell_list->cell_list.count.rank = 0;
-            if (!cell_list->cell_list.count.var)
-            {
-                log_warn ("config.xml: invalid variable: %s for cell count\n"
-                                 "of mesh: %s\n"
-                        ,c, name
-                        );
-                free (d1);
-
-                return 0;
-            }else{
-                ccounts_att_nam = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&ccounts_att_nam, name, "ccount", counterstr);
-                adios_common_define_attribute (p_new_group,ccounts_att_nam,"/",adios_string,c,"");
-                free (ccounts_att_nam);
-                counter++;
-            }
-        }
-        else
-        {
-            cell_list->cell_list.count.var = 0;
-            cell_list->cell_list.count.rank = strtod (c, 0);
-            counterstr[0] = '\0';
-            snprintf(counterstr, 5, "%d", counter);
-            ccounts_att_nam = 0;
-            conca_mesh_numb_att_nam(&ccounts_att_nam, name, "ccount", counterstr);
-            adios_common_define_attribute (p_new_group,ccounts_att_nam,"/",adios_double,c,"");
-            free (ccounts_att_nam);
-            counter++;
-        }
-
-        c = strtok (NULL, ",");
-    }
-    free (d1);
-
-    // We should have at least 2 cell sets, otherwise the cells are uniform
-    if (counter <= 1){
-       log_warn ("config.xml: Please provide at least 2 cell counts of mesh: %s\n"
-                        "or use the 'uniform-cells' tag.\n"
-                        ,name
-               );
-        return 0;
-    }
-
-    item->rank = (double) counter;
-    conca_mesh_att_nam(&ncellset_att_nam, name, "ncsets");
-    adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_double,counterstr,"");
-    free (ncellset_att_nam);
-    item->var = 0;
-
-    mesh->cell_set_count = item;
-
-    // From the number of counts expect the same number of data and type items
-    int cell_set_count = counter;
-    // Reset counter
-    counter = 0;
-
-    d1 = strdup (data);
-    c = strtok (d1, ",");
-    while (c)
-    {
-        if (adios_int_is_var (c))
-        {
-            cell_list->cell_list.data =
-                   adios_find_var_by_name (new_group->vars, c
-                                          ,new_group->all_unique_var_names
-                                          );
-            if (!cell_list->cell_list.data)
-            {
-                log_warn ("config.xml: invalid variable: %s for data of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            } else
-            {
-                cdata_att_nam = 0;
-                counterstr[0] = '\0';
-                snprintf(counterstr, 5, "%d", counter);
-                conca_mesh_numb_att_nam(&cdata_att_nam, name, "cdata", counterstr);
-                adios_common_define_attribute (p_new_group,cdata_att_nam,"/",adios_string,c,"");
-                free (cdata_att_nam);
-                counter++;
-            }
-        }
-        else
-        {
-            cell_list->cell_list.data = 0;
-            log_warn ("config.xml: invalid data: %s of mesh: %s\n"
-                             "Please provide a valid variable for cell data\n"
-                    ,d1
-                    ,name                    );
-            free (d1);
-            return 0;
-        }
-
-        c = strtok (NULL, ",");
-    }
-    free (d1);
-
-    // If the number of data variables does not match the number of counts
-    // Generate an error message
-    if (counter != cell_set_count){
-       log_warn ("config.xml: Please provide at least %d cell data of mesh: %s\n"
-                        "or use the 'uniform-cells' tag\n"
-                        ,cell_set_count
-                        ,name
-               );
-        return 0;
-    }
-
-    // Reset counter
-    counter = 0;
-
-    d1 = strdup (types);
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        celltype_att_nam = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_numb_att_nam(&celltype_att_nam, name, "ctype", counterstr);
-
-        if (!strcmp(c,"pt") || !strcmp(c,"point"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 1; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"line"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 2; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"tri") || !strcmp(c,"triangle"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 3; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"quad") || !strcmp(c,"quadrilateral"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 4; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"hex") || !strcmp(c,"hexahedron"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 5; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"pri") || !strcmp(c,"prism"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 6; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"tet") || !strcmp(c,"tetrahedron"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 7; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (!strcmp(c,"pyr") || !strcmp(c,"pyramid"))
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = 8; //strtod (c, 0);
-            adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        } else
-        if (adios_int_is_var (c))
-        {
-            cell_list->cell_list.type.var =
-                   adios_find_var_by_name (new_group->vars, c
-                                          ,new_group->all_unique_var_names
-                                          );
-            cell_list->cell_list.type.rank = 0;
-            if (!cell_list->cell_list.type.var)
-            {
-                log_warn ("config.xml: invalid var for type variable: %s\n"
-                                 "of mesh: %s\n"
-                                 ,c
-                                 ,name
-                        );
-                free (d1);
-
-                return 0;
-            } else
-            {
-                adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-            }
-        }
-        else
-        {
-            cell_list->cell_list.type.var = 0;
-            cell_list->cell_list.type.rank = strtod (c, 0);
-            if (cell_list->cell_list.type.rank > 0 && cell_list->cell_list.type.rank < 9)
-            {
-                adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_double,c,"");
-            } else {
-                log_warn ("config.xml: invalid type attribute: %s of mesh: %s.\n"
-                                 "Please select a number between 1 and 8 for cell types\n"
-                                 "or: pt, line, tri, quad, hex, pri, tet or pyr.\n"
-                                 ,c
-                                 ,name
-                        );
-                free (celltype_att_nam);
-                free (d1);
-
-                return 0;
-            }
-        }
-
-        c = strtok (NULL, ",");
-        counter++;
-        free (celltype_att_nam);
-    }
-    free (d1);
-
-    // If the number of data variables does not match the number of counts
-    // Generate an error message
-    if (counter != cell_set_count){
-       log_warn ("config.xml: Please provide at least %d cell types of mesh: %s\n"
-                        "or use the 'uniform-cells' tag\n"
-                        ,cell_set_count
-                        ,name
-               );
-        return 0;
-    }
-
-    adios_append_mesh_cell_list (&(mesh->cell_list), cell_list);
-
-    return 1;
-}
-
-static int parseMeshUnstructuredMixedCells1 (const char * count
-                                           ,const char * data
-                                           ,const char * types
-                                           ,struct adios_group_struct * new_group
-                                           ,const char * name
-                                           )
-{
-    char * c;  // comma location
-    char * d1; // save of strdup
-    struct adios_mesh_cell_list_list_struct * cell_list = 0;
-    struct adios_mesh_item_struct * item = 0;
-    int counter = 0;        // used to create countX, typeX, dataX? attributes
-    char counterstr[5] = {0,0,0,0,0}; // used to create countX, typeX, dataX? attributes
-    int64_t      p_new_group = (int64_t) new_group;
-    char * ncellset_att_nam = 0;  // ncellset attribute
-    char * ccounts_att_nam = 0;   // ccountX attributes
-    char * cdata_att_nam = 0;     // cdataX attributes
-    char * celltype_att_nam = 0;  // ctypeX attributes
-
-    if (!count)
-    {
-        log_warn ("config.xml: mixed-cells count value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!data)
-    {
-        log_warn ("config.xml: mixed-cells data value required"
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!types)
-    {
-        log_warn ("config.xml: mixed-cellsi type value required "
-                         "for unstructured mesh: %s\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    d1 = strdup (count);
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-		cell_list->cell_list.count.var = 0;
-		cell_list->cell_list.count.rank = strtod (c, 0);
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		ccounts_att_nam = 0;
-		conca_mesh_numb_att_nam(&ccounts_att_nam, name, "ccount", counterstr);
-		adios_common_define_attribute (p_new_group,ccounts_att_nam,"/",adios_string,c,"");
-		free (ccounts_att_nam);
-		counter++;
-        c = strtok (NULL, ",");
-    }
-    free (d1);
-
-    // We should have at least 2 cell sets, otherwise the cells are uniform
-    if (counter <= 1){
-       log_warn ("config.xml: Please provide at least 2 cell counts of mesh: %s\n"
-                        "or use the 'uniform-cells' tag.\n"
-                        ,name
-               );
-        return 0;
-    }
-
-    conca_mesh_att_nam(&ncellset_att_nam, name, "ncsets");
-    adios_common_define_attribute (p_new_group,ncellset_att_nam,"/",adios_double,counterstr,"");
-    free (ncellset_att_nam);
-
-    // From the number of counts expect the same number of data and type items
-    int cell_set_count = counter;
-    // Reset counter
-    counter = 0;
-
-    d1 = strdup (data);
-    c = strtok (d1, ",");
-    while (c)
-    {
-		cdata_att_nam = 0;
-		counterstr[0] = '\0';
-		snprintf(counterstr, 5, "%d", counter);
-		conca_mesh_numb_att_nam(&cdata_att_nam, name, "cdata", counterstr);
-		adios_common_define_attribute (p_new_group,cdata_att_nam,"/",adios_string,c,"");
-		free (cdata_att_nam);
-		counter++;
-        c = strtok (NULL, ",");
-    }
-    free (d1);
-
-    // If the number of data variables does not match the number of counts
-    // Generate an error message
-    if (counter != cell_set_count){
-       log_warn ("config.xml: Please provide at least %d cell data of mesh: %s\n"
-                        "or use the 'uniform-cells' tag\n"
-                        ,cell_set_count
-                        ,name
-               );
-        return 0;
-    }
-
-    // Reset counter
-    counter = 0;
-
-    d1 = strdup (types);
-    c = strtok (d1, ",");
-
-    while (c)
-    {
-        celltype_att_nam = 0;
-        counterstr[0] = '\0';
-        snprintf(counterstr, 5, "%d", counter);
-        conca_mesh_numb_att_nam(&celltype_att_nam, name, "ctype", counterstr);
-        adios_common_define_attribute (p_new_group,celltype_att_nam,"/",adios_string,c,"");
-        c = strtok (NULL, ",");
-        counter++;
-        free (celltype_att_nam);
-    }
-    free (d1);
-
-    // If the number of data variables does not match the number of counts
-    // Generate an error message
-    if (counter != cell_set_count){
-       log_warn ("config.xml: Please provide at least %d cell types of mesh: %s\n"
-                        "or use the 'uniform-cells' tag\n"
-                        ,cell_set_count
-                        ,name
-               );
-        return 0;
-    }
-
-    return 1;
-}
-
-// primary mesh XML parsing
-static int parseMeshUniform0 (mxml_node_t * node
-                            ,struct adios_group_struct * new_group
-                            ,struct adios_mesh_uniform_struct ** mesh
-                            ,const char * name
-                            )
-{
-    mxml_node_t * n;
-    int saw_dimensions = 0;
-    int saw_origin = 0;
-    int saw_spacing = 0;
-    int saw_maximum = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * dimensions;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions definition "
-                                 "allowed per mesh sructured-points (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            dimensions = mxmlElementGetAttr (n, "value");
-
-            if (!dimensions)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            if (!parseMeshUniformDimensions0 (dimensions, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "origin"))
-        {
-            const char * value;
-
-            if (saw_origin)
-            {
-                log_warn ("config.xml: only one origin definition "
-                                 "allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_origin = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "origin required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformOrigin0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "spacing"))
-        {
-            const char * value;
-
-            if (saw_spacing)
-            {
-                log_warn ("config.xml: only one spacing "
-                                 "definition allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_spacing = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "spacing required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformSpacings0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "maximum"))
-        {
-            const char * value;
-
-            if (saw_maximum)
-            {
-                log_warn ("config.xml: only one maximum "
-                                 "definition allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_maximum = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "max required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformMaximums0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
-    }
-
-    // If nothing is given, simply assume basic uniform plots using 
-    // the dimensions of the variable, origin=0 and spacing=1
-    /*if (!saw_dimensions)
-    {
-        log_debug ("config.xml: dimensions required on mesh "
-                   "type=uniform (%s)\n",name);
-        return 0;
-    }*/
-
-    return 1;
-}
-
-// primary mesh XML parsing
-static int parseMeshUniform1 (mxml_node_t * node
-        			        ,struct adios_group_struct * new_group
-                            ,const char * name
-                            )
-{
-    mxml_node_t * n;
-    int saw_dimensions = 0;
-    int saw_origin = 0;
-    int saw_spacing = 0;
-    int saw_maximum = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * dimensions;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions definition "
-                                 "allowed per mesh sructured-points (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            dimensions = mxmlElementGetAttr (n, "value");
-
-            if (!dimensions)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            if (!parseMeshUniformDimensions1 (dimensions, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "origin"))
-        {
-            const char * value;
-
-            if (saw_origin)
-            {
-                log_warn ("config.xml: only one origin definition "
-                                 "allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_origin = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "origin required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformOrigin1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "spacing"))
-        {
-            const char * value;
-
-            if (saw_spacing)
-            {
-                log_warn ("config.xml: only one spacing "
-                                 "definition allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_spacing = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "spacing required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformSpacings1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "maximum"))
-        {
-            const char * value;
-
-            if (saw_maximum)
-            {
-                log_warn ("config.xml: only one maximum "
-                                 "definition allowed per mesh uniform (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_maximum = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "max required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUniformMaximums1 (value, new_group, name))
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
-    }
-
-    return 1;
-}
-
-static int parseMeshRectilinear0 (mxml_node_t * node
-                               ,struct adios_group_struct * new_group
-                               ,struct adios_mesh_rectilinear_struct ** mesh
-                               ,const char * name
-                               )
-{
-    mxml_node_t * n;
-    int saw_dimensions = 0;
-    int saw_coordinates_multi_var = 0;
-    int saw_coordinates_single_var = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * value;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshRectilinearDimensions0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "coordinates-multi-var"))
-        {
-            const char * value;
-
-            if (saw_coordinates_multi_var || saw_coordinates_single_var)
-            {
-                log_warn ("config.xml: only one coordinates "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_coordinates_multi_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "coordinates-multi-var required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshRectilinearCoordinatesMultiVar0 (value, new_group, *mesh, name))
-                return 0;
-            (*mesh)->coordinates_single_var = adios_flag_no;
-        } else
-        if (!strcasecmp (n->value.element.name, "coordinates-single-var"))
-        {
-            const char * value;
-
-            if (saw_coordinates_single_var || saw_coordinates_multi_var)
-            {
-                log_warn ("config.xml: only one coordinates "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            saw_coordinates_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "coordinates-single-var required (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            if (!parseMeshRectilinearCoordinatesSingleVar0 (value, new_group, *mesh, name))
-                return 0;
-            (*mesh)->coordinates_single_var = adios_flag_yes;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
-    }
-
-    if (!saw_dimensions)
-    {
-        log_warn ("config.xml: dimensions required on mesh "
-                         "type=rectilinear (%s)\n"
-                         ,name
-                );
-        return 0;
-    }
-    if (!saw_coordinates_multi_var && !saw_coordinates_single_var)
-    {
-        log_warn ("config.xml: coordinates-multi-var or "
-                         "coordinates-single-var required on mesh "
-                         "type=rectilinear (%s)\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    return 1;
-}
-
-static int parseMeshRectilinear1 (mxml_node_t * node
-                         	,struct adios_group_struct * new_group
-                                ,const char * name
-                                )
-{
-    mxml_node_t * n;
-    int saw_dimensions = 0;
-    int saw_coordinates_multi_var = 0;
-    int saw_coordinates_single_var = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * value;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshRectilinearDimensions1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "coordinates-multi-var"))
-        {
-            const char * value;
-
-            if (saw_coordinates_multi_var || saw_coordinates_single_var)
-            {
-                log_warn ("config.xml: only one coordinates "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_coordinates_multi_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "coordinates-multi-var required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshRectilinearCoordinatesMultiVar1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "coordinates-single-var"))
-        {
-            const char * value;
-
-            if (saw_coordinates_single_var || saw_coordinates_multi_var)
-            {
-                log_warn ("config.xml: only one coordinates "
-                                 "definition allowed per mesh rectilinear (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            saw_coordinates_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "coordinates-single-var required (%s)\n"
-                                 ,name
-                        );
-                return 0;
-            }
-
-            if (!parseMeshRectilinearCoordinatesSingleVar1 (value, new_group, name))
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
-    }
-
-    if (!saw_dimensions)
-    {
-        log_warn ("config.xml: dimensions required on mesh "
-                         "type=rectilinear (%s)\n"
-                         ,name
-                );
-        return 0;
-    }
-    if (!saw_coordinates_multi_var && !saw_coordinates_single_var)
-    {
-        log_warn ("config.xml: coordinates-multi-var or "
-                         "coordinates-single-var required on mesh "
-                         "type=rectilinear (%s)\n"
-                         ,name
-                );
-
-        return 0;
-    }
-
-    return 1;
-}
-
-static int parseMeshStructured0 (mxml_node_t * node
-                               ,struct adios_group_struct * new_group
-                               ,struct adios_mesh_structured_struct ** mesh
-                               ,const char * name
-                               )
-{
-    mxml_node_t * n;
-    int saw_nspace = 0;
-    int saw_dimensions = 0;
-    int saw_points_multi_var = 0;
-    int saw_points_single_var = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "nspace"))
-        {
-            const char * value;
-
-            if (saw_nspace)
-            {
-                log_warn ("config.xml: only one nspace "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_nspace = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "nspace required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredNspace0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * value;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredDimensions0 (value, new_group, *mesh, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "points-multi-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
-            {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_points_multi_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-multi-var required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredPointsMultiVar0 (value, new_group, *mesh, name))
-                return 0;
-            (*mesh)->points_single_var = adios_flag_no;
-        } else
-        if (!strcasecmp (n->value.element.name, "points-single-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
-            {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_points_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-single-var required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredPointsSingleVar0 (value, new_group, *mesh, name))
-                return 0;
-            (*mesh)->points_single_var = adios_flag_yes;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
-    }
-
-    if (!saw_dimensions)
-    {
-        log_warn ("config.xml: dimensions required on mesh "
-                         "type=structured (%s)\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    if (!saw_points_multi_var && !saw_points_single_var)
-    {
-        log_warn ("config.xml: points-single-var or points-multi-var "
-                         "required on mesh type=structured (%s)\n"
-                         ,name
-                );
-
-        return 0;
-    }
-    // nspace should not be required since the single var could be multi-dim
-    /*if (saw_points_single_var && !saw_nspace)
-    {
-        log_warn ("config.xml: points-single-var and nspace "
-                         "required on mesh type=structured (%s)\n"
-                         ,name
-                );
-
-        return 0;
-    }*/
-
-    return 1;
-}
-
-static int parseMeshStructured1 (mxml_node_t * node
-								,struct adios_group_struct * new_group
-                               ,const char * name
-                               )
-{
-    mxml_node_t * n;
-    int saw_nspace = 0;
-    int saw_dimensions = 0;
-    int saw_points_multi_var = 0;
-    int saw_points_single_var = 0;
-
-    for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
-        )
-    {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "nspace"))
-        {
-            const char * value;
-
-            if (saw_nspace)
-            {
-                log_warn ("config.xml: only one nspace "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_nspace = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "nspace required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredNspace1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "dimensions"))
-        {
-            const char * value;
-
-            if (saw_dimensions)
-            {
-                log_warn ("config.xml: only one dimensions "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_dimensions = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "dimensions required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredDimensions1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "points-multi-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
-            {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_points_multi_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-multi-var required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshStructuredPointsMultiVar1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "points-single-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
-            {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
+                if (!adios_define_mesh_rectilinear_coordinatesMultiVar (value, new_group, name))
+                    return 0;
+            } else
+                if (!strcasecmp (n->value.element.name, "coordinates-single-var"))
+                {
+                    const char * value;
 
-            saw_points_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
+                    if (saw_coordinates_single_var || saw_coordinates_multi_var)
+                    {
+                        log_warn ("config.xml: only one coordinates "
+                                "definition allowed per mesh rectilinear (%s)\n"
+                                ,name
+                                );
+                        return 0;
+                    }
 
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-single-var required (%s)\n"
-                                 ,name
-                        );
+                    saw_coordinates_single_var = 1;
+                    value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                    if (!value)
+                    {
+                        log_warn ("config.xml: value attribute on "
+                                "coordinates-single-var required (%s)\n"
+                                ,name
+                                );
+                        return 0;
+                    }
 
-            if (!parseMeshStructuredPointsSingleVar1 (value, new_group, name))
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
+                    if (!adios_define_mesh_rectilinear_coordinatesSingleVar(value, new_group, name))
+                        return 0;
+                } else
+                {
+                    if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                    {
+                        continue;
+                    }
+                }
     }
 
     if (!saw_dimensions)
     {
         log_warn ("config.xml: dimensions required on mesh "
-                         "type=structured (%s)\n"
-                         ,name
+                "type=rectilinear (%s)\n"
+                ,name
                 );
-
         return 0;
     }
-    if (!saw_points_multi_var && !saw_points_single_var)
+    if (!saw_coordinates_multi_var && !saw_coordinates_single_var)
     {
-        log_warn ("config.xml: points-single-var or points-multi-var "
-                         "required on mesh type=structured (%s)\n"
-                         ,name
+        log_warn ("config.xml: coordinates-multi-var or "
+                "coordinates-single-var required on mesh "
+                "type=rectilinear (%s)\n"
+                ,name
                 );
 
         return 0;
@@ -4896,23 +503,20 @@ static int parseMeshStructured1 (mxml_node_t * node
     return 1;
 }
 
-static int parseMeshUnstructured0 (mxml_node_t * node
-                                 ,struct adios_group_struct * new_group
-                                 ,struct adios_mesh_unstructured_struct ** mesh
-                                 ,const char * name
-                                 )
+int parseMeshStructured1 (mxml_node_t * node
+        ,struct adios_group_struct * new_group
+        ,const char * name
+        )
 {
     mxml_node_t * n;
-    int saw_points = 0;
-    int saw_nspace =0;
-    int saw_number_of_points = 0;
+    int saw_nspace = 0;
+    int saw_dimensions = 0;
     int saw_points_multi_var = 0;
     int saw_points_single_var = 0;
-    int saw_cell_set = 0;
 
     for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
+            ;n
+            ;n = mxmlWalkNext (n, node, MXML_DESCEND)
         )
     {
         if (n->type != MXML_ELEMENT)
@@ -4927,8 +531,8 @@ static int parseMeshUnstructured0 (mxml_node_t * node
             if (saw_nspace)
             {
                 log_warn ("config.xml: only one nspace "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
+                        "definition allowed per mesh structured (%s)\n"
+                        ,name
                         );
 
                 return 0;
@@ -4940,234 +544,128 @@ static int parseMeshUnstructured0 (mxml_node_t * node
             if (!value)
             {
                 log_warn ("config.xml: value attribute on "
-                                 "nspace required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUnstructuredNspace0 (value, new_group, *mesh, name))
-                return 0;
-        }else
-        if (!strcasecmp (n->value.element.name, "number-of-points"))
-        {
-            const char * value;
-
-            if (saw_number_of_points)
-            {
-                log_warn ("config.xml: only one number-of-points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_number_of_points = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "number-of-points required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUnstructuredNpoints0 (value, new_group, *mesh, name))
-                return 0;
-        }else
-        if (!strcasecmp (n->value.element.name, "points-multi-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
-            {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh unstructured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_points_multi_var = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-multi-var required (%s)\n"
-                                 ,name
+                        "nspace required (%s)\n"
+                        ,name
                         );
 
                 return 0;
             }
 
-            if (!parseMeshUnstructuredPointsMultiVar0 (value, new_group, *mesh, name))
+            if (!adios_define_mesh_structured_nspace (value, new_group, name))
                 return 0;
-            (*mesh)->points_single_var = adios_flag_no;
         } else
-        if (!strcasecmp (n->value.element.name, "points-single-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
+            if (!strcasecmp (n->value.element.name, "dimensions"))
             {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh unstructured (%s)\n"
-                                 ,name
-                        );
+                const char * value;
 
-                return 0;
-            }
+                if (saw_dimensions)
+                {
+                    log_warn ("config.xml: only one dimensions "
+                            "definition allowed per mesh structured (%s)\n"
+                            ,name
+                            );
 
-            saw_points_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
+                    return 0;
+                }
 
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-single-var required (%s)\n"
-                                 ,name
-                        );
+                saw_dimensions = 1;
+                value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                if (!value)
+                {
+                    log_warn ("config.xml: value attribute on "
+                            "dimensions required (%s)\n"
+                            ,name
+                            );
 
-            if (!parseMeshUnstructuredPointsSingleVar0 (value, new_group, *mesh, name))
-                return 0;
-            (*mesh)->points_single_var = adios_flag_yes;
-        } else
-        if (!strcasecmp (n->value.element.name, "uniform-cells"))
-        {
-            const char * count;
-            const char * data;
-            const char * type;
+                    return 0;
+                }
 
-            saw_cell_set = 1;
-            count = mxmlElementGetAttr (n, "count");
-            data = mxmlElementGetAttr (n, "data");
-            type = mxmlElementGetAttr (n, "type");
+                if (!adios_define_mesh_structured_dimensions (value, new_group, name))
+                    return 0;
+            } else
+                if (!strcasecmp (n->value.element.name, "points-multi-var"))
+                {
+                    const char * value;
 
-            if (!count)
-            {
-                log_warn ("config.xml: count attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                    if (saw_points_multi_var || saw_points_single_var)
+                    {
+                        log_warn ("config.xml: only one points "
+                                "definition allowed per mesh structured (%s)\n"
+                                ,name
+                                );
 
-                return 0;
-            }
-            if (!data)
-            {
-                log_warn ("config.xml: data attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                        return 0;
+                    }
 
-                return 0;
-            }
-            if (!type)
-            {
-                log_warn ("config.xml: type attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                    saw_points_multi_var = 1;
+                    value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                    if (!value)
+                    {
+                        log_warn ("config.xml: value attribute on "
+                                "points-multi-var required (%s)\n"
+                                ,name
+                                );
 
-            if (!parseMeshUnstructuredUniformCells0 (count, data, type
-                                                   ,new_group, *mesh
-                                                   ,name
-                                                   )
-               )
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "mixed-cells"))
-        {
-            const char * count;
-            const char * data;
-            const char * types;
+                        return 0;
+                    }
 
-            saw_cell_set = 1;
-            count = mxmlElementGetAttr (n, "count");
-            data = mxmlElementGetAttr (n, "data");
-            types = mxmlElementGetAttr (n, "type");
+                    if (!adios_define_mesh_structured_pointsMultiVar (value, new_group, name))
+                        return 0;
+                } else
+                    if (!strcasecmp (n->value.element.name, "points-single-var"))
+                    {
+                        const char * value;
 
-            if (!count)
-            {
-                log_warn ("config.xml: count attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                        if (saw_points_multi_var || saw_points_single_var)
+                        {
+                            log_warn ("config.xml: only one points "
+                                    "definition allowed per mesh structured (%s)\n"
+                                    ,name
+                                    );
 
-                return 0;
-            }
-            if (!data)
-            {
-                log_warn ("config.xml: data attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                            return 0;
+                        }
 
-                return 0;
-            }
-            if (!types)
-            {
-                log_warn ("config.xml: types attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                        saw_points_single_var = 1;
+                        value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                        if (!value)
+                        {
+                            log_warn ("config.xml: value attribute on "
+                                    "points-single-var required (%s)\n"
+                                    ,name
+                                    );
 
-            if (!parseMeshUnstructuredMixedCells0 (count, data, types
-                                                   ,new_group, *mesh
-                                                   ,name
-                                                   )
-               )
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
+                            return 0;
+                        }
+
+                        if (!adios_define_mesh_structured_pointsSingleVar (value, new_group, name))
+                            return 0;
+                    } else
+                    {
+                        if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                        {
+                            continue;
+                        }
+                    }
     }
 
-    if (!saw_points_multi_var && !saw_points_single_var)
+    if (!saw_dimensions)
     {
-        log_warn ("config.xml: points-single-var or points-multi-var "
-                         "required on mesh type=unstructured (%s)\n"
-                         ,name
+        log_warn ("config.xml: dimensions required on mesh "
+                "type=structured (%s)\n"
+                ,name
                 );
 
         return 0;
     }
-    // nspace should not be required since the single variable could be multi-dim
-    /*if (saw_points_single_var && !saw_nspace && !saw_number_of_points)
-    {
-        log_warn ("config.xml: with points-single-var, nspace or number-of-points "
-                         "required on mesh type=unstructured (%s)\n"
-                         ,name
-                );
-
-        return 0;
-
-    }*/
-
-    if (!saw_cell_set)
+    if (!saw_points_multi_var && !saw_points_single_var)
     {
-        log_warn ("config.xml: at least one cell-set required on "
-                         "mesh type=unstructured (%s)\n"
-                         ,name
+        log_warn ("config.xml: points-single-var or points-multi-var "
+                "required on mesh type=structured (%s)\n"
+                ,name
                 );
 
         return 0;
@@ -5176,10 +674,10 @@ static int parseMeshUnstructured0 (mxml_node_t * node
     return 1;
 }
 
-static int parseMeshUnstructured1 (mxml_node_t * node
+int parseMeshUnstructured1 (mxml_node_t * node
         ,struct adios_group_struct * new_group
         ,const char * name
-                                 )
+        )
 {
     mxml_node_t * n;
     int saw_points = 0;
@@ -5190,240 +688,240 @@ static int parseMeshUnstructured1 (mxml_node_t * node
     int saw_cell_set = 0;
 
     for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_DESCEND)
+            ;n
+            ;n = mxmlWalkNext (n, node, MXML_DESCEND)
         )
     {
-        if (n->type != MXML_ELEMENT)
-        {
-            continue;
-        }
-
-        if (!strcasecmp (n->value.element.name, "nspace"))
-        {
-            const char * value;
-
-            if (saw_nspace)
-            {
-                log_warn ("config.xml: only one nspace "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_nspace = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "nspace required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            if (!parseMeshUnstructuredNspace1 (value, new_group, name))
-                return 0;
-        }else
-        if (!strcasecmp (n->value.element.name, "number-of-points"))
-        {
-            const char * value;
-
-            if (saw_number_of_points)
-            {
-                log_warn ("config.xml: only one number-of-points "
-                                 "definition allowed per mesh structured (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
-
-            saw_number_of_points = 1;
-            value = mxmlElementGetAttr (n, "value");
-
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "number-of-points required (%s)\n"
-                                 ,name
-                        );
-
-                return 0;
-            }
+        if (n->type != MXML_ELEMENT)
+        {
+            continue;
+        }
 
-            if (!parseMeshUnstructuredNpoints1 (value, new_group, name))
-                return 0;
-        }else
-        if (!strcasecmp (n->value.element.name, "points-multi-var"))
+        if (!strcasecmp (n->value.element.name, "nspace"))
         {
             const char * value;
 
-            if (saw_points_multi_var || saw_points_single_var)
+            if (saw_nspace)
             {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh unstructured (%s)\n"
-                                 ,name
+                log_warn ("config.xml: only one nspace "
+                        "definition allowed per mesh structured (%s)\n"
+                        ,name
                         );
 
                 return 0;
             }
 
-            saw_points_multi_var = 1;
+            saw_nspace = 1;
             value = mxmlElementGetAttr (n, "value");
 
             if (!value)
             {
                 log_warn ("config.xml: value attribute on "
-                                 "points-multi-var required (%s)\n"
-                                 ,name
+                        "nspace required (%s)\n"
+                        ,name
                         );
 
                 return 0;
             }
 
-            if (!parseMeshUnstructuredPointsMultiVar1 (value, new_group, name))
+            if (!adios_define_mesh_unstructured_nspace (value, new_group, name))
                 return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "points-single-var"))
-        {
-            const char * value;
-
-            if (saw_points_multi_var || saw_points_single_var)
+        }else
+            if (!strcasecmp (n->value.element.name, "number-of-points"))
             {
-                log_warn ("config.xml: only one points "
-                                 "definition allowed per mesh unstructured (%s)\n"
-                                 ,name
-                        );
+                const char * value;
 
-                return 0;
-            }
+                if (saw_number_of_points)
+                {
+                    log_warn ("config.xml: only one number-of-points "
+                            "definition allowed per mesh structured (%s)\n"
+                            ,name
+                            );
 
-            saw_points_single_var = 1;
-            value = mxmlElementGetAttr (n, "value");
+                    return 0;
+                }
 
-            if (!value)
-            {
-                log_warn ("config.xml: value attribute on "
-                                 "points-single-var required (%s)\n"
-                                 ,name
-                        );
+                saw_number_of_points = 1;
+                value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                if (!value)
+                {
+                    log_warn ("config.xml: value attribute on "
+                            "number-of-points required (%s)\n"
+                            ,name
+                            );
 
-            if (!parseMeshUnstructuredPointsSingleVar1 (value, new_group, name))
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "uniform-cells"))
-        {
-            const char * count;
-            const char * data;
-            const char * type;
+                    return 0;
+                }
 
-            saw_cell_set = 1;
-            count = mxmlElementGetAttr (n, "count");
-            data = mxmlElementGetAttr (n, "data");
-            type = mxmlElementGetAttr (n, "type");
+                if (!adios_define_mesh_unstructured_npoints (value, new_group, name))
+                    return 0;
+            }else
+                if (!strcasecmp (n->value.element.name, "points-multi-var"))
+                {
+                    const char * value;
 
-            if (!count)
-            {
-                log_warn ("config.xml: count attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                    if (saw_points_multi_var || saw_points_single_var)
+                    {
+                        log_warn ("config.xml: only one points "
+                                "definition allowed per mesh unstructured (%s)\n"
+                                ,name
+                                );
 
-                return 0;
-            }
-            if (!data)
-            {
-                log_warn ("config.xml: data attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                        return 0;
+                    }
 
-                return 0;
-            }
-            if (!type)
-            {
-                log_warn ("config.xml: type attribute on "
-                                 "uniform-cells required (%s)\n"
-                                 ,name
-                        );
+                    saw_points_multi_var = 1;
+                    value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                    if (!value)
+                    {
+                        log_warn ("config.xml: value attribute on "
+                                "points-multi-var required (%s)\n"
+                                ,name
+                                );
 
-            if (!parseMeshUnstructuredUniformCells1 (count, data, type
-            									   , new_group
-                                                   ,name
-                                                   )
-               )
-                return 0;
-        } else
-        if (!strcasecmp (n->value.element.name, "mixed-cells"))
-        {
-            const char * count;
-            const char * data;
-            const char * types;
+                        return 0;
+                    }
 
-            saw_cell_set = 1;
-            count = mxmlElementGetAttr (n, "count");
-            data = mxmlElementGetAttr (n, "data");
-            types = mxmlElementGetAttr (n, "type");
+                    if (!adios_define_mesh_unstructured_pointsMultiVar (value, new_group, name))
+                        return 0;
+                } else
+                    if (!strcasecmp (n->value.element.name, "points-single-var"))
+                    {
+                        const char * value;
 
-            if (!count)
-            {
-                log_warn ("config.xml: count attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                        if (saw_points_multi_var || saw_points_single_var)
+                        {
+                            log_warn ("config.xml: only one points "
+                                    "definition allowed per mesh unstructured (%s)\n"
+                                    ,name
+                                    );
 
-                return 0;
-            }
-            if (!data)
-            {
-                log_warn ("config.xml: data attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                            return 0;
+                        }
 
-                return 0;
-            }
-            if (!types)
-            {
-                log_warn ("config.xml: types attribute on "
-                                 "mixed-cells required (%s)\n"
-                                 ,name
-                        );
+                        saw_points_single_var = 1;
+                        value = mxmlElementGetAttr (n, "value");
 
-                return 0;
-            }
+                        if (!value)
+                        {
+                            log_warn ("config.xml: value attribute on "
+                                    "points-single-var required (%s)\n"
+                                    ,name
+                                    );
 
-            if (!parseMeshUnstructuredMixedCells1 (count, data, types
-            									   ,new_group
-                                                   ,name
-                                                   )
-               )
-                return 0;
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-        }
+                            return 0;
+                        }
+
+                        if (!adios_define_mesh_unstructured_pointsSingleVar (value, new_group, name))
+                            return 0;
+                    } else
+                        if (!strcasecmp (n->value.element.name, "uniform-cells"))
+                        {
+                            const char * count;
+                            const char * data;
+                            const char * type;
+
+                            saw_cell_set = 1;
+                            count = mxmlElementGetAttr (n, "count");
+                            data = mxmlElementGetAttr (n, "data");
+                            type = mxmlElementGetAttr (n, "type");
+
+                            if (!count)
+                            {
+                                log_warn ("config.xml: count attribute on "
+                                        "uniform-cells required (%s)\n"
+                                        ,name
+                                        );
+
+                                return 0;
+                            }
+                            if (!data)
+                            {
+                                log_warn ("config.xml: data attribute on "
+                                        "uniform-cells required (%s)\n"
+                                        ,name
+                                        );
+
+                                return 0;
+                            }
+                            if (!type)
+                            {
+                                log_warn ("config.xml: type attribute on "
+                                        "uniform-cells required (%s)\n"
+                                        ,name
+                                        );
+
+                                return 0;
+                            }
+
+                            if (!adios_define_mesh_unstructured_uniformCells (count, data, type
+                                        , new_group
+                                        ,name
+                                        )
+                               )
+                                return 0;
+                        } else
+                            if (!strcasecmp (n->value.element.name, "mixed-cells"))
+                            {
+                                const char * count;
+                                const char * data;
+                                const char * types;
+
+                                saw_cell_set = 1;
+                                count = mxmlElementGetAttr (n, "count");
+                                data = mxmlElementGetAttr (n, "data");
+                                types = mxmlElementGetAttr (n, "type");
+
+                                if (!count)
+                                {
+                                    log_warn ("config.xml: count attribute on "
+                                            "mixed-cells required (%s)\n"
+                                            ,name
+                                            );
+
+                                    return 0;
+                                }
+                                if (!data)
+                                {
+                                    log_warn ("config.xml: data attribute on "
+                                            "mixed-cells required (%s)\n"
+                                            ,name
+                                            );
+
+                                    return 0;
+                                }
+                                if (!types)
+                                {
+                                    log_warn ("config.xml: types attribute on "
+                                            "mixed-cells required (%s)\n"
+                                            ,name
+                                            );
+
+                                    return 0;
+                                }
+
+                                if (!adios_define_mesh_unstructured_mixedCells (count, data, types
+                                            ,new_group
+                                            ,name
+                                            )
+                                   )
+                                    return 0;
+                            } else
+                            {
+                                if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                                {
+                                    continue;
+                                }
+                            }
     }
 
     if (!saw_points_multi_var && !saw_points_single_var)
     {
         log_warn ("config.xml: points-single-var or points-multi-var "
-                         "required on mesh type=unstructured (%s)\n"
-                         ,name
+                "required on mesh type=unstructured (%s)\n"
+                ,name
                 );
 
         return 0;
@@ -5432,8 +930,8 @@ static int parseMeshUnstructured1 (mxml_node_t * node
     if (!saw_cell_set)
     {
         log_warn ("config.xml: at least one cell-set required on "
-                         "mesh type=unstructured (%s)\n"
-                         ,name
+                "mesh type=unstructured (%s)\n"
+                ,name
                 );
 
         return 0;
@@ -5443,8 +941,8 @@ static int parseMeshUnstructured1 (mxml_node_t * node
 }
 
 static int validatePath (const struct adios_var_struct * vars
-                        ,const char * test_path
-                        )
+        ,const char * test_path
+        )
 {
     // if it is a default path, it is ok by default
     if (!strcmp (test_path, "/"))
@@ -5498,10 +996,10 @@ static int validatePath (const struct adios_var_struct * vars
         int var_len = strlen (var_only);
 
         if (   (path_matches && var_matches)
-            || (path_matches && var_len == 0)
-            || (full_path_matches)
-            || (prefix_matches)
-            || (path_var_matches)
+                || (path_matches && var_len == 0)
+                || (full_path_matches)
+                || (prefix_matches)
+                || (path_var_matches)
            )
         {
             free (path);
@@ -5523,55 +1021,6 @@ static int validatePath (const struct adios_var_struct * vars
     return 0;
 }
 
-static int parseSchemaVersion(struct adios_group_struct * new_group, char * schema_version){
-    int64_t      p_new_group = (int64_t) new_group;
-
-    if (strcasecmp (schema_version,"")){
-      char * ver;// copy version
-      char * d;  // dot location
-      char * ptr_end;
-      ver = strdup (schema_version);
-      char * schema_version_major;
-      char * schema_version_minor;
-      char * schema_version_major_att_nam;
-      char * schema_version_minor_att_nam;
-      d = strtok (ver, ".");
-      int counter = 0; // counter
-      //int slength = 0;
-      while (d)
-      {
-          int slength = 0;
-          if (!strtod (d,&ptr_end)){
-              printf("Schema version invalid.\n");
-              counter = 0;
-              break;
-          }else{
-              slength = strlen("adios_schema/");
-              if (counter == 0 ){
-                  slength = slength + strlen("version_major") + 1;
-                  schema_version_major_att_nam = malloc (slength);
-                  strcpy(schema_version_major_att_nam,"adios_schema/version_major");
-                  //schema_version_major = strdup(d);
-                  adios_common_define_attribute (p_new_group,schema_version_major_att_nam,"/",adios_string,d,"");
-              }else if (counter == 1){
-                  slength = slength + strlen("version_minor") + 1;
-                  schema_version_minor_att_nam = malloc (slength);
-                  strcpy(schema_version_minor_att_nam,"adios_schema/version_minor");
-                  //schema_version_minor = strdup(d);
-                  adios_common_define_attribute (p_new_group,schema_version_minor_att_nam,"/",adios_string,d,"");
-              }
-          }
-          counter++;
-          d = strtok (NULL, ".");
-      }
-      if (counter == 0){
-          printf("Error: Could not detect valid schema version.\n");
-      }
-    free(ver);
-    }
-    return 0;
-}
-
 static int parseGroup (mxml_node_t * node, char * schema_version)
 {
     mxml_node_t * n;
@@ -5593,21 +1042,21 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
         mxml_attr_t * attr = &node->value.element.attrs [i];
 
         GET_ATTR("name",attr,datagroup_name,"adios-group")
-        // JL: 1-2010
-        // Although this is not used, we are leaving in the retrevial
-        // of this to avoid messages from all of the existing XML files.
-        // In a few months, once everything has been updated, we can remove
-        // this code
-        GET_ATTR("coordination-communicator",attr,coordination_comm,"adios-group")
-        GET_ATTR("coordination-var",attr,coordination_var,"adios-group")
-        GET_ATTR("host-language",attr,host_language,"adios-group")
-        GET_ATTR("time-index",attr,time_index_name,"adios-group")
-        GET_ATTR("stats",attr,stats,"adios-group")
-        log_warn ("config.xml: unknown attribute '%s' on %s "
-                         "(ignored)\n"
-                ,attr->name
-                ,"adios-group"
-                );
+            // JL: 1-2010
+            // Although this is not used, we are leaving in the retrevial
+            // of this to avoid messages from all of the existing XML files.
+            // In a few months, once everything has been updated, we can remove
+            // this code
+            GET_ATTR("coordination-communicator",attr,coordination_comm,"adios-group")
+            GET_ATTR("coordination-var",attr,coordination_var,"adios-group")
+            GET_ATTR("host-language",attr,host_language,"adios-group")
+            GET_ATTR("time-index",attr,time_index_name,"adios-group")
+            GET_ATTR("stats",attr,stats,"adios-group")
+            log_warn ("config.xml: unknown attribute '%s' on %s "
+                    "(ignored)\n"
+                    ,attr->name
+                    ,"adios-group"
+                    );
     }
 
     if (!datagroup_name)
@@ -5666,24 +1115,24 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
         }
     }
 
-// fix the bgp bugs 
-/*
-    adios_common_declare_group ((int64_t *) &new_group, datagroup_name
-                               ,host_language_fortran, coordination_comm
-                               ,coordination_var, time_index_name
-                               );
-*/
+    // fix the bgp bugs
+    /*
+       adios_common_declare_group ((int64_t *) &new_group, datagroup_name
+       ,host_language_fortran, coordination_comm
+       ,coordination_var, time_index_name
+       );
+       */
     adios_common_declare_group (&ptr_new_group, datagroup_name
-                               ,host_language_fortran, coordination_comm
-                               ,coordination_var, time_index_name
-                               ,enable_stats
-                               );
-     new_group = (struct adios_group_struct *)ptr_new_group;
+            ,host_language_fortran, coordination_comm
+            ,coordination_var, time_index_name
+            ,enable_stats
+            );
+    new_group = (struct adios_group_struct *)ptr_new_group;
 
-    parseSchemaVersion(new_group, schema_version);
+   adios_define_schema_version(new_group, schema_version);
     for (n = mxmlWalkNext (node, node, MXML_DESCEND)
-        ;n
-        ;n = mxmlWalkNext (n, node, MXML_NO_DESCEND)
+            ;n
+            ;n = mxmlWalkNext (n, node, MXML_NO_DESCEND)
         )
     {
         const char * gb_global_dimensions = "";
@@ -5710,6 +1159,7 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
             const char * gread = 0;
             const char * gwrite = 0;
             const char * read_flag = 0;
+            const char * transform_type = 0; // NCSU ALACRITY-ADIOS
             enum ADIOS_DATATYPES t1;
             char  * mpath1 = 0;
             char  * mpath2 = 0;
@@ -5719,44 +1169,45 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                 mxml_attr_t * attr = &n->value.element.attrs [i];
 
                 GET_ATTR("name",attr,name,"var")
-                GET_ATTR("mesh",attr,mesh,"var")
-                GET_ATTR("center",attr,center,"var")
-                GET_ATTR("time-steps",attr,tsteps,"var")
-                GET_ATTR("time-scale",attr,tscale,"var")
-                GET_ATTR("time-series-format",attr,tformat,"var")
-                GET_ATTR("hyperslab",attr,hyperslab,"var")
-                GET_ATTR("path",attr,path,"var")
-                GET_ATTR("type",attr,type,"var")
-                GET_ATTR("dimensions",attr,dimensions,"var")
-                GET_ATTR("dimension",attr,dimension,"var")
-                GET_ATTR("gwrite",attr,gwrite,"var")
-                GET_ATTR("gread",attr,gread,"var")
-                GET_ATTR("read",attr,read_flag,"var")
-                log_warn ("config.xml: unknown attribute '%s' on %s "
-                                 "(ignored)\n"
-                        ,attr->name
-                        ,"var"
-                        );
+                    GET_ATTR("mesh",attr,mesh,"var")
+                    GET_ATTR("center",attr,center,"var")
+                    GET_ATTR("time-steps",attr,tsteps,"var")
+                    GET_ATTR("time-scale",attr,tscale,"var")
+                    GET_ATTR("time-series-format",attr,tformat,"var")
+                    GET_ATTR("hyperslab",attr,hyperslab,"var")
+                    GET_ATTR("path",attr,path,"var")
+                    GET_ATTR("type",attr,type,"var")
+                    GET_ATTR("dimensions",attr,dimensions,"var")
+                    GET_ATTR("dimension",attr,dimension,"var")
+                    GET_ATTR("gwrite",attr,gwrite,"var")
+                    GET_ATTR("gread",attr,gread,"var")
+                    GET_ATTR("read",attr,read_flag,"var")
+                GET_ATTR("transform",attr,transform_type,"var") // NCSU ALACRITY-ADIOS
+                    log_warn ("config.xml: unknown attribute '%s' on %s "
+                            "(ignored)\n"
+                            ,attr->name
+                            ,"var"
+                            );
             }
 
             if (!name)
                 name = ""; // this will catch the error
             if (!path)
-                path = "/";
+                path = "";
             if (!type)
                 type = ""; // this will catch the error
             if (!mesh)
-                mesh = "";  
+                mesh = "";
             if (!center)
-                center = "";  
+                center = "";
             if (!tsteps)
-                tsteps = "";  
+                tsteps = "";
             if (!tscale)
-                tscale = "";  
+                tscale = "";
             if (!tformat)
-                tformat = "";  
+                tformat = "";
             if (!hyperslab)
-                hyperslab = "";  
+                hyperslab = "";
             t1 = parseType (type, name);
 
             if (!dimensions)
@@ -5769,18 +1220,19 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
             if (read_flag)
                 parseFlag ("read", read_flag, adios_flag_no);
 
-// fix the bgp bugs
-//            if (!adios_common_define_var (*(int64_t *) &new_group, name
+            // fix the bgp bugs
+            //            if (!adios_common_define_var (*(int64_t *) &new_group, name
             if (!adios_common_define_var (ptr_new_group, name
-                                         ,path, t1, dimensions
-                                         ,gb_global_dimensions
-                                         ,gb_local_offsets
-                                         )
+                        ,path, t1, dimensions
+                        ,gb_global_dimensions
+                        ,gb_local_offsets
+                                         ,transform_type // NCSU ALACRITY-ADIOS
+                        )
                )
             {
                 return 0;
             }else{
-                // Successfully define a variable, so now 
+                // Successfully define a variable, so now
                 // an attribute for the mesh if it exists.
                 if (strcmp(mesh,"")){
                     mpath1 = malloc(strlen("/adios_schema")+strlen(name)+1);
@@ -5798,657 +1250,477 @@ static int parseGroup (mxml_node_t * node, char * schema_version)
                 // if a time attribute exists
                 // parse it and define it
                 if (strcmp(tsteps,"")){
-                    parseVarTimeSteps(tsteps,new_group,name);
+                    adios_define_var_timesteps(tsteps,new_group,name,path);
                 }
                 // if a time scale attribute exists
                 // parse it and define it
                 if (strcmp(tscale,"")){
-                    parseVarTimeScale(tscale,new_group,name);
+                    adios_define_var_timescale(tscale,new_group,name,path);
                 }
                 // if a time series format attribute exists
                 // parse it and define it
                 if (strcmp(tformat,"")){
-                    parseVarTimeSeriesFormat(tformat,new_group,name);
+                    adios_define_var_timeseriesformat(tformat,new_group,name,path);
                 }
                 // if a hyperslab attribute exists
                 // parse it and define it
                 if (strcmp(hyperslab,"")){
-                    parseVarHyperSlab(hyperslab,new_group,name);
+                    adios_define_var_hyperslab(hyperslab,new_group,name,path);
                 }
             }
         } else
-        if (!strcasecmp (n->value.element.name, "global-bounds"))
-        {
-            mxml_node_t * n1;   // used for global_bounds
-            struct adios_global_bounds_struct * new_global_bounds = 0;
+            if (!strcasecmp (n->value.element.name, "global-bounds"))
+            {
+                mxml_node_t * n1;   // used for global_bounds
+                struct adios_global_bounds_struct * new_global_bounds = 0;
 
-            const char * dimensions = 0;
-            const char * dimension = 0;
-            const char * global_dimensions = 0;
-            const char * global_dimension = 0;
-            const char * offsets = 0;
-            const char * offset = 0;
-            const char * local_offsets = 0;
-            const char * local_offset = 0;
+                const char * dimensions = 0;
+                const char * dimension = 0;
+                const char * global_dimensions = 0;
+                const char * global_dimension = 0;
+                const char * offsets = 0;
+                const char * offset = 0;
+                const char * local_offsets = 0;
+                const char * local_offset = 0;
 
-            for (i = 0; i < n->value.element.num_attrs; i++)
-            {
-                mxml_attr_t * attr = &n->value.element.attrs [i];
+                for (i = 0; i < n->value.element.num_attrs; i++)
+                {
+                    mxml_attr_t * attr = &n->value.element.attrs [i];
 
-                GET_ATTR("dimensions",attr,dimensions,"var")
-                GET_ATTR("dimension",attr,dimension,"var")
+                    GET_ATTR("dimensions",attr,dimensions,"var")
+                        GET_ATTR("dimension",attr,dimension,"var")
 
-                GET_ATTR("global-dimensions",attr,global_dimensions,"var")
-                GET_ATTR("global-dimension",attr,global_dimension,"var")
+                        GET_ATTR("global-dimensions",attr,global_dimensions,"var")
+                        GET_ATTR("global-dimension",attr,global_dimension,"var")
 
-                GET_ATTR("offsets",attr,offsets,"var")
-                GET_ATTR("offset",attr,offset,"var")
+                        GET_ATTR("offsets",attr,offsets,"var")
+                        GET_ATTR("offset",attr,offset,"var")
 
-                GET_ATTR("local-offsets",attr,local_offsets,"var")
-                GET_ATTR("local-offset",attr,local_offset,"var")
+                        GET_ATTR("local-offsets",attr,local_offsets,"var")
+                        GET_ATTR("local-offset",attr,local_offset,"var")
 
-                log_warn ("config.xml: unknown attribute '%s' on %s "
-                                 "(ignored)\n"
-                        ,attr->name
-                        ,"global-bounds"
-                        );
-            }
+                        log_warn ("config.xml: unknown attribute '%s' on %s "
+                                "(ignored)\n"
+                                ,attr->name
+                                ,"global-bounds"
+                                );
+                }
 
-            if (!dimensions)
-            {
-                dimensions = (dimension ? dimension : global_dimensions);
-                dimensions = (dimensions ? dimensions : global_dimension);
                 if (!dimensions)
                 {
-                    adios_error (err_global_dim_required, "config.xml: dimensions required on "
-                                     "global-bounds\n"
+                    dimensions = (dimension ? dimension : global_dimensions);
+                    dimensions = (dimensions ? dimensions : global_dimension);
+                    if (!dimensions)
+                    {
+                        adios_error (err_global_dim_required, "config.xml: dimensions required on "
+                                "global-bounds\n"
+                                );
+
+                        return 0;
+                    }
+                }
+                if (!offsets)
+                {
+                    offsets = (offset ? offset : local_offsets);
+                    offsets = (offsets ? offsets : local_offset);
+                    adios_error (err_global_offset_required, "config.xml: offsets required on "
+                            "global-bounds\n"
                             );
 
                     return 0;
                 }
-            }
-            if (!offsets)
-            {
-                offsets = (offset ? offset : local_offsets);
-                offsets = (offsets ? offsets : local_offset);
-                adios_error (err_global_offset_required, "config.xml: offsets required on "
-                                 "global-bounds\n"
-                        );
 
-                return 0;
-            }
+                gb_global_dimensions = dimensions;
+                gb_local_offsets = offsets;
 
-            gb_global_dimensions = dimensions;
-            gb_local_offsets = offsets;
-
-            for (n1 = mxmlWalkNext (n, n, MXML_DESCEND)
-                ;n1
-                ;n1 = mxmlWalkNext (n1, n, MXML_DESCEND)
-                )
-            {
-                if (n1->type != MXML_ELEMENT)
+                for (n1 = mxmlWalkNext (n, n, MXML_DESCEND)
+                        ;n1
+                        ;n1 = mxmlWalkNext (n1, n, MXML_DESCEND)
+                    )
                 {
-                    continue;
+                    if (n1->type != MXML_ELEMENT)
+                    {
+                        continue;
+                    }
+
+                    if (!strcasecmp (n1->value.element.name, "var"))
+                    {
+                        const char * name = 0;
+                        const char * mesh = 0;
+                        const char * center = 0;
+                        const char * tsteps = 0;
+                        const char * tscale = 0;
+                        const char * tformat = 0;
+                        const char * hyperslab = 0;
+                        const char * path = 0;
+                        const char * type = 0;
+                        const char * dimension = 0;
+                        const char * dimensions = 0;
+                        const char * gwrite = 0;
+                        const char * gread = 0;
+                        const char * read_flag = 0;
+                    const char * transform_type = 0; // NCSU ALACRITY-ADIOS
+                        enum ADIOS_DATATYPES t1;
+                        char * mpath1 = 0;
+                        char * mpath2 = 0;
+
+                        for (i = 0; i < n1->value.element.num_attrs; i++)
+                        {
+                            mxml_attr_t * attr = &n1->value.element.attrs [i];
+
+                            GET_ATTR("name",attr,name,"var")
+                                GET_ATTR("mesh",attr,mesh,"var")
+                                GET_ATTR("center",attr,center,"var")
+                                GET_ATTR("time-steps",attr,tsteps,"var")
+                                GET_ATTR("time-scale",attr,tscale,"var")
+                                GET_ATTR("time-series-format",attr,tformat,"var")
+                                GET_ATTR("hyperslab",attr,hyperslab,"var")
+                                GET_ATTR("path",attr,path,"var")
+                                GET_ATTR("type",attr,type,"global-bounds var")
+                                GET_ATTR("dimensions",attr,dimensions,"var")
+                                GET_ATTR("dimension",attr,dimension,"var")
+                                GET_ATTR("gwrite",attr,gwrite,"var")
+                                GET_ATTR("gread",attr,gread,"var")
+                                GET_ATTR("read",attr,read_flag,"var")
+                        GET_ATTR("transform",attr,transform_type,"var") // NCSU ALACRITY-ADIOS
+                                log_warn ("config.xml: unknown attribute '%s' "
+                                        "on %s (ignored)\n"
+                                        ,attr->name
+                                        ,"var"
+                                        );
+                        }
+
+                        if (!name)
+                            name = "";  // this will catch the error
+                        if (!path)
+                            path = "";
+                        if (!type)
+                            type = ""; // this will catch the error
+                        if (!mesh)
+                            mesh = "";
+                        if (!center)
+                            center = "";
+                        if (!tsteps)
+                            tsteps = "";
+                        if (!tscale)
+                            tscale = "";
+                        if (!tformat)
+                            tformat = "";
+                        if (!hyperslab)
+                            hyperslab = "";
+                        t1 = parseType (type, name);
+                        if (!dimensions)
+                            dimensions = dimension;
+
+                        if (read_flag)
+                            parseFlag ("read", read_flag, adios_flag_no);
+                        // fix the bgp bugs
+                        //                    if (!adios_common_define_var (*(int64_t *) &new_group
+                        if (!adios_common_define_var (ptr_new_group
+                                    ,name
+                                    ,path, t1, dimensions
+                                    ,gb_global_dimensions
+                                    ,gb_local_offsets
+                                                 ,transform_type // NCSU ALACRITY-ADIOS
+                                    )
+                           )
+                        {
+                            return 0;
+                        }else{
+                            // Successfully define a variable, so now
+                            // an attribute for the mesh if it exists.
+                            if (strcmp(mesh,"")){
+                                mpath1 = malloc(strlen("/adios_schema")+strlen(name)+1);
+                                strcpy(mpath1,name);
+                                strcat(mpath1,"/adios_schema");
+                                adios_common_define_attribute (ptr_new_group,mpath1,path,adios_string,mesh,"");
+                            }
+                            // an attribute for the mesh if it exists.
+                            if (strcmp(center,"")){
+                                mpath2 = malloc(strlen("/adios_schema/centering")+strlen(name)+1);
+                                strcpy(mpath2,name);
+                                strcat(mpath2,"/adios_schema/centering");
+                                adios_common_define_attribute (ptr_new_group,mpath2,path,adios_string,center,"");
+                            }
+                            // if a time attribute exists
+                            // parse it and define it
+                            if (strcmp(tsteps,"")){
+                                adios_define_var_timesteps(tsteps,new_group,name,path);
+                            }
+                            // if a time scale attribute exists
+                            // parse it and define it
+                            if (strcmp(tscale,"")){
+                                adios_define_var_timescale(tscale,new_group,name,path);
+                            }
+                            // if a time series format attribute exists
+                            // parse it and define it
+                            if (strcmp(tformat,"")){
+                                adios_define_var_timeseriesformat(tformat,new_group,name,path);
+                            }
+                            // if a hyperslab attribute exists
+                            // parse it and define it
+                            if (strcmp(hyperslab,"")){
+                                adios_define_var_hyperslab(hyperslab,new_group,name,path);
+                            }
+                        }
+                    } else
+                    {
+                        if (!strncmp (n1->value.element.name, "!--", 3)) // comment
+                        {
+                            continue;
+                        }
+                        else
+                        {
+                            log_warn ("config.xml: invalid xml element: "
+                                    "'%s'\n"
+                                    ,n1->value.element.name
+                                    );
+
+                            return 0;
+                        }
+                    }
                 }
 
-                if (!strcasecmp (n1->value.element.name, "var"))
+                gb_global_dimensions = "";
+                gb_local_offsets = "";
+            } else
+                if (!strcasecmp (n->value.element.name, "attribute"))
                 {
                     const char * name = 0;
-                    const char * mesh = 0;
-                    const char * center = 0;
-                    const char * tsteps = 0;
-                    const char * tscale = 0;
-                    const char * tformat = 0;
-                    const char * hyperslab = 0;
                     const char * path = 0;
+                    const char * value = 0;
                     const char * type = 0;
-                    const char * dimension = 0;
-                    const char * dimensions = 0;
-                    const char * gwrite = 0;
-                    const char * gread = 0;
-                    const char * read_flag = 0;
+                    const char * var = 0;
                     enum ADIOS_DATATYPES t1;
-                    char * mpath1 = 0;
-                    char * mpath2 = 0;
 
-                    for (i = 0; i < n1->value.element.num_attrs; i++)
+                    for (i = 0; i < n->value.element.num_attrs; i++)
                     {
-                        mxml_attr_t * attr = &n1->value.element.attrs [i];
+                        mxml_attr_t * attr = &n->value.element.attrs [i];
 
                         GET_ATTR("name",attr,name,"var")
-                        GET_ATTR("mesh",attr,mesh,"var")
-                        GET_ATTR("center",attr,center,"var")
-                        GET_ATTR("time-steps",attr,tsteps,"var")
-                        GET_ATTR("time-scale",attr,tscale,"var")
-                        GET_ATTR("time-series-format",attr,tformat,"var")
-                        GET_ATTR("hyperslab",attr,hyperslab,"var")
-                        GET_ATTR("path",attr,path,"var")
-                        GET_ATTR("type",attr,type,"global-bounds var")
-                        GET_ATTR("dimensions",attr,dimensions,"var")
-                        GET_ATTR("dimension",attr,dimension,"var")
-                        GET_ATTR("gwrite",attr,gwrite,"var")
-                        GET_ATTR("gread",attr,gread,"var")
-                        GET_ATTR("read",attr,read_flag,"var")
-                        log_warn ("config.xml: unknown attribute '%s' "
-                                         "on %s (ignored)\n"
-                                ,attr->name
-                                ,"var"
-                                );
+                            GET_ATTR("path",attr,path,"var")
+                            GET_ATTR("type",attr,type,"var")
+                            GET_ATTR("value",attr,value,"var")
+                            GET_ATTR("var",attr,var,"var")
+                            log_warn ("config.xml: unknown attribute '%s' on %s "
+                                    "(ignored)\n"
+                                    ,attr->name
+                                    ,"attribute"
+                                    );
                     }
 
                     if (!name)
-                        name = "";  // this will catch the error
-                    if (!path)
-                        path = "/";
-                    if (!type)
-                        type = ""; // this will catch the error
-                    if (!mesh)
-                        mesh = ""; 
-                    if (!center)
-                        center = ""; 
-                    if (!tsteps)
-                        tsteps = ""; 
-                    if (!tscale)
-                        tscale = ""; 
-                    if (!tformat)
-                        tformat = ""; 
-                    if (!hyperslab)
-                        hyperslab = ""; 
-                    t1 = parseType (type, name);
-                    if (!dimensions)
-                        dimensions = dimension;
-
-                    if (read_flag)
-                        parseFlag ("read", read_flag, adios_flag_no);
-// fix the bgp bugs
-//                    if (!adios_common_define_var (*(int64_t *) &new_group
-                    if (!adios_common_define_var (ptr_new_group
-                                                 ,name
-                                                 ,path, t1, dimensions
-                                                 ,gb_global_dimensions
-                                                 ,gb_local_offsets
-                                                 )
-                       )
                     {
+                        log_warn ("config.xml: attribute element requires "
+                                "name\n");
+
                         return 0;
-                    }else{
-                        // Successfully define a variable, so now 
-                        // an attribute for the mesh if it exists.
-                        if (strcmp(mesh,"")){
-                            mpath1 = malloc(strlen("/adios_schema")+strlen(name)+1);
-                            strcpy(mpath1,name);
-                            strcat(mpath1,"/adios_schema");
-                            adios_common_define_attribute (ptr_new_group,mpath1,path,adios_string,mesh,"");
-                        }
-                        // an attribute for the mesh if it exists.
-                        if (strcmp(center,"")){
-                            mpath2 = malloc(strlen("/adios_schema/centering")+strlen(name)+1);
-                            strcpy(mpath2,name);
-                            strcat(mpath2,"/adios_schema/centering");
-                            adios_common_define_attribute (ptr_new_group,mpath2,path,adios_string,center,"");
-                         }
-                        // if a time attribute exists
-                        // parse it and define it
-                        if (strcmp(tsteps,"")){
-                            parseVarTimeSteps(tsteps,new_group,name);
-                        }
-                        // if a time scale attribute exists
-                        // parse it and define it
-                        if (strcmp(tscale,"")){
-                            parseVarTimeScale(tscale,new_group,name);
-                        }
-                        // if a time series format attribute exists
-                        // parse it and define it
-                        if (strcmp(tformat,"")){
-                            parseVarTimeSeriesFormat(tformat,new_group,name);
-                        }
-                        // if a hyperslab attribute exists
-                        // parse it and define it
-                        if (strcmp(hyperslab,"")){
-                            parseVarHyperSlab(hyperslab,new_group,name);
-                        }
                     }
-                } else
-                {
-                    if (!strncmp (n1->value.element.name, "!--", 3)) // comment
+                    /*if (!path)
                     {
-                        continue;
-                    }
-                    else
+                        log_warn ("config.xml: attribute element requires "
+                                "path\n");
+
+                        return 0;
+                    }*/
+                    if ((!value && !var) || (value && var))
                     {
-                        log_warn ("config.xml: invalid xml element: "
-                                         "'%s'\n"
-                                ,n1->value.element.name
+                        log_warn ("config.xml: attribute element '%s' "
+                                "requires either value OR var\n"
+                                ,name
                                 );
 
                         return 0;
                     }
-                }
-            }
-
-            gb_global_dimensions = "";
-            gb_local_offsets = "";
-        } else
-        if (!strcasecmp (n->value.element.name, "attribute"))
-        {
-            const char * name = 0;
-            const char * path = 0;
-            const char * value = 0;
-            const char * type = 0;
-            const char * var = 0;
-            enum ADIOS_DATATYPES t1;
-
-            for (i = 0; i < n->value.element.num_attrs; i++)
-            {
-                mxml_attr_t * attr = &n->value.element.attrs [i];
-
-                GET_ATTR("name",attr,name,"var")
-                GET_ATTR("path",attr,path,"var")
-                GET_ATTR("type",attr,type,"var")
-                GET_ATTR("value",attr,value,"var")
-                GET_ATTR("var",attr,var,"var")
-                log_warn ("config.xml: unknown attribute '%s' on %s "
-                                 "(ignored)\n"
-                        ,attr->name
-                        ,"attribute"
-                        );
-            }
-
-            if (!name)
-            {
-                log_warn ("config.xml: attribute element requires "
-                                 "name\n");
-
-                return 0;
-            }
-            if (!path)
-            {
-                log_warn ("config.xml: attribute element requires "
-                                 "path\n");
-
-                return 0;
-            }
-            if ((!value && !var) || (value && var))
-            {
-                log_warn ("config.xml: attribute element '%s' "
-                                 "requires either value OR var\n"
-                        ,name
-                        );
+                    if (var && type)
+                    {
+                        log_warn ("config.xml: attribute element '%s'. "
+                                "The type of an associated var is part "
+                                "of the associated var element and cannot "
+                                "be provided as part of the attribute "
+                                "element."
+                                "\n",name
+                                );
 
-                return 0;
-            }
-            if (var && type)
-            {
-                log_warn ("config.xml: attribute element '%s'. "
-                                 "The type of an associated var is part "
-                                 "of the associated var element and cannot "
-                                 "be provided as part of the attribute "
-                                 "element."
-                                 "\n"
-                        ,name
-                        );
+                        return 0;
+                    }
+                    if (!type && value)
+                    {
+                        type = "string";
+                    }
+                    if (!var)
+                    {
+                        t1 = parseType (type, name);
+                    }
+                    else
+                    {
+                        t1 = adios_unknown;
+                    }
+                    if (!adios_common_define_attribute (ptr_new_group, name
+                                ,path, t1, value, var
+                                )
+                       )
+                    {
+                        return 0;
+                    }
+                } else if (!strcasecmp (n->value.element.name, "mesh"))
+                {
+                    const char * type;
+                    const char * time_varying;
+                    const char * time_steps;
+                    const char * time_scale;
+                    const char * time_format;
+                    const char * mesh_file;
+                    const char * mesh_group;
+                    int t_varying;
+                    const char * name;
+
+                    // Get the mesh name
+                    name = mxmlElementGetAttr (n, "name");
+                    // Get the mesh type
+                    type = mxmlElementGetAttr (n, "type");
+                    // Get the time varying parameter
+                    time_varying = mxmlElementGetAttr(n, "time-varying");
+                    // Get the time step parameter (integer, number of times mesh is written)
+                    time_steps = mxmlElementGetAttr(n, "time-steps");
+                    // Get the time scale parameter (real time, not integer)
+                    time_scale = mxmlElementGetAttr(n, "time-scale");
+                    // Get the time format parameter (time series formatting)
+                    time_format = mxmlElementGetAttr(n, "time-series-format");
+                    if (!type)
+                        type = "";
 
-                return 0;
-            }
-            if (!type && value)
-            {
-                type = "string";
-            }
-            if (!var)
-            {
-                t1 = parseType (type, name);
-            }
-            else
-            {
-                t1 = adios_unknown;
-            }
-            if (!adios_common_define_attribute (ptr_new_group, name
-                                               ,path, t1, value, var
-                                               )
-               )
-            {
-                return 0;
-            }
-        } else if (!strcasecmp (n->value.element.name, "mesh"))
-        {
-            const char * type;
-            const char * time_varying;
-            const char * time_steps;
-            const char * time_scale;
-            const char * time_format;
-            const char * mesh_file;
-            const char * mesh_group;
-            int t_varying;
-            const char * name;
-
-            // Get the mesh name
-            name = mxmlElementGetAttr (n, "name");
-            // Get the mesh type
-            type = mxmlElementGetAttr (n, "type");
-            // Get the time varying parameter
-            time_varying = mxmlElementGetAttr(n, "time-varying");
-            // Get the time step parameter (integer, number of times mesh is written)
-            time_steps = mxmlElementGetAttr(n, "time-steps");
-            // Get the time scale parameter (real time, not integer)
-            time_scale = mxmlElementGetAttr(n, "time-scale");
-            // Get the time format parameter (time series formatting)
-            time_format = mxmlElementGetAttr(n, "time-series-format");
-            if (!type)
-                type = "";
+                    if (!strcmp(time_varying,"yes")){
+                        t_varying = adios_flag_yes;
+                    }else if (!strcmp(time_varying,"no")){
+                        t_varying = adios_flag_no;
+                    }else{
+                        t_varying = adios_flag_no;
+                        // If the user enters anything else than "yes" or "no"
+                        // Output a warning letting them no that the default ("no"
+                        // will be use give instead of their value
+                        log_warn ("config.xml: the value of the time varying "
+                                "attribute can only be 'yes' or 'no'. The "
+                                "unrecognize value of '%s' is ignored and "
+                                "replaced by 'no'."
+                                "\n"
+                                ,time_varying
+                                );
+                    }
 
-            if (!strcmp(time_varying,"yes")){
-                t_varying = adios_flag_yes;
-            }else if (!strcmp(time_varying,"no")){
-                t_varying = adios_flag_no;
-            }else{
-                t_varying = adios_flag_no;
-                // If the user enters anything else than "yes" or "no" 
-                // Output a warning letting them no that the default ("no"
-                // will be use give instead of their value 
-                log_warn ("config.xml: the value of the time varying "
-                        "attribute can only be 'yes' or 'no'. The "
-                        "unrecognize value of '%s' is ignored and "
-                        "replaced by 'no'."
-                        "\n"
-                        ,time_varying
-                        );
-            }
+                    char * meshtype = 0;
+                    char * meshtime = 0;
+                    char * meshfile = 0;
+                    char * meshgroup = 0;
+                    char * meshtimeformat = 0;
+                    adios_conca_mesh_att_nam(&meshtype, name, "type");
+                    adios_conca_mesh_att_nam(&meshtime, name, "time-varying");
+                    adios_conca_mesh_att_nam(&meshfile, name, "mesh-file");
+                    adios_conca_mesh_att_nam(&meshgroup, name, "mesh-group");
+                    adios_conca_mesh_att_nam(&meshtimeformat, name, "time-series-format");
+
+                    // Define attribute for the type and time varying characteristics
+                    adios_common_define_attribute (ptr_new_group,meshtype,"/",adios_string,type,"");
+                    adios_common_define_attribute (ptr_new_group,meshtime,"/",adios_string,time_varying,"");
+                    adios_define_mesh_timeSteps(time_steps, new_group, name);
+                    adios_define_mesh_timeScale(time_scale, new_group, name);
+                    adios_define_mesh_timeSeriesFormat(time_format, new_group, name);
+                    // Only parse mesh if the variables are in this file
+                    // otherwise simply point the mesh file
+                    mesh_file = mxmlElementGetAttr(n, "file");
+                    mesh_group = mxmlElementGetAttr(n, "group");
+
+                    if (mesh_file)
+                        adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
 
-            char * meshtype = 0;
-            char * meshtime = 0;
-            char * meshfile = 0;
-            char * meshgroup = 0;
-            char * meshtimeformat = 0;
-            conca_mesh_att_nam(&meshtype, name, "type");
-            conca_mesh_att_nam(&meshtime, name, "time-varying");
-            conca_mesh_att_nam(&meshfile, name, "mesh-file");
-            conca_mesh_att_nam(&meshgroup, name, "mesh-group");
-            conca_mesh_att_nam(&meshtimeformat, name, "time-series-format");
-
-            // Define attribute for the type and time varying characteristics
-            adios_common_define_attribute (ptr_new_group,meshtype,"/",adios_string,type,"");
-            adios_common_define_attribute (ptr_new_group,meshtime,"/",adios_string,time_varying,"");
-            parseMeshTimeSteps(time_steps, new_group, name);
-            parseMeshTimeScale(time_scale, new_group, name);
-            parseMeshTimeSeriesFormat(time_format, new_group, name);
-            // Only parse mesh if the variables are in this file
-            // otherwise simply point the mesh file
-            mesh_file = mxmlElementGetAttr(n, "file");
-            mesh_group = mxmlElementGetAttr(n, "group");
-            if (!strcasecmp (type, "uniform"))
-            {
-                if (mesh_file){
-                    adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
                     if (mesh_group)
                         adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                    parseMeshUniform1 (n, ptr_new_group, name);
-                }else{
-                    if (mesh_group){
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                        parseMeshUniform1 (n, ptr_new_group, name);
-                    }else{
+
+                    if (!strcasecmp (type, "uniform"))
+                    {
                         struct adios_mesh_struct * mes;
                         mes = adios_common_define_mesh(ptr_new_group, name,
                                 t_varying, ADIOS_MESH_UNIFORM);
                         if (mes) {
-                            parseMeshUniform0 (n, new_group, &mes->uniform, name);
+                            parseMeshUniform (n, new_group, name);
                         }
-                    }
-                }
-            } else if (!strcasecmp (type, "structured"))
-            {
-                if (mesh_file){
-                    adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
-                    if (mesh_group)
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                    parseMeshStructured1(n, new_group, name);
-                }else{
-                    if (mesh_group){
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                        parseMeshUniform1 (n, ptr_new_group, name);
-                    }else{
+                    } else if (!strcasecmp (type, "structured"))
+                    {
                         struct adios_mesh_struct * mes;
                         mes = adios_common_define_mesh(ptr_new_group, name,
                                 t_varying, ADIOS_MESH_STRUCTURED);
                         if (mes) {
-                            parseMeshStructured0 (n, new_group, &mes->structured, name);
+                            parseMeshStructured1 (n, new_group, name);
                         }
-                    }
-                }
-            } else if (!strcasecmp (type, "rectilinear"))
-            {
-                if (mesh_file){
-                    adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
-                    if (mesh_group)
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                    parseMeshRectilinear1 (n, new_group, name);
-                }else{
-                    if (mesh_group){
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                        parseMeshUniform1 (n, ptr_new_group, name);
-                    }else{
+                    } else if (!strcasecmp (type, "rectilinear"))
+                    {
                         struct adios_mesh_struct * mes;
                         mes = adios_common_define_mesh(ptr_new_group, name,
                                 t_varying, ADIOS_MESH_RECTILINEAR);
                         if (mes) {
-                            parseMeshRectilinear0 (n, new_group, &mes->rectilinear, name);
+                            parseMeshRectilinear1 (n, new_group, name);
                         }
-                    }
-                }
-            } else if (!strcasecmp (type, "unstructured"))
-            {
-                if (mesh_file){
-                    adios_common_define_attribute (ptr_new_group,meshfile,"/",adios_string,mesh_file,"");
-                    if (mesh_group)
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                    parseMeshUnstructured1 (n, new_group, name);
-                }else{
-                    if (mesh_group){
-                        printf("there is a mesh group\n");
-                        adios_common_define_attribute (ptr_new_group,meshgroup,"/",adios_string,mesh_group,"");
-                        parseMeshUniform1 (n, ptr_new_group, name);
-                    }else{
+                    } else if (!strcasecmp (type, "unstructured"))
+                    {
                         struct adios_mesh_struct * mes;
                         mes = adios_common_define_mesh(ptr_new_group, name,
                                 t_varying, ADIOS_MESH_UNSTRUCTURED);
                         if (mes) {
-                            parseMeshUnstructured0 (n, new_group, &mes->unstructured, name);
+                            parseMeshUnstructured1 (n, new_group, name);
                         }
+                    } else
+                    {
+                        log_warn ("config.xml: invalid mesh type: '%s'\n"
+                                ,type
+                                );
+                        return 0;
                     }
-                }
-            } else
-            {
-                log_warn ("config.xml: invalid mesh type: '%s'\n"
-                        ,type
-                        );
-                return 0;
-            }
-            free (meshtype);
-            free (meshtime);
-            free (meshfile);
-            free (meshgroup);
-        } else if (!strcasecmp (n->value.element.name, "gwrite"))
-        {
-            const char * src = 0;
+                    free (meshtype);
+                    free (meshtime);
+                    free (meshfile);
+                    free (meshgroup);
+                } else if (!strcasecmp (n->value.element.name, "gwrite"))
+                {
+                    const char * src = 0;
 
-            for (i = 0; i < n->value.element.num_attrs; i++)
-            {
-                mxml_attr_t * attr = &n->value.element.attrs [i];
+                    for (i = 0; i < n->value.element.num_attrs; i++)
+                    {
+                        mxml_attr_t * attr = &n->value.element.attrs [i];
 
-                GET_ATTR("src",attr,src,"var")
-                    log_warn ("config.xml: unknown attribute '%s' on %s "
-                            "(ignored)\n"
-                            ,attr->name
-                            ,"gwrite"
-                            );
-            }
-            if (!src)
-            {
-                log_warn ("config.xml: gwrite element requires "
-                        "src\n");
+                        GET_ATTR("src",attr,src,"var")
+                            log_warn ("config.xml: unknown attribute '%s' on %s "
+                                    "(ignored)\n"
+                                    ,attr->name
+                                    ,"gwrite"
+                                    );
+                    }
+                    if (!src)
+                    {
+                        log_warn ("config.xml: gwrite element requires "
+                                "src\n");
 
-                return 0;
-            }
-        } else
-        {
-            if (!strncmp (n->value.element.name, "!--", 3)) // a comment
-            {
-                continue;
-            }
-            else
-            {
-                log_warn ("config.xml: invalid xml element: '%s'\n"
-                        ,n->value.element.name
-                        );
+                        return 0;
+                    }
+                } else
+                {
+                    if (!strncmp (n->value.element.name, "!--", 3)) // a comment
+                    {
+                        continue;
+                    }
+                    else
+                    {
+                        log_warn ("config.xml: invalid xml element: '%s'\n"
+                                ,n->value.element.name
+                                );
 
-                return 0;
-            }
-        }
+                        return 0;
+                    }
+                }
     }
 
     return 1;
 }
 
-// concat numbered mesh attribute name strings
-void conca_mesh_numb_att_nam(char ** returnstr, const char * meshname, char * att_nam, char counterstr[5]) {
-    *returnstr = malloc (strlen("adios_schema/") + strlen(meshname) + strlen(att_nam) + strlen(counterstr) + 3);
-    strcpy(*returnstr,"adios_schema");
-    strcat(*returnstr,"/");
-    strcat(*returnstr,meshname);
-    strcat(*returnstr,"/");
-    strcat(*returnstr,att_nam);
-    strcat(*returnstr,counterstr);
-}
-
-// concat mesh attribute name strings
-void conca_mesh_att_nam(char ** returnstr, const char * meshname, char * att_nam) {
-    int slength = 0;
-    slength = strlen("adios_schema/");
-    slength = slength + strlen(meshname);
-    slength = slength + 1;
-    slength = slength + 1;
-    slength = slength + strlen(att_nam);
-
-    *returnstr = malloc (slength);
-
-    strcpy(*returnstr,"adios_schema/");
-    strcat(*returnstr,meshname);
-    strcat(*returnstr,"/");
-    strcat(*returnstr,att_nam);
-}
-
-// concat var attribute name strings
-void conca_var_att_nam(char ** returnstr, const char * varname, char * att_nam) {
-    int slength = 0;
-    slength = strlen("adios_schema/");
-    slength = slength + strlen(varname);
-    slength = slength + 1;
-    slength = slength + 1;
-    slength = slength + strlen(att_nam);
-
-    *returnstr = malloc (slength);
-
-    strcpy(*returnstr,varname);
-    strcat(*returnstr,"/adios_schema/");
-    strcat(*returnstr,att_nam);
-}
-
-// Append a mesh to a group
-enum ADIOS_FLAG adios_append_mesh (struct adios_mesh_struct ** root
-                                 ,struct adios_mesh_struct * mesh
-                                 ,uint16_t id
-                                 )
-{
-    while (root)
-    {
-        if (*root && !strcasecmp ((*root)->name, mesh->name))
-        {
-            return adios_flag_no;
-        }
-        if (!*root)
-        {
-            *root = mesh;
-            root = 0;
-        }
-        else
-        {
-            root = &(*root)->next;
-        }
-    }
-
-    return adios_flag_yes;
-}
-
-// Define a new mesh
-struct adios_mesh_struct * adios_common_define_mesh (
-        int64_t group_id, const char * name,
-        enum ADIOS_FLAG time_varying,
-        enum ADIOS_MESH_TYPE type)
-{
-    struct adios_group_struct * t = (struct adios_group_struct *) group_id;
-    struct adios_mesh_struct * m = (struct adios_mesh_struct *)
-                               malloc (sizeof (struct adios_mesh_struct));
-    enum ADIOS_FLAG flag;
-
-    m->name = strdup (name);
-    m->type = type;
-    m->time_varying = time_varying;
-    m->next = 0;
-
-    if (type == 1){
-        m->uniform = (struct adios_mesh_uniform_struct *) calloc (1, sizeof (struct adios_mesh_uniform_struct));
-    }else if (type == 3){
-        m->rectilinear = (struct adios_mesh_rectilinear_struct *) calloc (1, sizeof (struct adios_mesh_rectilinear_struct));
-    }else if (type == 2){
-        m->structured = (struct adios_mesh_structured_struct *) calloc (1, sizeof (struct adios_mesh_structured_struct));
-    }else if (type == 4){
-        m->unstructured = (struct adios_mesh_unstructured_struct *) calloc (1, sizeof (struct adios_mesh_unstructured_struct));
-    }else{
-        m->uniform = (struct adios_mesh_uniform_struct *) calloc (1, sizeof (struct adios_mesh_uniform_struct));
-    }
-    flag = adios_append_mesh (&t->meshs, m, t->mesh_count);
-    if (flag == adios_flag_no)
-    {
-        log_warn ("config.xml: unique mesh names required; "
-                         "second mesh: %s will be ignored.\n"
-                         ,name
-                );
-        free(m);
-        m = 0;
-    } else {
-        t->mesh_count++;
-    }
-
-    return m;
-}
-
-// Find a mesh
-struct adios_mesh_struct * adios_find_mesh_by_name (struct adios_mesh_struct * root
-                                                 ,const char * name
-                                                 )
-{
-    int done = 0;
-    struct adios_mesh_struct * mesh = 0;
-
-    if (!name)
-        done = 1;
-
-    while (!done && root)
-    {
-        if (!strcasecmp (name, root->name))
-        {
-            done = 1;
-            mesh = root;
-        }
-        else
-        {
-            root = root->next;
-        }
-    }
-
-    return mesh;
-}
-
 static int parseAnalysis (mxml_node_t * node)
 {
     mxml_node_t * n;
@@ -6469,16 +1741,16 @@ static int parseAnalysis (mxml_node_t * node)
         mxml_attr_t * attr = &node->value.element.attrs [i];
 
         GET_ATTR("adios-group",attr,group,"analysis")
-        GET_ATTR("var",attr,var,"analysis")
-        GET_ATTR("break-points",attr,bin_intervals,"analysis")
-        GET_ATTR("min",attr,bin_min,"analysis")
-        GET_ATTR("max",attr,bin_max,"analysis")
-        GET_ATTR("count",attr,bin_count,"analysis")
-        log_warn ("config.xml: unknown attribute '%s' on %s "
-                         "(ignored)\n"
-                ,attr->name
-                ,"method"
-                );
+            GET_ATTR("var",attr,var,"analysis")
+            GET_ATTR("break-points",attr,bin_intervals,"analysis")
+            GET_ATTR("min",attr,bin_min,"analysis")
+            GET_ATTR("max",attr,bin_max,"analysis")
+            GET_ATTR("count",attr,bin_count,"analysis")
+            log_warn ("config.xml: unknown attribute '%s' on %s "
+                    "(ignored)\n"
+                    ,attr->name
+                    ,"method"
+                    );
     }
 
     if (!var)
@@ -6526,15 +1798,15 @@ static int parseMethod (mxml_node_t * node)
         mxml_attr_t * attr = &node->value.element.attrs [i];
 
         GET_ATTR("priority",attr,priority,"method")
-        GET_ATTR("iterations",attr,iterations,"method")
-        GET_ATTR("base-path",attr,base_path,"method")
-        GET_ATTR("method",attr,method,"method")
-        GET_ATTR("group",attr,group,"method")
-        log_warn ("config.xml: unknown attribute '%s' on %s "
-                         "(ignored)\n"
-                ,attr->name
-                ,"method"
-                );
+            GET_ATTR("iterations",attr,iterations,"method")
+            GET_ATTR("base-path",attr,base_path,"method")
+            GET_ATTR("method",attr,method,"method")
+            GET_ATTR("group",attr,group,"method")
+            log_warn ("config.xml: unknown attribute '%s' on %s "
+                    "(ignored)\n"
+                    ,attr->name
+                    ,"method"
+                    );
     }
 
     // Check for parameters, if they exist
@@ -6566,7 +1838,7 @@ static int parseMethod (mxml_node_t * node)
         if (len > 0 && base_path [len - 1] != '/')
         {
             adios_error (err_invalid_method, "config.xml: method %s for group %s base-path "
-                             "must end with a '/' character\n"
+                    "must end with a '/' character\n"
                     ,method, group
                     );
 
@@ -6579,8 +1851,8 @@ static int parseMethod (mxml_node_t * node)
         method = "";
 
     if (!adios_common_select_method (p1, method, parameters, group
-                                    ,base_path, i1
-                                    )
+                ,base_path, i1
+                )
        )
     {
         return 0;
@@ -6604,13 +1876,13 @@ static int parseBuffer (mxml_node_t * node)
         mxml_attr_t * attr = &node->value.element.attrs [i];
 
         GET_ATTR("size-MB",attr,size_MB,"method")
-        GET_ATTR("free-memory-percentage",attr,free_memory_percentage,"method")
-        GET_ATTR("allocate-time",attr,allocate_time,"method")
-        log_warn ("config.xml: unknown attribute '%s' on %s "
-                         "(ignored)\n"
-                ,attr->name
-                ,"buffer"
-                );
+            GET_ATTR("free-memory-percentage",attr,free_memory_percentage,"method")
+            GET_ATTR("allocate-time",attr,allocate_time,"method")
+            log_warn ("config.xml: unknown attribute '%s' on %s "
+                    "(ignored)\n"
+                    ,attr->name
+                    ,"buffer"
+                    );
     }
 
 
@@ -6618,8 +1890,8 @@ static int parseBuffer (mxml_node_t * node)
     if ((!size_MB && !free_memory_percentage) || !allocate_time)
     {
         adios_error (err_invalid_buffer_size, "config.xml: must define allocate-time and either "
-                         "size-MB or free-memory-percentage for "
-                         "buffer element\n"
+                "size-MB or free-memory-percentage for "
+                "buffer element\n"
                 );
 
         return 0;
@@ -6639,7 +1911,7 @@ static int parseBuffer (mxml_node_t * node)
             else
             {
                 adios_error (err_invalid_buffer_size, "config.xml: buffer allocate-time %s "
-                                 "invalid. ('now' or 'oncall')\n"
+                        "invalid. ('now' or 'oncall')\n"
                         ,allocate_time
                         );
 
@@ -6654,7 +1926,7 @@ static int parseBuffer (mxml_node_t * node)
             if (size_MB == 0)
             {
                 adios_error (err_invalid_buffer_size, "config.xml: buffer size-MB is either 0 or "
-                                 "cannot be parsed: %s"
+                        "cannot be parsed: %s"
                         ,size_MB
                         );
 
@@ -6677,7 +1949,7 @@ static int parseBuffer (mxml_node_t * node)
             else
             {
                 adios_error (err_invalid_buffer_size, "config.xml: buffer free-memory-percentage %s "
-                                 "is not an integer between 1 and 100\n"
+                        "is not an integer between 1 and 100\n"
                         ,free_memory_percentage
                         );
 
@@ -6688,7 +1960,7 @@ static int parseBuffer (mxml_node_t * node)
         if (adios_buffer_alloc_when_get() == ADIOS_BUFFER_ALLOC_NOW)
         {
 
-// Do not attempt to allocate the buffer when this is being called from adios_lint
+            // Do not attempt to allocate the buffer when this is being called from adios_lint
 #ifndef _INTERNAL
             return adios_set_buffer_size ();
 #endif
@@ -6708,23 +1980,25 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     int saw_datagroup = 0;
     int saw_method = 0;
     int saw_buffer = 0;
-    const char * schema_version = 0;
+    char * schema_version = 0;
 
     if (!adios_transports_initialized)
     {
         adios_transports_initialized = 1;
         adios_init_transports (&adios_transports);
     }
+    // NCSU ALACRITY-ADIOS - Initialize transform methods
+    adios_transform_init();
 
     char * buffer = NULL;
-//#if HAVE_MPI
+    //#if HAVE_MPI
     int buffer_size = 0;
     int rank;
     MPI_Comm_rank (comm, &rank);
     init_comm = comm;
     if (rank == 0)
     {
-//#endif
+        //#endif
         fp = fopen (config, "r");
         if (!fp)
         {
@@ -6758,7 +2032,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
             return 0;
         }
         fclose (fp);
-//#if HAVE_MPI
+        //#if HAVE_MPI
         buffer_size = s.st_size;
         MPI_Bcast (&buffer_size, 1, MPI_INT, 0, comm);
         MPI_Bcast (buffer, buffer_size, MPI_BYTE, 0, comm);
@@ -6778,7 +2052,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
         MPI_Bcast (buffer, buffer_size, MPI_BYTE, 0, comm);
         buffer [buffer_size] = 0;
     }
-//#endif
+    //#endif
 
     doc = mxmlLoadString (NULL, buffer, MXML_TEXT_CALLBACK);
     free (buffer);
@@ -6787,9 +2061,9 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     if (!doc)
     {
         adios_error (err_invalid_xml_doc, "config.xml: unknown error parsing XML "
-                         "(probably structural)\n"
-                         "Did you remember to start the file with\n"
-                         "<?xml version=\"1.0\"?>\n");
+                "(probably structural)\n"
+                "Did you remember to start the file with\n"
+                "<?xml version=\"1.0\"?>\n");
 
         return 0;
     }
@@ -6862,57 +2136,17 @@ int adios_parse_config (const char * config, MPI_Comm comm)
             mxml_attr_t * attr = &root->value.element.attrs [i];
 
             GET_ATTR("host-language",attr,host_language,"var")
-            GET_ATTR("schema-version",attr,schema_version,"var")
-            log_warn ("config.xml: unknown attribute '%s' on %s "
-                             "(ignored)\n"
-                    ,attr->name
-                    ,"adios-config"
-                    );
+                GET_ATTR("schema-version",attr,schema_version,"var")
+                log_warn ("config.xml: unknown attribute '%s' on %s "
+                        "(ignored)\n"
+                        ,attr->name
+                        ,"adios-config"
+                        );
         }
 
         if (!schema_version)
             schema_version = "";
 
-        /*if (!strcasecmp (schema_version,"")){
-            char * ver;// copy version
-            char * d;  // dot location
-            char * ptr_end;
-            ver = strdup (schema_version);
-            char * schema_version_major;
-            char * schema_version_minor;
-            char * * schema_version_major_att_nam;
-            char * * schema_version_minor_att_nam;
-            d = strtok (ver, ".");
-            int counter = 0; // counter
-            int slength = 0;
-            while (d)
-            {
-                if (!strtod (d,&ptr_end)){
-                   printf("Schema version invalid.\n");
-                   counter = 0;
-                   break;
-                }else{
-                    slength = strlen("/adios_schema/");
-                    if (counter == 0 ){
-                        slength = slength + strlen("version_major");
-                        * schema_version_major_att_nam = malloc (slength);
-                        strcpy(*schema_version_major_att_nam,"/adios_schema/version_major");
-                        schema_version_major = strdup(d);
-                    }else if (counter == 1){
-                        slength = slength + strlen("version_minor");
-                        * schema_version_major_att_nam = malloc (slength);
-                        strcpy(*schema_version_major_att_nam,"/adios_schema/version_minor");
-                        schema_version_minor = strdup(d);
-                    }
-                }
-                counter++;
-                d = strtok (NULL, ".");
-            }
-            if (counter == 0){
-                printf("Error: Could not detect valid schema version.\n");
-            }
-        }*/
-
         if (!host_language)
         {
             host_language = "Fortran";
@@ -6942,8 +2176,8 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     }
 
     for (node = mxmlWalkNext (root, doc, MXML_DESCEND_FIRST)
-        ;node
-        ;node = mxmlWalkNext (node, root, MXML_NO_DESCEND)
+            ;node
+            ;node = mxmlWalkNext (node, root, MXML_NO_DESCEND)
         )
     {
         if (node->type != MXML_ELEMENT)
@@ -6960,7 +2194,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
         else
         {
             if (   !strcasecmp (node->value.element.name, "transport")
-                || !strcasecmp (node->value.element.name, "method")
+                    || !strcasecmp (node->value.element.name, "method")
                )
             {
                 if (!parseMethod (node))
@@ -6975,28 +2209,28 @@ int adios_parse_config (const char * config, MPI_Comm comm)
                         break;
                     saw_buffer = 1;
                 }
-				else
-				{
+                else
+                {
                     if (!strcasecmp (node->value.element.name, "analysis"))
                     {
                         if (!parseAnalysis(node))
                             break;
                     }
-                	else
-                	{
-                	    if (!strncmp (node->value.element.name, "!--", 3))
-                	    {
-                	        continue;
-                	    }
-                	    else
-                	    {
-                	        log_warn ("config.xml: invalid element: %s\n"
-                	                ,node->value.element.name
-                	                );
-
-                	        break;
-                	    }
-					}
+                    else
+                    {
+                        if (!strncmp (node->value.element.name, "!--", 3))
+                        {
+                            continue;
+                        }
+                        else
+                        {
+                            log_warn ("config.xml: invalid element: %s\n"
+                                    ,node->value.element.name
+                                    );
+
+                            break;
+                        }
+                    }
                 }
             }
         }
@@ -7007,7 +2241,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     if (!saw_datagroup)
     {
         adios_error (err_no_group_defined, "config.xml: must define at least 1 adios-group in "
-                         "config.xml\n"
+                "config.xml\n"
                 );
 
         return 0;
@@ -7015,7 +2249,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     if (!saw_method)
     {
         adios_error (err_no_method_defined, "config.xml: must define at least 1 method for "
-                         "the adios-group in config.xml\n"
+                "the adios-group in config.xml\n"
                 );
 
         return 0;
@@ -7023,7 +2257,7 @@ int adios_parse_config (const char * config, MPI_Comm comm)
     if (!saw_buffer)
     {
         adios_error (err_no_buffer_defined, "config.xml: must define the buffer element in "
-                         "config.xml\n"
+                "config.xml\n"
                 );
 
         return 0;
@@ -7039,6 +2273,8 @@ int adios_local_config (MPI_Comm comm)
         adios_transports_initialized = 1;
         adios_init_transports (&adios_transports);
     }
+    // NCSU ALACRITY-ADIOS - Initialize transform methods
+    adios_transform_init();
 
     init_comm = comm;
     return 1;
@@ -7053,16 +2289,16 @@ static PairStruct * get_and_preprocess_params (const char * parameters)
     params = text_to_name_value_pairs (parameters);
 
     /*
-    p = params;
-    while (p) {
-        fprintf(stderr, "-------  Param    name = %s  value = %s\n", p->name, p->value);
-        p = p->next;
-    }
-    */
+       p = params;
+       while (p) {
+       fprintf(stderr, "-------  Param    name = %s  value = %s\n", p->name, p->value);
+       p = p->next;
+       }
+       */
     prev_p = NULL;
     p = params;
     while (p) {
-        /*fprintf(stderr, "Parameter    name = %s  value = %s\n", p->name, p->value);*/
+        //fprintf(stderr, "Parameter    name = %s  value = %s\n", p->name, p->value);
         removeit = 0;
         if (!strcasecmp (p->name, "verbose"))
         {
@@ -7084,7 +2320,7 @@ static PairStruct * get_and_preprocess_params (const char * parameters)
             adios_verbose_level = 0; //don't print errors
             removeit = 1;
         }
-        else if (!strcasecmp (p->name, "logfile")) 
+        else if (!strcasecmp (p->name, "logfile"))
         {
             /*fprintf (stderr,"****************** logfile = %s\n", p->value);*/
             if (p->value) {
@@ -7105,7 +2341,7 @@ static PairStruct * get_and_preprocess_params (const char * parameters)
             if (p == params) {
                 // remove head
                 //fprintf(stderr, "  Remove HEAD  p = %x p->next = %x\n", p, p->next);
-                p = p->next; 
+                p = p->next;
                 params->next = NULL;
                 free_name_value_pairs (params);
                 params = p;
@@ -7128,9 +2364,9 @@ static PairStruct * get_and_preprocess_params (const char * parameters)
 }
 
 int adios_common_select_method (int priority, const char * method
-                               ,const char * parameters, const char * group
-                               ,const char * base_path, int iters
-                               )
+        ,const char * parameters, const char * group
+        ,const char * base_path, int iters
+        )
 {
     int64_t group_id;
     struct adios_group_struct * g;
@@ -7138,8 +2374,8 @@ int adios_common_select_method (int priority, const char * method
     int requires_group_comm = 0;
 
     new_method = (struct adios_method_struct *)
-                           malloc (sizeof (struct adios_method_struct));
-    
+        malloc (sizeof (struct adios_method_struct));
+
     new_method->m = ADIOS_METHOD_UNKNOWN;
     new_method->base_path = strdup (base_path);
     new_method->method = strdup (method);
@@ -7153,14 +2389,14 @@ int adios_common_select_method (int priority, const char * method
     if (adios_parse_method (method, &new_method->m, &requires_group_comm))
     {
         if (   new_method->m != ADIOS_METHOD_UNKNOWN
-            && new_method->m != ADIOS_METHOD_NULL
-            && adios_transports [new_method->m].adios_init_fn
+                && new_method->m != ADIOS_METHOD_NULL
+                && adios_transports [new_method->m].adios_init_fn
            )
         {
             PairStruct * params = get_and_preprocess_params (parameters);
 
             adios_transports [new_method->m].adios_init_fn
-                                       (params, new_method);
+                (params, new_method);
 
             free_name_value_pairs (params);
         }
@@ -7204,16 +2440,16 @@ int adios_common_select_method (int priority, const char * method
 }
 
 int adios_common_select_method_by_group_id (int priority, const char * method
-                                           ,const char * parameters, int64_t group_id
-                                           ,const char * base_path, int iters
-                                           )
+        ,const char * parameters, int64_t group_id
+        ,const char * base_path, int iters
+        )
 {
     struct adios_group_struct * g;
     struct adios_method_struct * new_method;
     int requires_group_comm = 0;
 
     new_method = (struct adios_method_struct *)
-                           malloc (sizeof (struct adios_method_struct));
+        malloc (sizeof (struct adios_method_struct));
 
     new_method->m = ADIOS_METHOD_UNKNOWN;
     new_method->base_path = strdup (base_path);
@@ -7223,18 +2459,19 @@ int adios_common_select_method_by_group_id (int priority, const char * method
     new_method->priority = priority;
     new_method->method_data = 0;
     new_method->group = 0;
+    new_method->init_comm = init_comm;
 
     if (adios_parse_method (method, &new_method->m, &requires_group_comm))
     {
         if (   new_method->m != ADIOS_METHOD_UNKNOWN
-            && new_method->m != ADIOS_METHOD_NULL
-            && adios_transports [new_method->m].adios_init_fn
+                && new_method->m != ADIOS_METHOD_NULL
+                && adios_transports [new_method->m].adios_init_fn
            )
         {
             PairStruct * params = get_and_preprocess_params (parameters);
 
             adios_transports [new_method->m].adios_init_fn
-                                       (params, new_method);
+                (params, new_method);
 
             free_name_value_pairs (params);
         }
@@ -7270,8 +2507,8 @@ int adios_common_select_method_by_group_id (int priority, const char * method
         if (requires_group_comm && !g->group_comm)
         {
             adios_error (err_group_method_mismatch, "config.xml: method %s for group %s.  Group does "
-                             "not have the required coordination-communicator"
-                             ".\n"
+                    "not have the required coordination-communicator"
+                    ".\n"
                     ,method, g->name
                     );
 
@@ -7329,54 +2566,58 @@ void adios_cleanup ()
                 free (adios_groups->group->vars->name);
             if (adios_groups->group->vars->path)
                 free (adios_groups->group->vars->path);
-            // ADIOS Schema 
+            // ADIOS Schema
             // if (adios_groups->group->vars->mesh)
-                // free (adios_groups->group->vars->mesh);
+            // free (adios_groups->group->vars->mesh);
 
 
             while (adios_groups->group->vars->dimensions)
             {
                 struct adios_dimension_struct * dimensions
-                                = adios_groups->group->vars->dimensions->next;
+                    = adios_groups->group->vars->dimensions->next;
 
                 free (adios_groups->group->vars->dimensions);
                 adios_groups->group->vars->dimensions = dimensions;
             }
 
-			// NCSU - Clean up stat
+            // NCSU - Clean up stat
             if (adios_groups->group->vars->stats)
-			{
-				int j, idx;
-				int c, count = 1;
-
-				if (adios_groups->group->vars->type == adios_complex || adios_groups->group->vars->type == adios_double_complex)
-					count = 3;
-
-				for (c = 0; c < count; c ++)
-				{
-					j = idx = 0;
-					while (adios_groups->group->vars->bitmap >> j)
-					{
-						if (adios_groups->group->vars->bitmap >> j & 1)
-						{
+            {
+                int j, idx;
+                int c, count = 1;
+
+                if (adios_groups->group->vars->type == adios_complex || adios_groups->group->vars->type == adios_double_complex)
+                    count = 3;
+
+                for (c = 0; c < count; c ++)
+                {
+                    j = idx = 0;
+                    while (adios_groups->group->vars->bitmap >> j)
+                    {
+                        if (adios_groups->group->vars->bitmap >> j & 1)
+                        {
                             if (j == adios_statistic_hist)
                             {
-								struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) adios_groups->group->vars->stats[c][idx].data;
-								free (hist->breaks);
-								free (hist->frequencies);
-								free (hist);
-							}
-						    else
-								free (adios_groups->group->vars->stats[c][idx].data);
-							idx ++;
-						}
-						j ++;
-					}
-					free (adios_groups->group->vars->stats[c]);
-				}
+                                struct adios_index_characteristics_hist_struct * hist = (struct adios_index_characteristics_hist_struct *) adios_groups->group->vars->stats[c][idx].data;
+                                free (hist->breaks);
+                                free (hist->frequencies);
+                                free (hist);
+                            }
+                            else
+                                free (adios_groups->group->vars->stats[c][idx].data);
+                            idx ++;
+                        }
+                        j ++;
+                    }
+                    free (adios_groups->group->vars->stats[c]);
+                }
 
                 free (adios_groups->group->vars->stats);
-			}
+            }
+
+            // NCSU ALACRITY-ADIOS - Clean transform metadata
+            adios_transform_clear_transform_var(adios_groups->group->vars);
+
             if (adios_groups->group->vars->data)
                 free (adios_groups->group->vars->data);
 
@@ -7387,7 +2628,7 @@ void adios_cleanup ()
         while (adios_groups->group->attributes)
         {
             struct adios_attribute_struct * attributes
-                                        = adios_groups->group->attributes->next;
+                = adios_groups->group->attributes->next;
 
             if (adios_groups->group->attributes->name)
                 free (adios_groups->group->attributes->name);
@@ -7416,117 +2657,117 @@ void adios_cleanup ()
 
         // ADIOS Schema
         /*while (adios_groups->group->meshs)
-        {
-            struct adios_mesh_struct * meshs = adios_groups->group->meshs->next;
-                        
-            if (adios_groups->group->meshs->name)
-                free (adios_groups->group->meshs->name);
-
-            switch (adios_groups->group->meshs->type)
-            {
-                case ADIOS_MESH_UNIFORM:
-                {
-                    struct adios_mesh_item_list_struct * i;
-                    while (adios_groups->group->meshs->uniform->dimensions)
-                    {
-                        i = adios_groups->group->meshs->uniform->dimensions->next;
-                        free (adios_groups->group->meshs->uniform->dimensions);
-                        adios_groups->group->meshs->uniform->dimensions = i;
-                    }
-                    while (adios_groups->group->meshs->uniform->origin)
-                    {
-                        i = adios_groups->group->meshs->uniform->origin->next;
-                        free (adios_groups->group->meshs->uniform->origin);
-                        adios_groups->group->meshs->uniform->origin = i;
-                    }
-                    while (adios_groups->group->meshs->uniform->spacing)
-                    {
-                        i = adios_groups->group->meshs->uniform->spacing->next;
-                        free (adios_groups->group->meshs->uniform->spacing);
-                        adios_groups->group->meshs->uniform->spacing = i;
-                    }
-                    while (adios_groups->group->meshs->uniform->origin)
-                    {
-                        i = adios_groups->group->meshs->uniform->origin->next;
-                        free (adios_groups->group->meshs->uniform->origin);
-                        adios_groups->group->meshs->uniform->origin = i;
-                    }
-                    break;
-                }
-                case ADIOS_MESH_STRUCTURED:
-                {
-                    struct adios_mesh_item_list_struct * i;
-                    struct adios_mesh_var_list_struct * v;
-                    while (adios_groups->group->meshs->structured->dimensions)
-                    {
-                        i = adios_groups->group->meshs->structured->dimensions->next;
-                        free (adios_groups->group->meshs->structured->dimensions);
-                        adios_groups->group->meshs->structured->dimensions = i;
-                    }
-                    while (adios_groups->group->meshs->structured->points)
-                    {
-                        v = adios_groups->group->meshs->structured->points->next;
-                        free (adios_groups->group->meshs->structured->points);
-                        adios_groups->group->meshs->structured->points = v;
-                    }
-                    if (adios_groups->group->meshs->structured->nspace)
-                        free (adios_groups->group->meshs->structured->nspace);
+          {
+          struct adios_mesh_struct * meshs = adios_groups->group->meshs->next;
+
+          if (adios_groups->group->meshs->name)
+          free (adios_groups->group->meshs->name);
+
+          switch (adios_groups->group->meshs->type)
+          {
+          case ADIOS_MESH_UNIFORM:
+          {
+          struct adios_mesh_item_list_struct * i;
+          while (adios_groups->group->meshs->uniform->dimensions)
+          {
+          i = adios_groups->group->meshs->uniform->dimensions->next;
+          free (adios_groups->group->meshs->uniform->dimensions);
+          adios_groups->group->meshs->uniform->dimensions = i;
+          }
+          while (adios_groups->group->meshs->uniform->origin)
+          {
+          i = adios_groups->group->meshs->uniform->origin->next;
+          free (adios_groups->group->meshs->uniform->origin);
+          adios_groups->group->meshs->uniform->origin = i;
+          }
+          while (adios_groups->group->meshs->uniform->spacing)
+          {
+          i = adios_groups->group->meshs->uniform->spacing->next;
+          free (adios_groups->group->meshs->uniform->spacing);
+          adios_groups->group->meshs->uniform->spacing = i;
+          }
+          while (adios_groups->group->meshs->uniform->origin)
+          {
+          i = adios_groups->group->meshs->uniform->origin->next;
+          free (adios_groups->group->meshs->uniform->origin);
+          adios_groups->group->meshs->uniform->origin = i;
+          }
+          break;
+          }
+          case ADIOS_MESH_STRUCTURED:
+          {
+          struct adios_mesh_item_list_struct * i;
+          struct adios_mesh_var_list_struct * v;
+          while (adios_groups->group->meshs->structured->dimensions)
+          {
+          i = adios_groups->group->meshs->structured->dimensions->next;
+          free (adios_groups->group->meshs->structured->dimensions);
+          adios_groups->group->meshs->structured->dimensions = i;
+          }
+          while (adios_groups->group->meshs->structured->points)
+          {
+          v = adios_groups->group->meshs->structured->points->next;
+          free (adios_groups->group->meshs->structured->points);
+          adios_groups->group->meshs->structured->points = v;
+          }
+          if (adios_groups->group->meshs->structured->nspace)
+          free (adios_groups->group->meshs->structured->nspace);
 
-                    break;
-                }
-                case ADIOS_MESH_RECTILINEAR:
-                {
-                    struct adios_mesh_item_list_struct * i;
-                    struct adios_mesh_var_list_struct * v;
-                    while (adios_groups->group->meshs->rectilinear->dimensions)
-                    {
-                        i = adios_groups->group->meshs->rectilinear->dimensions->next;
-                        free (adios_groups->group->meshs->rectilinear->dimensions);
-                        adios_groups->group->meshs->rectilinear->dimensions = i;
-                    }
-                    while (adios_groups->group->meshs->rectilinear->coordinates)
-                    {
-                        v = adios_groups->group->meshs->rectilinear->coordinates->next;                        
-                        free (adios_groups->group->meshs->rectilinear->coordinates);
-                        adios_groups->group->meshs->rectilinear->coordinates = v;
-                    }
+          break;
+          }
+          case ADIOS_MESH_RECTILINEAR:
+          {
+          struct adios_mesh_item_list_struct * i;
+          struct adios_mesh_var_list_struct * v;
+          while (adios_groups->group->meshs->rectilinear->dimensions)
+          {
+          i = adios_groups->group->meshs->rectilinear->dimensions->next;
+          free (adios_groups->group->meshs->rectilinear->dimensions);
+          adios_groups->group->meshs->rectilinear->dimensions = i;
+          }
+          while (adios_groups->group->meshs->rectilinear->coordinates)
+          {
+        v = adios_groups->group->meshs->rectilinear->coordinates->next;
+        free (adios_groups->group->meshs->rectilinear->coordinates);
+        adios_groups->group->meshs->rectilinear->coordinates = v;
+    }
 
-                    break;
-                }
-                case ADIOS_MESH_UNSTRUCTURED:
-                {
-                    struct adios_mesh_var_list_struct * v;
-                    if (adios_groups->group->meshs->unstructured->cell_set_count)
-                        free (adios_groups->group->meshs->unstructured->cell_set_count);
-                    if (adios_groups->group->meshs->unstructured->points_count)
-                        free (adios_groups->group->meshs->unstructured->points_count);
-                    if (adios_groups->group->meshs->unstructured->nspace)
-                        free (adios_groups->group->meshs->unstructured->nspace);
-                    while (adios_groups->group->meshs->unstructured->points)
-                    {
-                        v = adios_groups->group->meshs->unstructured->points->next;
-                        free (adios_groups->group->meshs->unstructured->points);
-                        adios_groups->group->meshs->unstructured->points = v;
-                    }
-                    while (adios_groups->group->meshs->unstructured->cell_list)
-                    {
-                        struct adios_mesh_cell_list_list_struct * next
-                          = adios_groups->group->meshs->unstructured->cell_list->next;
-                        free (adios_groups->group->meshs->unstructured->cell_list);
-                        adios_groups->group->meshs->unstructured->cell_list = next;
-                    }
+    break;
+    }
+        case ADIOS_MESH_UNSTRUCTURED:
+    {
+        struct adios_mesh_var_list_struct * v;
+        if (adios_groups->group->meshs->unstructured->cell_set_count)
+            free (adios_groups->group->meshs->unstructured->cell_set_count);
+        if (adios_groups->group->meshs->unstructured->points_count)
+            free (adios_groups->group->meshs->unstructured->points_count);
+        if (adios_groups->group->meshs->unstructured->nspace)
+            free (adios_groups->group->meshs->unstructured->nspace);
+        while (adios_groups->group->meshs->unstructured->points)
+        {
+            v = adios_groups->group->meshs->unstructured->points->next;
+            free (adios_groups->group->meshs->unstructured->points);
+            adios_groups->group->meshs->unstructured->points = v;
+        }
+        while (adios_groups->group->meshs->unstructured->cell_list)
+        {
+            struct adios_mesh_cell_list_list_struct * next
+                = adios_groups->group->meshs->unstructured->cell_list->next;
+            free (adios_groups->group->meshs->unstructured->cell_list);
+            adios_groups->group->meshs->unstructured->cell_list = next;
+        }
 
-                    break;
-                }
-            }
+        break;
+    }
+    }
 
-            free (adios_groups->group->meshs);
-            adios_groups->group->meshs = meshs;
-        }*/
+    free (adios_groups->group->meshs);
+    adios_groups->group->meshs = meshs;
+    }*/
 
-        free (adios_groups->group);
-        free (adios_groups);
-        adios_groups = groups;
+    free (adios_groups->group);
+    free (adios_groups);
+    adios_groups = groups;
     }
 }
 
diff --git a/src/core/adios_read.c b/src/core/adios_read.c
index dee441d..c304b66 100644
--- a/src/core/adios_read.c
+++ b/src/core/adios_read.c
@@ -27,7 +27,7 @@ int adios_read_init_method (enum ADIOS_READ_METHOD method, MPI_Comm comm, const
 int adios_read_finalize_method(enum ADIOS_READ_METHOD method)
 {
     int retval = common_read_finalize_method(method);
-    log_debug ("adios_read_finalize_method completed");
+    log_debug ("adios_read_finalize_method completed\n");
     return retval;
 }
 
@@ -88,6 +88,21 @@ int adios_inq_var_blockinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
     return common_read_inq_var_blockinfo (fp, varinfo);
 }
 
+ADIOS_MESH * adios_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
+{
+    return common_read_inq_mesh_byid (fp, meshid);
+}
+
+void adios_free_meshinfo (ADIOS_MESH *meshinfo)
+{
+    common_read_free_meshinfo (meshinfo);
+}
+
+int adios_inq_var_meshinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
+{
+    return common_read_inq_var_meshinfo (fp, varinfo);
+}
+
 int adios_schedule_read (const ADIOS_FILE      * fp,
                              const ADIOS_SELECTION * sel,
                              const char            * varname,
@@ -95,7 +110,7 @@ int adios_schedule_read (const ADIOS_FILE      * fp,
                              int                     nsteps,
                              void                  * data)
 {
-    return common_read_schedule_read (fp, sel, varname, from_steps, nsteps, data);
+    return common_read_schedule_read (fp, sel, varname, from_steps, nsteps, NULL, data);
 }
 
 int adios_schedule_read_byid (const ADIOS_FILE      * fp,
@@ -105,7 +120,27 @@ int adios_schedule_read_byid (const ADIOS_FILE      * fp,
                                   int                     nsteps,
                                   void                  * data)
 {
-    return common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, data);
+    return common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, NULL, data);
+}
+
+int adios_schedule_read_param (const ADIOS_FILE * fp,
+                               const ADIOS_SELECTION * sel,
+                               const char            * varname,
+                               int                     from_steps,
+                               int                     nsteps,
+                               const char            * param,
+                               void                  * data) {
+    return common_read_schedule_read (fp, sel, varname, from_steps, nsteps, param, data);
+}
+
+int adios_schedule_read_byid_param (const ADIOS_FILE * fp,
+                                    const ADIOS_SELECTION * sel,
+                                    int                     varid,
+                                    int                     from_steps,
+                                    int                     nsteps,
+                                    const char            * param,
+                                    void                  * data) {
+    return common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, param, data);
 }
 
 int adios_perform_reads (const ADIOS_FILE *fp, int blocking)
diff --git a/src/core/adios_read_hooks.c b/src/core/adios_read_hooks.c
index 1089177..0700c3f 100644
--- a/src/core/adios_read_hooks.c
+++ b/src/core/adios_read_hooks.c
@@ -32,6 +32,8 @@ if (!strcasecmp (buf,b)) \
 (*t) [b].adios_reset_dimension_order_fn = adios_read_##a##_reset_dimension_order; \
 (*t) [b].adios_get_groupinfo_fn = adios_read_##a##_get_groupinfo; \
 (*t) [b].adios_is_var_timed_fn = adios_read_##a##_is_var_timed; \
+(*t) [b].adios_inq_var_transinfo_fn = adios_read_##a##_inq_var_transinfo; \
+(*t) [b].adios_inq_var_trans_blockinfo_fn = adios_read_##a##_inq_var_trans_blockinfo;
 
 void adios_read_hooks_init (struct adios_read_hooks_struct ** t)
 {
diff --git a/src/core/adios_read_hooks.h b/src/core/adios_read_hooks.h
index db2908c..d8a7f23 100644
--- a/src/core/adios_read_hooks.h
+++ b/src/core/adios_read_hooks.h
@@ -12,6 +12,7 @@
 #include <stdint.h>
 #include <string.h>
 #include "public/adios_read.h"
+#include "core/transforms/adios_transforms_transinfo.h" // NCSU ALACRITY-ADIOS
 #include "core/util.h" // PairStruct*
 
 #define FORWARD_DECLARE(a) \
@@ -32,6 +33,9 @@ int adios_read_##a##_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIO
 void adios_read_##a##_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran); \
 void adios_read_##a##_get_groupinfo (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group); \
 int adios_read_##a##_is_var_timed (const ADIOS_FILE *fp, int varid); \
+/* NCSU ALACRITY-ADIOS */ \
+ADIOS_TRANSINFO * adios_read_##a##_inq_var_transinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi); \
+int adios_read_##a##_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti);
 
 //////////////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////////////
@@ -87,6 +91,8 @@ typedef int  (* ADIOS_GET_ATTR_BYID_FN) (const ADIOS_FILE * fp, int attrid,
 typedef void (* ADIOS_RESET_DIMENSION_ORDER_FN) (const ADIOS_FILE *fp, int is_fortran);
 typedef void (* ADIOS_GET_GROUPINFO_FN) (const ADIOS_FILE *fp, int *ngroups, char ***group_namelist, int **nvars_per_group, int **nattrs_per_group); 
 typedef int  (* ADIOS_IS_VAR_TIMED_FN) (const ADIOS_FILE *fp, int varid); 
+typedef ADIOS_TRANSINFO * (*ADIOS_READ_INQ_VAR_TRANSINFO)(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi); /* NCSU ALACRITY-ADIOS */
+typedef int (*ADIOS_READ_INQ_VAR_TRANS_BLOCKINFO)(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti); /* NCSU ALACRITY-ADIOS */
 
 struct adios_read_hooks_struct
 {
@@ -107,6 +113,8 @@ struct adios_read_hooks_struct
     ADIOS_RESET_DIMENSION_ORDER_FN  adios_reset_dimension_order_fn;
     ADIOS_GET_GROUPINFO_FN          adios_get_groupinfo_fn;
     ADIOS_IS_VAR_TIMED_FN           adios_is_var_timed_fn;
+    ADIOS_READ_INQ_VAR_TRANSINFO    adios_inq_var_transinfo_fn;
+    ADIOS_READ_INQ_VAR_TRANS_BLOCKINFO    adios_inq_var_trans_blockinfo_fn;
 };
 
 #undef FORWARD_DECLARE
diff --git a/src/core/adios_read_v1.c b/src/core/adios_read_v1.c
index 14eee64..d9b94cd 100644
--- a/src/core/adios_read_v1.c
+++ b/src/core/adios_read_v1.c
@@ -348,7 +348,7 @@ int64_t adios_read_var_byid_v1 (ADIOS_GROUP_V1 * gp,
 
     ADIOS_SELECTION * sel = adios_selection_boundingbox (ndim, start+tidx, count+tidx);
 
-    common_read_schedule_read_byid (f, sel, varid, from_step, nsteps, data);
+    common_read_schedule_read_byid (f, sel, varid, from_step, nsteps, NULL, data); // NCSU ALACRITY-ADIOS
     int ret = common_read_perform_reads (f, 1);
     int64_t rbytes;
     if (ret == err_no_error) {
@@ -425,7 +425,7 @@ int64_t adios_read_local_var_v1 (ADIOS_GROUP_V1 * gp,
 
     ADIOS_SELECTION * sel = adios_selection_writeblock (idx_in_step);
 
-    common_read_schedule_read_byid (f, sel, vi->varid, step, 1, data);
+    common_read_schedule_read_byid (f, sel, vi->varid, step, 1, NULL, data); // NCSU ALACRITY-ADIOS
     int ret = common_read_perform_reads (f, 1);
     int64_t rbytes;
     if (ret == err_no_error) {
@@ -480,7 +480,7 @@ double adios_stat_cor_v1 (ADIOS_VARINFO_V1 * vix, ADIOS_VARINFO_V1 * viy, char *
 
     if (vix == NULL)
     {
-	adios_error(err_invalid_argument, "Variable not defined\n");
+        adios_error(err_invalid_argument, "Variable not defined\n");
         return 0;
     }
 
diff --git a/src/core/adios_selection_util.c b/src/core/adios_selection_util.c
new file mode 100644
index 0000000..f6e7439
--- /dev/null
+++ b/src/core/adios_selection_util.c
@@ -0,0 +1,275 @@
+/*
+ * adios_selection_util.c
+ *
+ *  Created on: Jan 5, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+
+#include "public/adios_error.h"
+#include "public/adios_selection.h"
+#include "adios_subvolume.h"
+#include "adios_selection_util.h"
+
+//
+// NOTE: Intersection type guarantees:
+// * The intersection of any two selections of the same type returns a third selection of that
+//   same type
+// * BB  + PTS  -> PTS
+//
+
+//
+// One-on-one intersection functions
+//
+ADIOS_SELECTION * adios_selection_intersect_bb_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                                                  const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2) {
+    const int ndim = bb1->ndim;
+    uint64_t *new_start = malloc(ndim * sizeof(uint64_t));
+    uint64_t *new_count = malloc(ndim * sizeof(uint64_t));
+
+    assert(bb1->ndim == bb2->ndim);
+    if (!new_start || !new_count) {
+        adios_error(err_no_memory, "Cannot allocate memory for BOUNDINGBOX-BOUNDINGBOX selection intersection");
+        return NULL;
+    }
+
+    if (intersect_bb(bb1, bb2, new_start, NULL, NULL, new_count)) {
+        return common_read_selection_boundingbox(ndim, new_start, new_count);
+    } else {
+        free(new_start);
+        free(new_count);
+        return NULL;
+    }
+}
+
+ADIOS_SELECTION * adios_selection_intersect_bb_pts(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                                                   const ADIOS_SELECTION_POINTS_STRUCT *pts2) {
+    const int ndim = bb1->ndim;
+    const uint64_t max_new_npts = pts2->npoints;
+
+    uint64_t *new_pts = malloc(max_new_npts * ndim * sizeof(uint64_t));
+    uint64_t i;
+    int j;
+    uint64_t *new_pts_ptr = new_pts;
+    uint64_t *pts2_ptr;
+    const uint64_t * const pts2_end_ptr = pts2->points + pts2->npoints * ndim;
+    uint64_t new_npts = 0;
+
+    assert(bb1->ndim == pts2->ndim);
+    if (!new_pts) {
+        adios_error(err_no_memory, "Cannot allocate memory for BOUNDINGBOX-POINTS selection intersection");
+        return NULL;
+    }
+
+    // Check every pair of points for equality; whenever a shared point is found, output
+    // it into the new point list
+    for (pts2_ptr = pts2->points; pts2_ptr < pts2_end_ptr; pts2_ptr += ndim) {
+        // Check each dimension component of the point for containment in the bounding box
+        for (j = 0; j < ndim; j++)
+            if (pts2_ptr[j] < bb1->start[j] ||
+                pts2_ptr[j] >= bb1->start[j] + bb1->count[j])
+                break;
+
+        // Check whether any component was out of bounds; if so, skip this point; otherwise,
+        // output the point
+        if (j != ndim) {
+            continue;
+        } else {
+            memcpy(new_pts_ptr, pts2_ptr, ndim * sizeof(uint64_t));
+            new_pts_ptr += ndim;
+            new_npts++;
+        }
+    }
+
+    if (new_npts == 0) {
+        free(new_pts);
+        return NULL;
+    } else {
+        new_pts = (uint64_t*)realloc(new_pts, new_npts * ndim * sizeof(uint64_t));
+        return common_read_selection_points(ndim, new_npts, new_pts);
+    }
+}
+
+ADIOS_SELECTION * adios_selection_intersect_pts_pts(const ADIOS_SELECTION_POINTS_STRUCT *pts1,
+                                                    const ADIOS_SELECTION_POINTS_STRUCT *pts2) {
+    const int ndim = pts1->ndim;
+    const uint64_t max_new_npts = pts1->npoints > pts2->npoints ? pts1->npoints : pts2->npoints;
+
+    uint64_t *new_pts = malloc(max_new_npts * ndim * sizeof(uint64_t));
+    uint64_t i, j;
+    int k;
+    uint64_t *new_pts_ptr = new_pts;
+    uint64_t *pts1_ptr, *pts2_ptr;
+    const uint64_t * const pts1_end_ptr = pts1->points + pts1->npoints * ndim;
+    const uint64_t * const pts2_end_ptr = pts2->points + pts2->npoints * ndim;
+    uint64_t new_npts = 0;
+
+    assert(pts1->ndim == pts2->ndim);
+    if (!new_pts) {
+        adios_error(err_no_memory, "Cannot allocate memory for POINTS-POINTS selection intersection");
+        return NULL;
+    }
+
+    // Check every pair of points for equality; whenever a shared point is found, output
+    // it into the new point list
+    for (pts1_ptr = pts1->points; pts1_ptr < pts1_end_ptr; pts1_ptr += ndim) {
+        for (pts2_ptr = pts2->points; pts2_ptr < pts2_end_ptr; pts2_ptr += ndim) {
+            // Check each dimension component of the pair of points for equality
+            for (k = 0; k < ndim; k++)
+                if (pts1_ptr[k] != pts2_ptr[k])
+                    break;
+
+            // Check whether any component was unequal; if so, skip this pair; otherwise,
+            // output the shared point
+            if (k != ndim) {
+                continue;
+            } else {
+                memcpy(new_pts_ptr, pts1_ptr, ndim * sizeof(uint64_t));
+                new_pts_ptr += ndim;
+                new_npts++;
+            }
+        }
+    }
+
+    if (new_npts == 0) {
+        free(new_pts);
+        return NULL;
+    } else {
+        new_pts = (uint64_t*)realloc(new_pts, new_npts * sizeof(uint64_t));
+        return common_read_selection_points(ndim, new_npts, new_pts);
+    }
+}
+
+ADIOS_SELECTION * adios_selection_intersect_wb_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                  const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2) {
+    return wb1->index == wb2->index ?
+           common_read_selection_writeblock(wb1->index):
+           NULL;
+}
+
+//
+// One-on-any intersection functions
+//
+
+// s2 can be selection type
+inline static ADIOS_SELECTION * adios_selection_intersect_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                                                             const ADIOS_SELECTION *s2) {
+    switch (s2->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2 = &s2->u.bb;
+        return adios_selection_intersect_bb_bb(bb1, bb2);
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *pts2 = &s2->u.points;
+        return adios_selection_intersect_bb_pts(bb1, pts2);
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Intersection of selection type BOUNDINGBOX and WRITEBLOCK not currently supported");
+        return NULL;
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Intersection of selection type BOUNDINGBOX and AUTO not currently supported");
+        return NULL;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s2->type);
+        return NULL;
+    }
+}
+
+// s2 can be any selection type except boundingbox
+inline static ADIOS_SELECTION * adios_selection_intersect_pts(const ADIOS_SELECTION_POINTS_STRUCT *pts1,
+                                                              const ADIOS_SELECTION *s2) {
+    switch (s2->type) {
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *pts2 = &s2->u.points;
+        return adios_selection_intersect_pts_pts(pts1, pts2);
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Intersection of selection type POINTS and WRITEBLOCK not currently supported");
+        return NULL;
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Intersection of selection type POINTS and AUTO not currently supported");
+        return NULL;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s2->type);
+        return NULL;
+    }
+}
+
+// s2 can be any selection except boundingbox and points
+inline static ADIOS_SELECTION * adios_selection_intersect_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                             const ADIOS_SELECTION *s2) {
+    switch (s2->type) {
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2 = &s2->u.block;
+        return adios_selection_intersect_wb_wb(wb1, wb2);
+    }
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Intersection of selection type WRITEBLOCK and AUTO not currently supported");
+        return NULL;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s2->type);
+        return NULL;
+    }
+}
+
+// s2 can only be auto
+inline static ADIOS_SELECTION * adios_selection_intersect_auto(const ADIOS_SELECTION_AUTO_STRUCT *as1,
+                                                               const ADIOS_SELECTION *s2) {
+    return copy_selection(s2);
+}
+
+//
+// Any-on-any intersection function
+//
+
+// The if statements impose a total order on the selection types, and call this function
+// with arguments swapped if they are out of this order.
+ADIOS_SELECTION * adios_selection_intersect(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2) {
+    switch (s1->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *bb1 = &s1->u.bb;
+        return adios_selection_intersect_bb(bb1, s2);
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *pts1 = &s1->u.points;
+        if (s1->type == ADIOS_SELECTION_BOUNDINGBOX) {
+            return adios_selection_intersect(s2, s1);
+        } else {
+            return adios_selection_intersect_pts(pts1, s2);
+        }
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1 = &s1->u.block;
+        if (s1->type == ADIOS_SELECTION_BOUNDINGBOX ||
+            s1->type == ADIOS_SELECTION_POINTS) {
+            return adios_selection_intersect(s2, s1);
+        } else {
+            return adios_selection_intersect_wb(wb1, s2);
+        }
+    }
+    case ADIOS_SELECTION_AUTO: {
+        const ADIOS_SELECTION_AUTO_STRUCT *as1 = &s1->u.autosel;
+        if (s1->type == ADIOS_SELECTION_BOUNDINGBOX ||
+            s1->type == ADIOS_SELECTION_POINTS ||
+            s1->type == ADIOS_SELECTION_WRITEBLOCK) {
+            return adios_selection_intersect(s2, s1);
+        } else {
+            return adios_selection_intersect_auto(as1, s2);
+        }
+    }
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", s1->type);
+        return NULL;
+    }
+}
+
diff --git a/src/core/adios_selection_util.h b/src/core/adios_selection_util.h
new file mode 100644
index 0000000..ea45b69
--- /dev/null
+++ b/src/core/adios_selection_util.h
@@ -0,0 +1,33 @@
+/*
+ * adios_selection_util.h
+ *
+ *  Created on: Jan 5, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_SELECTION_UTIL_H_
+#define ADIOS_SELECTION_UTIL_H_
+
+#include <public/adios_selection.h>
+
+ADIOS_SELECTION * adios_selection_intersect_bb_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                                                  const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2);
+ADIOS_SELECTION * adios_selection_intersect_bb_pts(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                                                   const ADIOS_SELECTION_POINTS_STRUCT *pts2);
+ADIOS_SELECTION * adios_selection_intersect_pts_pts(const ADIOS_SELECTION_POINTS_STRUCT *pts1,
+                                                    const ADIOS_SELECTION_POINTS_STRUCT *pts2);
+ADIOS_SELECTION * adios_selection_intersect_wb_wb(const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1,
+                                                  const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2);
+/*
+ * Takes the intersection between two given ADIOS selections of any type.
+ * Only certain combinations of intersections are supported, as listed below.
+ * An attempt to intersect any other pairing of selection types will result
+ * in an adios_error being raised.
+ * @param s1 the first selection
+ * @param s2 the second selection
+ * @return a newly-allocated selection struct representing the intersection of s1 and s2, or NULL
+ *         if s1 and s2 do not intersect.
+ */
+ADIOS_SELECTION * adios_selection_intersect(const ADIOS_SELECTION *s1, const ADIOS_SELECTION *s2);
+
+#endif /* ADIOS_SELECTION_UTIL_H_ */
diff --git a/src/core/adios_subvolume.c b/src/core/adios_subvolume.c
new file mode 100644
index 0000000..cdac46d
--- /dev/null
+++ b/src/core/adios_subvolume.c
@@ -0,0 +1,536 @@
+/*
+ * adios_subvolume.c
+ *
+ *  Created on: Jul 25, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+#include "core/util.h"
+#include "core/common_read.h"
+#include "core/adios_subvolume.h"
+
+void vector_add(int ndim, uint64_t *dst_vec, const uint64_t *vec1, const uint64_t *vec2) {
+    while (ndim--)
+        *dst_vec++ = *vec1++ + *vec2++;
+}
+
+void vector_sub(int ndim, uint64_t *dst, const uint64_t *vec1, const uint64_t *vec2) {
+    while (ndim--)
+        *dst++ = *vec1++ - *vec2++;
+}
+
+uint64_t compute_volume(int ndim, const uint64_t *dims) {
+    uint64_t volume = 1;
+    while (ndim) {
+        volume *= *dims++;
+        ndim--;
+    }
+    return volume;
+}
+
+inline static int intersect_segments(uint64_t start1, uint64_t len1, uint64_t start2, uint64_t len2,
+                                     uint64_t *inter_start, uint64_t *inter_len) {
+    int end1, end2;
+    int inter_end;
+
+    // Swap the segments if segment 1 starts after segment 2, to simplify calculations
+    if (start1 > start2) {
+        int tmps = start1;
+        int tmpl = len1;
+        start1 = start2;
+        len1 = len2;
+        start2 = tmps;
+        len2 = tmpl;
+    }
+
+    end1 = start1 + len1;
+    end2 = start2 + len2;
+
+    // If segment 1 ends before segment 2 starts, no intersection
+    if (end1 <= start2)
+        return 0;
+
+    if (inter_start) {
+        *inter_start = start2;                    // Intersection starts at the beginning of the later segment
+    }
+    if (inter_len) {
+        inter_end = end1 <= end2 ? end1 : end2;    // Intersection ends at the earlier of the two segment ends
+        *inter_len = inter_end - *inter_start;
+    }
+
+    return 1;
+}
+
+int intersect_volumes(int ndim,
+                      const uint64_t *dims1, const uint64_t *offset1,
+                      const uint64_t *dims2, const uint64_t *offset2,
+                      uint64_t *inter_dims, uint64_t *inter_offset,
+                      uint64_t *inter_offset_rel1, uint64_t *inter_offset_rel2) {
+    // For every dimension, find the intersection in that dimension
+    // If ever the volumes are disjoint in some dimension, stop immediately
+    // and report no intersection
+    int dim;
+    uint64_t tmp_inter_offset;
+    for (dim = 0; dim < ndim; dim++) {
+        const int intersects = intersect_segments(*offset1, *dims1,
+                                                  *offset2, *dims2,
+                                                  &tmp_inter_offset, inter_dims);
+        if (!intersects)
+            return 0;
+
+        // Calculate/store offsets as the user requests, and then advance to
+        // the next dimension on these as well
+        if (inter_offset)
+            *inter_offset++ = tmp_inter_offset;
+        if (inter_offset_rel1)
+            *inter_offset_rel1++ = tmp_inter_offset - *offset1;
+        if (inter_offset_rel2)
+            *inter_offset_rel2++ = tmp_inter_offset - *offset2;
+
+        // Advance the other arrays to the next dimension, as well
+        // NOTE: this must be done after offset calculations, as offset[12] are
+        // accessed
+        offset1++; dims1++;
+        offset2++; dims2++;
+        inter_dims++;
+    }
+
+    // If we have a non-null intersection in every dimension, the entire
+    // volumes intersect, so return true to indicate this
+    return 1;
+}
+
+int intersect_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                 const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2,
+                 uint64_t *inter_offset,
+                 uint64_t *inter_offset_rel1, uint64_t *inter_offset_rel2,
+                 uint64_t *inter_dims) {
+
+    assert(bb1); assert(bb2);
+    assert(bb1->ndim == bb2->ndim);
+    return intersect_volumes(
+            bb1->ndim, bb1->count, bb1->start, bb2->count, bb2->start,
+            inter_dims, inter_offset, inter_offset_rel1, inter_offset_rel2);
+}
+
+void copy_subvolume_with_spec(void *dst, const void *src,
+                              const adios_subvolume_copy_spec *copy_spec,
+                              enum ADIOS_DATATYPES datum_type,
+                              enum ADIOS_FLAG swap_endianness) {
+
+    copy_subvolume(dst, src, copy_spec->ndim, copy_spec->subv_dims,
+                   copy_spec->dst_dims, copy_spec->dst_subv_offsets,
+                   copy_spec->src_dims, copy_spec->src_subv_offsets,
+                   datum_type, swap_endianness);
+}
+
+void copy_subvolume_ragged_with_spec(void *dst, const void *src,
+                                     const adios_subvolume_copy_spec *copy_spec,
+                                     const uint64_t *dst_ragged_offsets,
+                                     const uint64_t *src_ragged_offsets,
+                                     enum ADIOS_DATATYPES datum_type,
+                                     enum ADIOS_FLAG swap_endianness) {
+    copy_subvolume_ragged(dst, src, copy_spec->ndim, copy_spec->subv_dims,
+                          copy_spec->dst_dims, copy_spec->dst_subv_offsets,
+                          dst_ragged_offsets,
+                          copy_spec->src_dims, copy_spec->src_subv_offsets,
+                          src_ragged_offsets,
+                          datum_type, swap_endianness);
+}
+
+void copy_subvolume_ragged_offset_with_spec(void *dst, const void *src,
+                                            const adios_subvolume_copy_spec *copy_spec,
+                                            uint64_t dst_ragged_offset,
+                                            uint64_t src_ragged_offset,
+                                            enum ADIOS_DATATYPES datum_type,
+                                            enum ADIOS_FLAG swap_endianness) {
+    copy_subvolume_ragged_offset(dst, src, copy_spec->ndim, copy_spec->subv_dims,
+                                 copy_spec->dst_dims, copy_spec->dst_subv_offsets,
+                                 dst_ragged_offset,
+                                 copy_spec->src_dims, copy_spec->src_subv_offsets,
+                                 src_ragged_offset,
+                                 datum_type, swap_endianness);
+}
+
+
+/*
+ * copy_subvolume delegates to the copy_subvolume_helper function, with the
+ * following parameter translations:
+ * 1) Element size (i.e. 8 bytes for double, etc.) is considered an additional,
+ *    fastest-varying dimension
+ * 2) All "contiguous" fastest-varying dimensions are collapsed into a single
+ *    fastest-varying dimension
+ */
+void copy_subvolume(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                    const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                    const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                    enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness) {
+    copy_subvolume_ragged(dst, src, ndim, subv_dims,
+                          dst_dims, dst_subv_offsets, NULL,
+                          src_dims, src_subv_offsets, NULL,
+                          datum_type, swap_endianness);
+}
+
+void copy_subvolume_ragged(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                           const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                           const uint64_t *dst_ragged_offsets,
+                           const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                           const uint64_t *src_ragged_offsets,
+                           enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness) {
+
+    const uint64_t total_src_ragged_offset =
+            src_ragged_offsets ?
+            compute_linear_offset_in_volume(ndim, src_ragged_offsets,
+                                        src_dims) : 0;
+    const uint64_t total_dst_ragged_offset =
+            dst_ragged_offsets ?
+            compute_linear_offset_in_volume(ndim, dst_ragged_offsets,
+                                        dst_dims) : 0;
+
+    copy_subvolume_ragged_offset(dst, src, ndim, subv_dims,
+                                 dst_dims, dst_subv_offsets,
+                                 total_dst_ragged_offset,
+                                 src_dims, src_subv_offsets,
+                                 total_src_ragged_offset,
+                                 datum_type, swap_endianness);
+}
+
+/*
+ * Copies a given subvolume from 'src' to 'dst'. It recursively copies a
+ * hyperplane of progressively lower dimensions, until it reaches the lowest
+ * dimension, in which case it simply performs a memcpy.
+ *
+ * At any given call level to this function, 'src' and 'dst' point to the first
+ * element of a hyperplane of the subvolume with dimension 'ndim'.
+ *
+ * @param dst the destination buffer
+ * @param src the source buffer
+ * @param ndim the number of dimensions
+ * @param next_subv_dim the list of dimensions for the subvolume, starting with
+ *        the slowest-changing
+ * @param next_dst_stride the list of destination buffer strides for each
+ *        dimension
+ * @param next_src_stride the list of source buffer strides for each dimension
+ * @param type the datatype of the elements in dst/src (NOTE: this is ONLY for
+ *        the purpose of endianness swapping; strides/dimensions are in bytes)
+ * @param swap_endianness if true, swap the endianness of each element
+ */
+static void copy_subvolume_helper(char *dst, const char *src,
+                                  int ndim, const uint64_t *next_subv_dim,
+                                  const uint64_t *next_dst_stride, const uint64_t *next_src_stride,
+                                  enum ADIOS_DATATYPES buftype, int swap_endianness) {
+    if (ndim == 1) {
+        memcpy(dst, src, *next_subv_dim);
+        if (swap_endianness) {
+            change_endianness(dst, *next_subv_dim, buftype);
+        }
+    } else {
+        int i;
+        for (i = 0; i < *next_subv_dim; i++) {
+            copy_subvolume_helper(dst, src, ndim - 1,
+                                  next_subv_dim + 1, next_dst_stride + 1, next_src_stride + 1,
+                                  buftype, swap_endianness);
+
+            src += *next_src_stride;
+            dst += *next_dst_stride;
+        }
+    }
+}
+
+/*
+ * Same as copy_subvolume_helper, but uses memmove instead of memcpy for
+ * safe(r) copies on overlapping buffers.
+ */
+static void copy_subvolume_helper_safe(char *dst, const char *src,
+                                       int ndim, const uint64_t *next_subv_dim,
+                                       const uint64_t *next_dst_stride, const uint64_t *next_src_stride,
+                                        enum ADIOS_DATATYPES buftype, int swap_endianness) {
+    if (ndim == 1) {
+        memmove(dst, src, *next_subv_dim);
+        if (swap_endianness) {
+            change_endianness(dst, *next_subv_dim, buftype);
+        }
+    } else {
+        int i;
+        for (i = 0; i < *next_subv_dim; i++) {
+            copy_subvolume_helper(dst, src, ndim - 1,
+                                  next_subv_dim + 1, next_dst_stride + 1, next_src_stride + 1,
+                                  buftype, swap_endianness);
+
+            src += *next_src_stride;
+            dst += *next_dst_stride;
+        }
+    }
+}
+
+void copy_subvolume_ragged_offset(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                                  const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                                  uint64_t dst_ragged_offset,
+                                  const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                                  uint64_t src_ragged_offset,
+                                  enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness) {
+
+    int i;
+    int last_noncovering_dim = 0; // Index of dimension that starts a contiguous block
+    int buffers_intersect = 0; // Whether the source and destination memory copy regions may intersect
+    uint64_t src_strides[32];
+    uint64_t dst_strides[32];
+    const int type_size = adios_get_type_size(datum_type, NULL);
+
+    // Find the last dimension for which the subvolume, source and destination
+    // spaces do not exactly match (i.e. non-zero offset or unequal lengths).
+    for (i = 0; i < ndim; i++) {
+        // If the subvolume, source and destination do not exactly match along
+        // this dimension, it is marked as incomplete
+        if (src_subv_offsets[i] != 0 ||
+            dst_subv_offsets[i] != 0 ||
+            subv_dims[i] != src_dims[i] ||
+            subv_dims[i] != dst_dims[i]) {
+
+            last_noncovering_dim = i;
+        }
+    }
+
+    // Calculate the volume (number of bytes) of the region subtended by the
+    // contiguous dimensions (which start with the last non-covering dimension)
+    uint64_t contig_dims_volume = 1;
+    for (i = last_noncovering_dim; i < ndim; i++) {
+        contig_dims_volume *= subv_dims[i];
+    }
+    // Add the element size as a new "dimension", to convert from element-space
+    // to byte-space
+    contig_dims_volume *= type_size; // Assumes non-string type
+
+    // Compute strides for the dimensions
+    uint64_t src_volume = type_size;
+    uint64_t dst_volume = type_size;
+    for (i = ndim - 1; i >= 0; i--) {
+        src_strides[i] = src_volume;
+        dst_strides[i] = dst_volume;
+
+        src_volume *= src_dims[i];
+        dst_volume *= dst_dims[i];
+    }
+
+    // Compute the starting offsets for src and dst. In theory we could skip
+    // the contiguous dimensions other than the first one, but just to be
+    // safe/simple we calculate them all.
+    uint64_t src_offset = 0, dst_offset = 0;
+    for (i = 0; i < ndim; i++) {
+        src_offset += src_subv_offsets[i] * src_strides[i];
+        dst_offset += dst_subv_offsets[i] * dst_strides[i];
+    }
+    // Incorporate ragged offsets
+    src_offset -= src_ragged_offset * type_size;
+    dst_offset -= dst_ragged_offset * type_size;
+
+    // Save the old value of the first contiguous dimension, then replace it
+    // with a "collapsed" dimension consolidating all contiguous dimensions
+    // into one
+    // We "cheat" a bit by removing the const modifier. This is OK because we
+    // carefully put back the original value before returning. This is the only
+    // argument modification we do in this function besides filling 'dst'.
+    uint64_t first_contig_dim_value_old = subv_dims[last_noncovering_dim];
+    ((uint64_t*)subv_dims)[last_noncovering_dim] = contig_dims_volume;
+
+    // Compute whether the memory regions for the copy overlap
+    // If so, we need to use a safer copy method
+    if (0) { // FOR NOW, DON'T DO THIS, AS WE NEVER USE OVERLAPPING BUFFERS
+        uint64_t dst_end_offset = dst_offset;
+        uint64_t src_end_offset = src_offset;
+        // Match the stride counts as executed by the helper function: all but
+        // the last dimension contribute (length - 1) strides, with the last
+        // dimension contributing instead its length
+        for (i = 0; i < last_noncovering_dim; i++) {
+            src_end_offset += (subv_dims[i] - 1) * src_strides[i];
+            dst_end_offset += (subv_dims[i] - 1) * dst_strides[i];
+        }
+        src_end_offset += subv_dims[last_noncovering_dim];
+        dst_end_offset += subv_dims[last_noncovering_dim];
+
+        buffers_intersect =
+                intersect_segments((uint64_t)dst + dst_offset,
+                                   dst_end_offset - dst_offset,
+                                   (uint64_t)src + src_offset,
+                                   src_end_offset - src_offset,
+                                   NULL, NULL);
+
+        buffers_intersect = 0; // Look Ma, no asserts!
+
+        // Enfoce the safety condition for overlapping buffers here
+        if (buffers_intersect) {
+            int dim;
+            assert((char*)src + src_offset >= (char*)dst + dst_offset);
+            for (i = 0; i < last_noncovering_dim + 1; i++)
+                assert(src_strides[i] >= dst_strides[i]);
+        }
+    }
+
+    //printf(">>> copy_subvolume is using %d contiguous dimensions...\n", ndim - first_contig_dim);
+
+    // Finally, delegate to the recursive worker function
+    if (buffers_intersect) {
+        copy_subvolume_helper_safe(
+                (char*)dst + dst_offset,            /* Offset dst buffer to the first element */
+                (char*)src + src_offset,            /* Offset src buffer to the first element */
+                last_noncovering_dim + 1,           /* Number of dimensions, modified for collapsed contiguous dimensions */
+                subv_dims,                          /* Subvolume dimensions (modified to collapse all contiguous dimensions) */
+                dst_strides,                        /* dst buffer dimension strides */
+                src_strides,                        /* src buffer dimension strides */
+                datum_type,                         /* The datatype of the buffer elements */
+                swap_endianness == adios_flag_yes   /* Whether to swap endianness */
+        );
+    } else {
+        copy_subvolume_helper(
+                (char*)dst + dst_offset,            /* Offset dst buffer to the first element */
+                (char*)src + src_offset,            /* Offset src buffer to the first element */
+                last_noncovering_dim + 1,           /* Number of dimensions, modified for collapsed contiguous dimensions */
+                subv_dims,                          /* Subvolume dimensions (modified to collapse all contiguous dimensions) */
+                dst_strides,                        /* dst buffer dimension strides */
+                src_strides,                        /* src buffer dimension strides */
+                datum_type,                         /* The datatype of the buffer elements */
+                swap_endianness == adios_flag_yes   /* Whether to swap endianness */
+        );
+    }
+
+    // Restore the old first contiguous dimension value
+    ((uint64_t*)subv_dims)[last_noncovering_dim] = first_contig_dim_value_old;
+}
+
+uint64_t compute_linear_offset_in_volume(int ndim, const uint64_t *point, const uint64_t *dims) {
+    int dim;
+    uint64_t ragged_off = 0;
+    uint64_t volume_so_far = 1;
+    for (dim = ndim - 1; dim >= 0; dim--) {
+        ragged_off += point[dim] * volume_so_far;
+        volume_so_far *= dims[dim];
+    }
+    return ragged_off;
+}
+
+void compact_subvolume_ragged_offset(void *buf, int ndim, const uint64_t *subv_dims,
+                                     const uint64_t *buf_dims, uint64_t buf_ragged_offset,
+                                     const uint64_t *buf_subv_offsets,
+                                     enum ADIOS_DATATYPES elem_type) {
+    int i;
+    uint64_t zero[32];
+    uint64_t new_data_buflen;
+
+    // Ensure all arguments are non-NULL, and that the subvolume fits
+    // completely within the buffer volume
+    assert(buf); assert(buf_dims); assert(subv_dims); assert(buf_subv_offsets);
+    for (i = 0; i < ndim; i++)
+        assert(buf_dims[i] >= subv_dims[i] + buf_subv_offsets[i]);
+
+    memset(zero, 0, ndim * sizeof(uint64_t));
+
+    adios_subvolume_copy_spec *compact_copyspec = malloc(sizeof(adios_subvolume_copy_spec));
+    adios_copyspec_init(compact_copyspec, ndim, subv_dims,
+                        subv_dims, zero,
+                        buf_dims, buf_subv_offsets);
+
+    // If the compact operation will do something, do it now
+    if (!adios_copyspec_is_noop(&compact_copyspec)) {
+        // Overlapping subvolume copy allowed because it matches the safety
+        // condition as defined in comment at the top of adios_subvolume.h.
+        // NOTE: we infer no endianness swap, as this is an intra-buffer operation
+        copy_subvolume_ragged_offset_with_spec(
+                buf, buf, compact_copyspec,
+                0, buf_ragged_offset,
+                elem_type, adios_flag_no);
+    }
+
+    // We use the arguments and a stack array as buffers; don't free them
+    adios_copyspec_free(&compact_copyspec, 0);
+}
+
+ADIOS_SELECTION * new_derelativized_selection(const ADIOS_SELECTION *sel, const uint64_t *sel_global_offset) {
+    ADIOS_SELECTION *new_sel;
+    switch (sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const int ndim = sel->u.bb.ndim;
+        const int dimsize = ndim * sizeof(uint64_t);
+        uint64_t * const new_start = malloc(dimsize);
+        uint64_t * const new_count = bufdup(sel->u.bb.count, sizeof(uint64_t), ndim);
+
+        // Add the global offset to the bounding box start
+        vector_add(ndim, new_start, sel->u.bb.start, sel_global_offset);
+
+        new_sel = common_read_selection_boundingbox(ndim, new_start, new_count);
+        break;
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const int ndim = sel->u.points.ndim;
+        const uint64_t npoints = sel->u.points.npoints;
+        uint64_t * const new_points = malloc(npoints * ndim * sizeof(uint64_t));
+
+        uint64_t i;
+        const uint64_t *cur_src_point = sel->u.points.points;
+        uint64_t *cur_dst_point = new_points;
+
+        // Add the global offset to each point
+        for (i = 0; i < npoints; i++) {
+            vector_add(ndim, cur_dst_point, cur_src_point, sel_global_offset);
+            cur_src_point += ndim;
+            cur_dst_point += ndim;
+        }
+
+        new_sel = common_read_selection_points(ndim, npoints, new_points);
+        break;
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    case ADIOS_SELECTION_AUTO:
+    default:
+        fprintf(stderr, "Internal error: attempt to call %s on a selection of type %d, but only BOUNDINGBOX (%d) and POINTS (%d) are supported.\n",
+                __FUNCTION__, sel->type, ADIOS_SELECTION_BOUNDINGBOX, ADIOS_SELECTION_POINTS);
+        assert(0);
+        break;
+    }
+
+    return new_sel;
+}
+
+ADIOS_SELECTION * varblock_to_bb(int ndim, const ADIOS_VARBLOCK *vb) {
+    return common_read_selection_boundingbox(ndim,
+                                             bufdup(vb->start, sizeof(uint64_t), ndim),
+                                             bufdup(vb->count, sizeof(uint64_t), ndim));
+}
+
+uint64_t compute_selection_size(ADIOS_SELECTION *sel) {
+    uint64_t sel_size;
+    switch (sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const int ndim = sel->u.bb.ndim;
+        const uint64_t * const sel_count = sel->u.bb.count;
+        int i;
+
+        sel_size = 1;
+        for (i = 0; i < ndim; i++)
+            sel_size *= sel_count[i];
+
+        break;
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        sel_size = sel->u.points.npoints;
+        break;
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    case ADIOS_SELECTION_AUTO:
+    default:
+        fprintf(stderr, "Internal error: attempt to call %s on a selection of type %d, but only BOUNDINGBOX (%d) and POINTS (%d) are supported.\n",
+                __FUNCTION__, sel->type, ADIOS_SELECTION_BOUNDINGBOX, ADIOS_SELECTION_POINTS);
+        assert(0);
+        break;
+    }
+
+    return sel_size;
+}
diff --git a/src/core/adios_subvolume.h b/src/core/adios_subvolume.h
new file mode 100644
index 0000000..99ed012
--- /dev/null
+++ b/src/core/adios_subvolume.h
@@ -0,0 +1,261 @@
+/*
+ * adios_subvolume.h
+ *
+ * Utility functions for manipulating subvolumes of multi-dimensional arrays.
+ *
+ * --- Note on overlapping subvolume copies ---
+ * In some special cases, it may be desirable to perform a subvolume copy where
+ * the source and destination volumes overlap, and therefore memcpy operations
+ * may also overlap. This operation is supported with the condition that the
+ * following conditions are met:
+ * 1) The source pointer is not before the destination pointer
+ * 2) The size of each stride in the source volume is at least the
+ *    size of the corresponding stride in the destination volume
+ *
+ * If these conditions hold, no source memory will ever be overwritten
+ * before it is copied. This can be proven inductively:
+ * 1) The first memmove will copy a block of data to an equal or lower
+ *    address than its source address, since the source pointer is
+ *    not before the destination pointer
+ * 2) At any later point, the additional offset into the source buffer
+ *    is at least the addition offset into the destination buffer,
+ *    since this offset is a positive linear combination of the strides
+ *    for each buffer, and the source stride is at least that of the
+ *    destination stride for every dimension. Therefore, the final copy
+ *    destination address is still at least that of the final source
+ *    address
+ *
+ * Note that this works even with ragged arrays, as we only consider
+ * the start offsets, which incorporate the ragged offset, and strides,
+ * which are not affected by the ragged offset.
+ *
+ * If a subvolume copy is attempted where both of these safety conditions do
+ * not hold, an assertion will fail.
+ *
+ *  Created on: Jul 25, 2012
+ *      Author: David A. Boyuka II
+ */
+
+
+#ifndef ADIOS_SUBVOLUME_H_
+#define ADIOS_SUBVOLUME_H_
+
+#include <stdint.h>
+#include "public/adios_types.h"
+#include "public/adios_read.h"
+#include "public/adios_selection.h"
+#include "core/adios_copyspec.h"
+
+void vector_add(int ndim, uint64_t *dst_vec, const uint64_t *vec1, const uint64_t *vec2);
+void vector_sub(int ndim, uint64_t *dst, const uint64_t *vec1, const uint64_t *vec2);
+
+/*
+ * Simple computation of the volume in elements of a given array.
+ */
+uint64_t compute_volume(int ndim, const uint64_t *dims);
+
+/*
+ * Calculates the intersection, if any, between two volumes. For each volume,
+ * dimensions and global offsets must be specified. If the volumes do
+ * intersect, the size dimensions of the intersection are returned, as well as
+ * the offset of the intersection in three forms: global, and relative to each
+ * of the two volumes.
+ *
+ * All global offsets (offset1, offset2, inter_offset) are defined relative to
+ * the same global coordinate space (typically a global array).
+ *
+ * All buffer arguments (everything but ndim) must be arrays of uint64_t of
+ * length at least ndim (or NULL, in the case of the optional output arguments;
+ * see below).
+ *
+ * If the volumes intersect, this function will return a non-zero value, and
+ * the output arguments (inter_offset, inter_offset_rel1, inter_offset_rel2,
+ * and inter_dims) will be populated with the global offset, offset relative
+ * to volume 1's offset, offset relative to volume 2's offset, and dimensions
+ * of the intersection volume, respectively. An appropriate buffer must be
+ * supplied for inter_dims, but NULL may be supplied for any of the other
+ * three output parameters if that information is not desired.
+ *
+ * If the volumes are disjoint, this function will return 0, and the content of
+ * the output arguments is undefined.
+ *
+ * @param offset1 the global offset of volume 1
+ * @param dims1 the dimensions of volume 1
+ * @param offset2 the global offset of volume 2
+ * @param dims2 the dimensions of volume 2
+ * @param inter_offset a buffer to hold the offset of the intersection
+ *        volume, or NULL if this information isn't required.
+ * @param inter_offset_rel1 a buffer to hold the offset of the intersection
+ *        volume relative to offset1, or NULL if this information isn't
+ *        required.
+ * @param inter_offset_rel2 a buffer to hold the offset of the intersection
+ *        volume relative to offset2, or NULL if this information isn't
+ *        required.
+ * @param inter_dims a buffer to hold the dimensions of the intersection volume
+ */
+int intersect_volumes(int ndim,
+                      const uint64_t *offset1, const uint64_t *dims1,
+                      const uint64_t *offset2, const uint64_t *dims2,
+                      uint64_t *inter_offset,
+                      uint64_t *inter_offset_rel1, uint64_t *inter_offset_rel2,
+                      uint64_t *inter_dims);
+
+/*
+ * Same as intersect_volume, but derive the volume bounds from bounding box
+ * structs.
+ */
+int intersect_bb(const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1,
+                 const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2,
+                 uint64_t *inter_offset,
+                 uint64_t *inter_offset_rel1, uint64_t *inter_offset_rel2,
+                 uint64_t *inter_dims);
+
+/*
+ * Copies a multi-dimensional subvolume from one buffer to another.
+ *
+ * 'src' and 'dst' are assumed to be buffers laid out in C array dimension
+ * order (the first dimension is the slowest-changing). 'dst' is assumed to
+ * have the specified dimensions to accommodate the incoming subvolume.
+ *
+ * NOTE: See the section on "safety condition for overlapping subvolume copies"
+ *       at the top of adios_subvolume.h for important information on
+ *       overlapping copies.
+ *
+ * @param dst the destination buffer
+ * @param src the source buffer
+ * @param ndim the number of dimensions in the source and destination space
+ * @param subv_dims the dimensions of the subvolume to copy
+ * @param dst_dims the dimensions of the entire destination buffer
+ * @param dst_subv_offsets the offsets at which to write the subvolume
+ * @param src_dims the dimensions of the entire source buffer
+ * @param src_subv_offsets the offsets from which to read the subvolume
+ * @param datum_type the ADIOS datatype of the elements in the source and
+ *        destination buffers
+ */
+void copy_subvolume(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                    const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                    const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                    enum ADIOS_DATATYPES datum_type,
+                    enum ADIOS_FLAG swap_endianness);
+
+/*
+ * The same as copy_subvolume, with the addition of optional ragged src/dst
+ * arrays. These arrays are ragged iff the pointer supplied does not point to
+ * the logical (0,0,...,0) element of the corresponding array, but instead
+ * points to some element (r1,r2,...,rn) with some ri != 0. In this case,
+ * the corresponding {src,dst}_ragged_offsets designates the element pointed to
+ * by the corresponding pointer.
+ */
+void copy_subvolume_ragged(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                           const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                           const uint64_t *dst_ragged_offsets,
+                           const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                           const uint64_t *src_ragged_offsets,
+                           enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness);
+
+/*
+ * Same as copy_subvolume_ragged, but takes a scalar byte offset for ragged
+ * arrays instead of an array of element offsets.
+ */
+void copy_subvolume_ragged_offset(void *dst, const void *src, int ndim, const uint64_t *subv_dims,
+                                  const uint64_t *dst_dims, const uint64_t *dst_subv_offsets,
+                                  uint64_t dst_ragged_offset,
+                                  const uint64_t *src_dims, const uint64_t *src_subv_offsets,
+                                  uint64_t src_ragged_offset,
+                                  enum ADIOS_DATATYPES datum_type, enum ADIOS_FLAG swap_endianness);
+
+/*
+ * Same as copy_subvolume, but derives most of the parameters from the supplied
+ * subvolume copy spec.
+ */
+void copy_subvolume_with_spec(void *dst, const void *src,
+                              const const adios_subvolume_copy_spec *copy_spec,
+                              enum ADIOS_DATATYPES datum_type,
+                              enum ADIOS_FLAG swap_endianness);
+
+/*
+ * Same as copy_subvolume_ragged, but derives most of the parameters from the
+ * supplied subvolume copy spec.
+ */
+void copy_subvolume_ragged_with_spec(void *dst, const void *src,
+                                     const adios_subvolume_copy_spec *copy_spec,
+                                     const uint64_t *dst_ragged_offsets,
+                                     const uint64_t *src_ragged_offsets,
+                                     enum ADIOS_DATATYPES datum_type,
+                                     enum ADIOS_FLAG swap_endianness);
+
+/*
+ * Same as copy_subvolume_ragged_offset, but derives most of the parameters
+ * from the supplied subvolume copy spec.
+ */
+void copy_subvolume_ragged_offset_with_spec(void *dst, const void *src,
+                                            const adios_subvolume_copy_spec *copy_spec,
+                                            uint64_t dst_ragged_offset,
+                                            uint64_t src_ragged_offset,
+                                            enum ADIOS_DATATYPES datum_type,
+                                            enum ADIOS_FLAG swap_endianness);
+
+/*
+ * Computes the element offset of the beginning of a ragged multidimensional
+ * volume array relative to the beginning of the corresponding complete volume
+ * array.
+ *
+ * @param ndim number of dimensions of the volume
+ * @param point the point within the volume
+ * @param dims the dimensions of the volume
+ * @return the linearized element offset of the point within the volume
+ */
+uint64_t compute_linear_offset_in_volume(int ndim, const uint64_t *point, const uint64_t *dims);
+
+/*
+ * Compacts a subvolume within a buffer volume to the beginning of the buffer,
+ * leaving the rest of the buffer in an undefined state.
+ *
+ * For example, given a 10x10 subvolume of a 20x20 buffer volume, it will shift
+ * the contents of that subvolume to the first 100 elements of the buffer,
+ * leaving the remaining 300 elements undefined.
+ *
+ * @param buf the buffer for the containing volume
+ * @param ndim the dimensionality of space for the volumes
+ * @param subv_dims the dimensions of the subvolume
+ * @param buf_dims the dimensions of the containing volume
+ * @param buf_ragged_offset the ragged offset of the containing volume (if the
+ *        containing volume is a complete array, set this to 0)
+ * @param buf_subv_offsets the offset of the subvolume within the containing
+ *        volume
+ * @param elem_type the datatype of the elements of the buffer
+ */
+void compact_subvolume_ragged_offset(void *buf, int ndim, const uint64_t *subv_dims,
+                                     const uint64_t *buf_dims, uint64_t buf_ragged_offset,
+                                     const uint64_t *buf_subv_offsets,
+                                     enum ADIOS_DATATYPES elem_type);
+
+
+/*
+ * Takes a selection that is relative to a given offset, and derelativizes it
+ * from that point. For a bounding box selection, this involves shifting the
+ * start coordinate of the bounding box by the given offset. For a point
+ * selection, this involves adding the given offset to each point.
+ *
+ * Only bounding box and point selections are supported at this time;
+ * attempting to derelativize some other selection type will cause a failed
+ * assertion.
+ *
+ * @param sel the relative selection
+ * @param the offset about which to derelativize the given selection
+ * @return a new selection that is derelativized.
+ */
+ADIOS_SELECTION * new_derelativized_selection(const ADIOS_SELECTION *sel, const uint64_t *sel_global_offset);
+
+/*
+ * Converts an ADIOS_VARBLOCK to a corresponding ADIOS_SELECTION of type
+ * bounding box, which will be a selection exactly matching the bounds of the
+ * given ADIOS_VARBLOCK within the global space.
+ * @param ndim the dimensionality of space
+ * @param the ADIOS_VARBLOCK to convert to a bounding box selection
+ * @return an ADIOS_SELECTION of type bounding box corresponding to the given
+ *         ADIOS_VARBLOCK.
+ */
+ADIOS_SELECTION * varblock_to_bb(int ndim, const ADIOS_VARBLOCK *vb);
+
+#endif /* ADIOS_SUBVOLUME_H_ */
diff --git a/src/core/adios_timing.c b/src/core/adios_timing.c
index a25f4ba..762c0c9 100644
--- a/src/core/adios_timing.c
+++ b/src/core/adios_timing.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -21,7 +21,7 @@
 
 
 /*
- * Dump the timing information to an XML file. 
+ * Dump the timing information to an XML file.
  * The first process writes first, the last writes last, and the others are in unspecified order.
  * Called both from C and Fortran API's (adios.c and adiosf.c)
 */
@@ -31,7 +31,7 @@ void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
-        adios_error (err_invalid_file_pointer, 
+        adios_error (err_invalid_file_pointer,
                      "Invalid handle passed to adios_get_timing_name\n");
         return;
     }
@@ -61,7 +61,7 @@ void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
 
     // Aggregate timing info on rank 0
     // Handle internal counts and user counts separately
-   
+
     MPI_Gather (
         fd->timing_obj->times + ADIOS_TIMING_MAX_USER_TIMERS,
         fd->timing_obj->internal_count,  // sendcount
@@ -89,7 +89,7 @@ void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
 
     if (rank == 0)
     {
-        FILE* f = fopen (filename, "w"); 
+        FILE* f = fopen (filename, "w");
 
         // Rank 0 starts the xml and includes the text labels
         fprintf (f, "<skel_result><adios_timing cores='%i' keys='", size);
@@ -159,7 +159,7 @@ void adios_timing_write_xml_common (int64_t fd_p, const char* filename)
         fprintf (f, "</adios_timing></skel_result>\n");
         fclose (f);
 
-    }        
+    }
 #else
     log_warn ("Timing information is not currently available.\n"
               "To use the Skel timing functions, you must enable them when building ADIOS.\n"
@@ -176,7 +176,7 @@ int adios_get_timing_internal_count (int64_t fd_p, int64_t * tc)
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
-        adios_error (err_invalid_file_pointer, 
+        adios_error (err_invalid_file_pointer,
                      "Invalid handle passed to adios_get_timing_count\n");
 
         return 1;
@@ -185,7 +185,7 @@ int adios_get_timing_internal_count (int64_t fd_p, int64_t * tc)
     if (! fd->timing_obj)
     {
         *tc = 0;
-    } 
+    }
     else
     {
         *tc = fd->timing_obj->internal_count;
@@ -200,7 +200,7 @@ int adios_get_timing_name (int64_t fd_p, int64_t index, char* name)
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
-        adios_error (err_invalid_file_pointer, 
+        adios_error (err_invalid_file_pointer,
                      "Invalid handle passed to adios_get_timing_name\n");
 
         return 1;
@@ -218,7 +218,7 @@ int adios_get_timing_value (int64_t fd_p, int64_t index, double* value)
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
-        adios_error (err_invalid_file_pointer, 
+        adios_error (err_invalid_file_pointer,
                      "Invalid handle passed to adios_get_timing_value\n");
 
         return 1;
@@ -245,9 +245,9 @@ void adios_timing_stop (struct adios_timing_struct * ts, int64_t index)
 struct adios_timing_struct *  adios_timing_create (int timer_count, char** timer_names)
 {
     int i;
-    struct adios_timing_struct * ts = (struct adios_timing_struct *) 
+    struct adios_timing_struct * ts = (struct adios_timing_struct *)
                                        malloc (sizeof (struct adios_timing_struct) );
-    
+
     ts->internal_count = timer_count;
     ts->user_count = 0;
     ts->names = (char**) malloc ( (ADIOS_TIMING_MAX_USER_TIMERS + timer_count) * sizeof (char*) );
diff --git a/src/core/adios_timing.h b/src/core/adios_timing.h
index 667c947..ade3590 100644
--- a/src/core/adios_timing.h
+++ b/src/core/adios_timing.h
@@ -18,10 +18,10 @@
 struct adios_timing_struct
 {
 
-	int64_t internal_count;
-	int64_t user_count;
-	char ** names;
-	double *times;
+    int64_t internal_count;
+    int64_t user_count;
+    char ** names;
+    double *times;
 
 };
 
diff --git a/src/core/adios_transport_hooks.c b/src/core/adios_transport_hooks.c
index 258498b..8d5541a 100644
--- a/src/core/adios_transport_hooks.c
+++ b/src/core/adios_transport_hooks.c
@@ -49,15 +49,18 @@ void adios_init_transports (struct adios_transport_struct ** t)
     ASSIGN_FNS(mpi,ADIOS_METHOD_MPI)
     ASSIGN_FNS(mpi_lustre,ADIOS_METHOD_MPI_LUSTRE)
     ASSIGN_FNS(mpi_amr,ADIOS_METHOD_MPI_AMR)
+#    if HAVE_BGQ
+    ASSIGN_FNS(mpi_bgq,ADIOS_METHOD_MPI_BGQ)
+#    endif
     //Tian's method
     ASSIGN_FNS(var_merge,ADIOS_METHOD_VAR_MERGE)
 #      ifndef NO_RESEARCH_TRANSPORTS
-    ASSIGN_FNS(mpi_stripe,ADIOS_METHOD_MPI_STRIPE)
-    ASSIGN_FNS(mpi_cio,ADIOS_METHOD_MPI_CIO)
-    ASSIGN_FNS(mpi_stagger,ADIOS_METHOD_MPI_STAGGER)
-    ASSIGN_FNS(mpi_aggregate,ADIOS_METHOD_MPI_AGG)
-    ASSIGN_FNS(mpi_amr1,ADIOS_METHOD_MPI_AMR1)
-    ASSIGN_FNS(adaptive,ADIOS_METHOD_ADAPTIVE)
+    //ASSIGN_FNS(mpi_stripe,ADIOS_METHOD_MPI_STRIPE)
+    //ASSIGN_FNS(mpi_cio,ADIOS_METHOD_MPI_CIO)
+    //ASSIGN_FNS(mpi_stagger,ADIOS_METHOD_MPI_STAGGER)
+    //ASSIGN_FNS(mpi_aggregate,ADIOS_METHOD_MPI_AGG)
+    //ASSIGN_FNS(mpi_amr1,ADIOS_METHOD_MPI_AMR1)
+    //ASSIGN_FNS(adaptive,ADIOS_METHOD_ADAPTIVE)
 #      endif
 #    endif
 
@@ -81,7 +84,7 @@ void adios_init_transports (struct adios_transport_struct ** t)
 #  endif
 
 # if HAVE_FLEXPATH
-	ASSIGN_FNS(flexpath,ADIOS_METHOD_FLEXPATH)
+    ASSIGN_FNS(flexpath,ADIOS_METHOD_FLEXPATH)
 # endif
 
     ASSIGN_FNS(posix,ADIOS_METHOD_POSIX)
@@ -92,15 +95,15 @@ void adios_init_transports (struct adios_transport_struct ** t)
 #  endif
 
 #  if HAVE_DIMES
-	ASSIGN_FNS(dimes,ADIOS_METHOD_DIMES)
+    ASSIGN_FNS(dimes,ADIOS_METHOD_DIMES)
 #  endif
 
 #  ifndef NO_RESEARCH_TRANSPORTS
-    ASSIGN_FNS(provenance,ADIOS_METHOD_PROVENANCE)
+    //ASSIGN_FNS(provenance,ADIOS_METHOD_PROVENANCE)
 #  endif
 
 #endif /* ADIOS_EMPTY_TRANSPORTS */
-	}
+    }
 
 int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
                        ,int * requires_group_comm
@@ -112,6 +115,9 @@ int adios_parse_method (const char * buf, enum ADIOS_IO_METHOD * method
     MATCH_STRING_TO_METHOD("MPI",ADIOS_METHOD_MPI,1)
     MATCH_STRING_TO_METHOD("MPI_LUSTRE",ADIOS_METHOD_MPI_LUSTRE,1)
     MATCH_STRING_TO_METHOD("MPI_AMR",ADIOS_METHOD_MPI_AMR,1)
+#if HAVE_BGQ
+    MATCH_STRING_TO_METHOD("MPI_BGQ",ADIOS_METHOD_MPI_BGQ,1)
+#endif
     // Tian's method
     MATCH_STRING_TO_METHOD("VAR_MERGE",ADIOS_METHOD_VAR_MERGE,1)
 
diff --git a/src/core/adios_transport_hooks.h b/src/core/adios_transport_hooks.h
index f5c03ec..7c20086 100644
--- a/src/core/adios_transport_hooks.h
+++ b/src/core/adios_transport_hooks.h
@@ -129,19 +129,23 @@ enum ADIOS_IO_METHOD {ADIOS_METHOD_UNKNOWN     = -2
               ,ADIOS_METHOD_NSSI_FILTER  = 20
               ,ADIOS_METHOD_DIMES        = 21
               ,ADIOS_METHOD_VAR_MERGE   = 22
-              ,ADIOS_METHOD_COUNT        = 23
+              ,ADIOS_METHOD_MPI_BGQ     = 23
+              ,ADIOS_METHOD_COUNT       = 24
 };
 
 // forward declare the functions (or dummies for internals use)
 #if !defined(_NOMPI) || !defined (ADIOS_EMPTY_TRANSPORTS)
      FORWARD_DECLARE(mpi)
      FORWARD_DECLARE(mpi_lustre)
-     FORWARD_DECLARE(mpi_cio)
-     FORWARD_DECLARE(mpi_stripe)
-     FORWARD_DECLARE(mpi_stagger)
-     FORWARD_DECLARE(mpi_aggregate)
+     //FORWARD_DECLARE(mpi_cio)
+     //FORWARD_DECLARE(mpi_stripe)
+     //FORWARD_DECLARE(mpi_stagger)
+     //FORWARD_DECLARE(mpi_aggregate)
      FORWARD_DECLARE(mpi_amr)
-     FORWARD_DECLARE(mpi_amr1)
+#if HAVE_BGQ
+     FORWARD_DECLARE(mpi_bgq)
+#endif
+     //FORWARD_DECLARE(mpi_amr1)
      FORWARD_DECLARE(phdf5)
      FORWARD_DECLARE(nc4)
      FORWARD_DECLARE(nssi)
@@ -151,11 +155,11 @@ enum ADIOS_IO_METHOD {ADIOS_METHOD_UNKNOWN     = -2
 #endif
 
 #ifdef ADIOS_EMPTY_TRANSPORTS
-     FORWARD_DECLARE_EMPTY(datatap)
+     //FORWARD_DECLARE_EMPTY(datatap)
      FORWARD_DECLARE_EMPTY(posix)
      FORWARD_DECLARE_EMPTY(posix1)
-     FORWARD_DECLARE_EMPTY(provenance)
-     FORWARD_DECLARE_EMPTY(adaptive)
+     //FORWARD_DECLARE_EMPTY(provenance)
+     //FORWARD_DECLARE_EMPTY(adaptive)
 #else
      FORWARD_DECLARE(datatap)
      FORWARD_DECLARE(posix)
diff --git a/src/core/adiosf.c b/src/core/adiosf.c
index 92f9210..5cc7dfb 100644
--- a/src/core/adiosf.c
+++ b/src/core/adiosf.c
@@ -34,7 +34,7 @@ extern int adios_errno;
 void FC_FUNC_(adios_set_application_id, ADIOS_SET_APPLICATION_ID) (int *id, int * err)
 {
     globals_adios_set_application_id (*id);
-    if (err != 0) *err = 0;
+    if (err != 0) *err = err_no_error;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -48,7 +48,7 @@ void FC_FUNC_(adios_init, ADIOS_INIT) (const char * config, MPI_Fint * comm, int
         *err = common_adios_init (buf1, c_comm);
         free (buf1);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -94,7 +94,7 @@ void FC_FUNC_(adios_open, ADIOS_OPEN)
         free (buf2);
         free (buf3);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -120,7 +120,7 @@ void FC_FUNC_(adios_write_byid, ADIOS_WRITE_BYID)
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_write\n");
-        *err = 1;
+        *err = adios_errno;
         return;
     }
 
@@ -128,7 +128,7 @@ void FC_FUNC_(adios_write_byid, ADIOS_WRITE_BYID)
     if (!v)
     {
         adios_error (err_invalid_varid, "Invalid id passed to adios_write_byid\n");
-        *err = 1;
+        *err = adios_errno;
         return;
     }
 
@@ -137,14 +137,14 @@ void FC_FUNC_(adios_write_byid, ADIOS_WRITE_BYID)
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
         // nothing to do so just return
-        *err = 0;
+        *err = err_no_error;
         return;
     }
 
     if (!var)
     {
         adios_error (err_invalid_data, "Invalid data (NULL pointer) passed to write\n");
-        *err = 1;
+        *err = adios_error;
         return;
     }
 
@@ -180,7 +180,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_write\n");
-        *err = 1;
+        *err = adios_errno;
         return;
     }
 
@@ -190,7 +190,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
         // nothing to do so just return
-        *err = 0;
+        *err = err_no_error;
         return;
     }
 
@@ -200,16 +200,16 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     //printf("  -- adios_write: name=[%s] var size = %d\n", buf1, var_size);
 
     if (!buf1) {
-        *err = -adios_errno;
+        *err = adios_errno;
         return;
     }
 
-    v = adios_find_var_by_name (v, buf1, fd->group->all_unique_var_names);
+    v = adios_find_var_by_name (fd->group, buf1);
 
     if (!v)
     {
         adios_error (err_invalid_varname, "Bad var name (ignored): '%s'\n", buf1);
-        *err = 1;
+        *err = adios_errno;
         free (buf1);
         return;
     }
@@ -221,7 +221,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
            )
         {
             adios_error (err_invalid_file_mode, "write attempted on %s in %s.  This was opened for read\n" ,buf1 , fd->name);
-            *err = 1;
+            *err = adios_errno;
             free (buf1);
             return;
         }
@@ -230,7 +230,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     if (!var)
     {
         adios_error (err_invalid_data, "Invalid data (NULL pointer) passed to write for variable %s\n", buf1);
-        *err = 1;
+        *err = adios_errno;
         free (buf1);
         return;
     }
@@ -242,6 +242,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     }
 
     // Q.L. 10-2010. To fix a memory leak problem.
+    // NCSU - Clear stats
     if (v->stats)
     {   
         int j, idx;
@@ -307,7 +308,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
                     adios_error (err_no_memory, 
                                  "In adios_write, cannot allocate %lld bytes to copy scalar %s\n",
                                  element_size, v->name);
-                    *err = 1;
+                    *err = adios_errno;
                     free (buf1);
                     return;
                 }
@@ -321,7 +322,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
                     adios_error (err_no_memory, 
                                  "In adios_write, cannot allocate %lld bytes to copy string %s\n",
                                  element_size, v->name);
-                    *err = 1;
+                    *err = adios_errno;
                     free (buf1);
                     return;
                 }
@@ -336,7 +337,7 @@ void FC_FUNC_(adios_write, ADIOS_WRITE)
     *err = common_adios_write (fd, v, var);
     if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
     {
-        adios_copy_var_written (&fd->group->vars_written, v, fd);
+        adios_copy_var_written (fd->group, v);
     }
 
     free (buf1);
@@ -368,7 +369,7 @@ void FC_FUNC_(adios_get_write_buffer, ADIOS_GET_WRITE_BUFFER)
         *err = common_adios_get_write_buffer (*fd_p, buf1, (uint64_t *) size, buffer);
         free (buf1);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -386,7 +387,7 @@ void FC_FUNC_(adios_read, ADIOS_READ)
         *err = common_adios_read (*fd_p, buf1, buffer, *buffer_size);
         free (buf1);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -409,7 +410,7 @@ void FC_FUNC_(adios_set_path, ADIOS_SET_PATH)
         *err = common_adios_set_path (*fd_p, buf1);
         free (buf1);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -428,7 +429,7 @@ void FC_FUNC_(adios_set_path_var, ADIOS_SET_PATH_VAR)
         free (buf1);
         free (buf2);
     } else {
-        *err = -adios_errno;
+        *err = adios_errno;
     }
 }
 
@@ -488,20 +489,20 @@ void FC_FUNC_(adios_declare_group, ADIOS_DECLARE_GROUP)
     char * buf1 = 0;
     char * buf2 = 0;
 
+    adios_errno = err_no_error;
     buf1 = futils_fstr_to_cstr (name, name_size);
     buf2 = futils_fstr_to_cstr (time_index, time_index_size);
 
     if (buf1 != 0 && buf2 != 0) {
-        *err = adios_common_declare_group (id, buf1, adios_flag_yes, "", "", buf2, *stats);
+        int ret = adios_common_declare_group (id, buf1, adios_flag_yes, "", "", buf2, *stats);
         free (buf1);
         free (buf2);
-        if (*err == 1) {
+        if (ret == 1) {
             struct adios_group_struct * g = (struct adios_group_struct *) *id;
             g->all_unique_var_names = adios_flag_no;
         }
-    } else {
-        *err = -adios_errno;
     }
+    *err = adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -523,6 +524,7 @@ void FC_FUNC_(adios_define_var, ADIOS_DEFINE_VAR)
     char * buf4 = 0;
     char * buf5 = 0;
 
+    adios_errno = err_no_error;
     buf1 = futils_fstr_to_cstr (name, name_size);
     buf2 = futils_fstr_to_cstr (path, path_size);
     buf3 = futils_fstr_to_cstr (dimensions, dimensions_size);
@@ -533,7 +535,7 @@ void FC_FUNC_(adios_define_var, ADIOS_DEFINE_VAR)
         *id = adios_common_define_var (*group_id, buf1, buf2
                                        ,(enum ADIOS_DATATYPES) *type
                                        ,buf3, buf4, buf5
-                                       );
+                                       ,NULL); // NCSU ALACRITY-ADIOS
 
         free (buf1);
         free (buf2);
@@ -560,24 +562,23 @@ void FC_FUNC_(adios_define_attribute, ADIOS_DEFINE_ATTRIBUTE)
     char * buf3 = 0;
     char * buf4 = 0;
 
+    adios_errno = err_no_error;
     buf1 = futils_fstr_to_cstr (name, name_size);
     buf2 = futils_fstr_to_cstr (path, path_size);
     buf3 = futils_fstr_to_cstr (value, value_size);
     buf4 = futils_fstr_to_cstr (var, var_size);
 
     if (buf1 != 0 && buf2 != 0 && buf3 != 0 && buf4 != 0) {
-        *err = adios_common_define_attribute (*group, buf1, buf2
-                                             ,(enum ADIOS_DATATYPES) *type, buf3
-                                             ,buf4
-                                             );
-
+        adios_common_define_attribute (*group, buf1, buf2
+                                      ,(enum ADIOS_DATATYPES) *type, buf3
+                                      ,buf4
+                                      );
         free (buf1);
         free (buf2);
         free (buf3);
         free (buf4);
-    } else {
-        *err = -adios_errno;
     }
+    *err = adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -592,20 +593,21 @@ void FC_FUNC_(adios_select_method, ADIOS_SELECT_METHOD)
     char * buf1 = 0;
     char * buf2 = 0;
     char * buf3 = 0;
+
+    adios_errno = err_no_error;
     buf1 = futils_fstr_to_cstr (method, method_size);
     buf2 = futils_fstr_to_cstr (parameters, parameters_size);
     buf3 = futils_fstr_to_cstr (base_path, base_path_size);
 
     if (buf1 != 0 && buf2 != 0 && buf3 != 0) {
         struct adios_group_struct * g = (struct adios_group_struct *) (* group);
-        *err = adios_common_select_method (0, buf1, buf2, g->name, buf3, 0);
+        adios_common_select_method (0, buf1, buf2, g->name, buf3, 0);
 
         free (buf1);
         free (buf2);
         free (buf3);
-    } else {
-        *err = -adios_errno;
     }
+    *err = adios_errno;
 }
 
 
diff --git a/src/core/adiosf_read.c b/src/core/adiosf_read.c
index 0d414ac..367ada3 100644
--- a/src/core/adiosf_read.c
+++ b/src/core/adiosf_read.c
@@ -349,7 +349,7 @@ void FC_FUNC_(adios_schedule_read, ADIOS_SCHEDULE_READ)
     int i;
     varstr = futils_fstr_to_cstr(varname, varname_len);
     if (varstr != NULL) {
-        *err = common_read_schedule_read (afp, sel, varstr, *from_step, *nsteps, data);
+        *err = common_read_schedule_read (afp, sel, varstr, *from_step, *nsteps, NULL /* NCSU ALACRITY-ADIOS */, data);
         free(varstr);
     } else {
         *err = adios_errno;
diff --git a/src/core/adiosf_read_mod.f90 b/src/core/adiosf_read_mod.f90
index 763f0cb..563671b 100644
--- a/src/core/adiosf_read_mod.f90
+++ b/src/core/adiosf_read_mod.f90
@@ -1,20 +1,20 @@
-!  
+!
 !  ADIOS is freely available under the terms of the BSD license described
 !  in the COPYING file in the top level directory of this source distribution.
 !
 !  Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
 !
 
-! 
-! Read Fortran 90 API for ADIOS BP format files 
-!    
+!
+! Read Fortran 90 API for ADIOS BP format files
+!
 ! Use this module in your source code to ensure that
 ! you are calling the adios_* reading functions with
 ! the correct arguments
 !
 module adios_read_mod
 
-    use adios_defs_mod 
+    use adios_defs_mod
 
     interface
 
@@ -47,7 +47,7 @@ module adios_read_mod
             real,           intent(in)  :: timeout_sec
             integer,        intent(out) :: err
         end subroutine
-        
+
         subroutine adios_read_open_file (fp, fname, method, comm, err)
             implicit none
             integer*8,      intent(out) :: fp
@@ -64,13 +64,13 @@ module adios_read_mod
             real,           intent(in)  :: timeout_sec
             integer,        intent(out) :: err
         end subroutine
-        
+
         subroutine adios_release_step (fp, err)
             implicit none
             integer*8,      intent(in)  :: fp
             integer,        intent(out) :: err
         end subroutine
-        
+
         subroutine adios_reset_dimension_order (fp, flag)
             implicit none
             integer*8,      intent(in)  :: fp
@@ -132,8 +132,8 @@ module adios_read_mod
             implicit none
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: varname
-            integer,        intent(out) :: vartype 
-            integer,        intent(out) :: nsteps 
+            integer,        intent(out) :: vartype
+            integer,        intent(out) :: nsteps
             integer,        intent(out) :: ndim
             integer*8, dimension(*), intent(out) :: dims
             integer,        intent(out) :: err
@@ -143,9 +143,9 @@ module adios_read_mod
             implicit none
             integer*8,      intent(in) :: fp
             character(*),   intent(in)  :: attrname
-            integer,        intent(out) :: attrtype 
-            integer,        intent(out) :: attrsize 
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: attrtype
+            integer,        intent(out) :: attrsize
+            integer,        intent(out) :: err
         end subroutine
 
         subroutine adios_perform_reads (fp, err)
@@ -190,7 +190,7 @@ module adios_read_mod
     end interface
 
     !
-    ! ADIOS_GET_SCALAR generic interface 
+    ! ADIOS_GET_SCALAR generic interface
     !
     ! Usage: call adios_get_scalar (gp, varname, data, err)
     !
@@ -316,7 +316,7 @@ module adios_read_mod
     end interface
 
     !
-    ! ADIOS_GET_ATTR generic interface 
+    ! ADIOS_GET_ATTR generic interface
     !
     ! Usage: call adios_get_attr (fp, varname, attr, err)
     !
@@ -328,7 +328,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             integer*1,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! INTEGER*2
@@ -337,7 +337,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             integer*2,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! INTEGER*4
@@ -346,7 +346,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             integer*4,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! INTEGER*8
@@ -355,7 +355,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             integer*8,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! REAL*4
@@ -364,7 +364,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             real*4,         intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! REAL*8
@@ -373,7 +373,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             real*8,         intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! COMPLEX*8
@@ -382,7 +382,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             complex,        intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! COMPLEX*16
@@ -391,7 +391,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             complex*16,     intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! CHARACTER(*)
@@ -400,7 +400,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             character(*),   intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*1
@@ -409,7 +409,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             logical*1,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*2
@@ -418,7 +418,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             logical*2,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*4
@@ -427,7 +427,7 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             logical*4,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*8
@@ -436,13 +436,13 @@ module adios_read_mod
             integer*8,      intent(in)  :: fp
             character(*),   intent(in)  :: attrname
             logical*8,      intent(out) :: attr
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
     end interface
 
     !
-    ! ADIOS_SCHEDULE_READ generic interface 
+    ! ADIOS_SCHEDULE_READ generic interface
     !
     ! Usage: call adios_schedule_read (fp, sel, varname, from_step, nsteps,  data, err)
     !
@@ -542,7 +542,7 @@ module adios_read_mod
     end interface
 
     !
-    ! adios_GET_STATISTICS generic interface 
+    ! adios_GET_STATISTICS generic interface
     !
     ! Usage: call adios_get_statistics (fp, varname, value, gmin, gmax, gavg, gstd_dev, mins, maxs, avgs, std_devs, err)
     !
@@ -562,7 +562,7 @@ module adios_read_mod
             integer*1, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,dimension(*), intent(out) :: err 
+            integer,dimension(*), intent(out) :: err
         end subroutine
 
         ! INTEGER*2 arrays
@@ -579,7 +579,7 @@ module adios_read_mod
             integer*2, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! INTEGER*4 arrays
@@ -596,7 +596,7 @@ module adios_read_mod
             integer*1, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! INTEGER*8 arrays
@@ -613,7 +613,7 @@ module adios_read_mod
             integer*8, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! REAL*4 arrays
@@ -630,7 +630,7 @@ module adios_read_mod
             real*4, dimension(*), intent(out) :: maxs
             real*8,         intent(out) :: gavg
             real*8,         intent(out) :: gstd_dev
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! REAL*8 arrays
@@ -647,7 +647,7 @@ module adios_read_mod
             real*8, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! COMPLEX*8 arrays
@@ -664,7 +664,7 @@ module adios_read_mod
             complex, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! COMPLEX*16 arrays
@@ -681,7 +681,7 @@ module adios_read_mod
             complex*16, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! CHARACTER(*) arrays
@@ -698,7 +698,7 @@ module adios_read_mod
             character(*), dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOFICAL*1 arrays
@@ -715,7 +715,7 @@ module adios_read_mod
             logical*1, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*2 arrays
@@ -732,7 +732,7 @@ module adios_read_mod
             logical*2, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*4 arrays
@@ -749,7 +749,7 @@ module adios_read_mod
             logical*4, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
         ! LOGICAL*8 arrays
@@ -766,13 +766,13 @@ module adios_read_mod
             logical*8, dimension(*), intent(out) :: maxs
             real*8, dimension(*), intent(out) :: avgs
             real*8, dimension(*), intent(out) :: std_devs
-            integer,        intent(out) :: err 
+            integer,        intent(out) :: err
         end subroutine
 
     end interface
 
 
-    contains 
+    contains
 
     !
     ! ADIOS_SCHEDULE_READ procedures
@@ -792,7 +792,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -806,7 +806,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -820,7 +820,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -834,7 +834,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -848,7 +848,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,         intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -862,7 +862,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,        intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -876,7 +876,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,        intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -890,7 +890,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,     intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -904,7 +904,7 @@ module adios_read_mod
         !    integer,        intent(in)  :: from_step
         !    integer,        intent(in)  :: nsteps
         !    character(*),   intent(out) :: data
-        !    integer,        intent(in)  :: err 
+        !    integer,        intent(in)  :: err
         !
         !    call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         !end subroutine
@@ -918,7 +918,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -932,7 +932,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -946,7 +946,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -960,7 +960,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8,      intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -978,7 +978,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -992,7 +992,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1006,7 +1006,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1020,7 +1020,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1034,7 +1034,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1048,7 +1048,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1062,7 +1062,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1076,7 +1076,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1090,7 +1090,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),   intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1104,7 +1104,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1118,7 +1118,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1132,7 +1132,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1146,7 +1146,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1164,7 +1164,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1178,7 +1178,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1192,7 +1192,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1206,7 +1206,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1220,7 +1220,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1234,7 +1234,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1248,7 +1248,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1262,7 +1262,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1276,7 +1276,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1290,7 +1290,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1304,7 +1304,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1318,7 +1318,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1332,7 +1332,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1350,7 +1350,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1364,7 +1364,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1378,7 +1378,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1392,7 +1392,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1406,7 +1406,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1420,7 +1420,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1434,7 +1434,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1448,7 +1448,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1462,7 +1462,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),dimension(:,:),  intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1476,7 +1476,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1490,7 +1490,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1504,7 +1504,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1518,7 +1518,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1536,7 +1536,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1550,7 +1550,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1564,7 +1564,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1578,7 +1578,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1592,7 +1592,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1606,7 +1606,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1620,7 +1620,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1634,7 +1634,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1648,7 +1648,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),dimension(:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1662,7 +1662,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1676,7 +1676,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1690,7 +1690,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1704,7 +1704,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1722,7 +1722,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1736,7 +1736,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1750,7 +1750,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1764,7 +1764,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1778,7 +1778,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1792,7 +1792,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1806,7 +1806,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1820,7 +1820,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1834,7 +1834,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),dimension(:,:,:,:),intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1848,7 +1848,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1862,7 +1862,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1876,7 +1876,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1890,7 +1890,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1908,7 +1908,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*1, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1922,7 +1922,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*2, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1936,7 +1936,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*4, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1950,7 +1950,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             integer*8, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1964,7 +1964,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*4,    dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1978,7 +1978,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             real*8,   dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -1992,7 +1992,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex,   dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2006,7 +2006,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             complex*16,dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2020,7 +2020,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             character(*),dimension(:,:,:,:,:),intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2034,7 +2034,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*1, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2048,7 +2048,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*2, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2062,7 +2062,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*4, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
@@ -2076,7 +2076,7 @@ module adios_read_mod
             integer,        intent(in)  :: from_step
             integer,        intent(in)  :: nsteps
             logical*8, dimension(:,:,:,:,:,:), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_schedule_read_f2c(fp, sel, varname, from_step, nsteps, data, err)
         end subroutine
diff --git a/src/core/adiosf_read_v1.c b/src/core/adiosf_read_v1.c
index 77b767d..2e312fd 100644
--- a/src/core/adiosf_read_v1.c
+++ b/src/core/adiosf_read_v1.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -36,7 +36,7 @@ extern int adios_errno;
 
 // Re-define the ADIOS_GROUP struct here, because we need to emulate the group view behavior
 // of the old read API
-typedef struct { 
+typedef struct {
     uint64_t gh;                /* Group handler                                           */
     int      grpid;             /* group index (0..ADIOS_FILE.groups_count-1)              */
     int      vars_count;        /* Number of variables in this adios group                 */
@@ -152,7 +152,7 @@ void FC_FUNC_(adios_fclose, ADIOS_FCLOSE) (int64_t * fp, int * err)
         fprintf(stderr, "Error: %s\n", adios_get_last_errmsg());
 }
 
-void FC_FUNC_(adios_inq_file, ADIOS_INQ_FILE) 
+void FC_FUNC_(adios_inq_file, ADIOS_INQ_FILE)
         (int64_t * fp,
          int     * vars_count,
          int     * attrs_count,
@@ -185,12 +185,12 @@ void FC_FUNC_(adios_inq_file, ADIOS_INQ_FILE)
     }
 }
 
-void FC_FUNC_(adios_gopen, ADIOS_GOPEN) 
+void FC_FUNC_(adios_gopen, ADIOS_GOPEN)
         (int64_t * fp,
          int64_t * gp,
          char    * grpname,
-         int     * vars_count, 
-         int     * attrs_count, 
+         int     * vars_count,
+         int     * attrs_count,
          int     * err,
          int       grpname_len)
 {
@@ -202,7 +202,7 @@ void FC_FUNC_(adios_gopen, ADIOS_GOPEN)
     namestr = futils_fstr_to_cstr(grpname, grpname_len);
     if (namestr != NULL) {
 
-        // get group list and find the group name 
+        // get group list and find the group name
         ngroups = common_read_get_grouplist(afp, &group_namelist);
         for (grpid=0;grpid<(ngroups);grpid++) {
             if (!strcmp(group_namelist[grpid], namestr))
@@ -241,24 +241,24 @@ void FC_FUNC_(adios_gclose, ADIOS_GCLOSE) (int64_t * gp, int * err)
 }
 
 void FC_FUNC_(adios_inq_group, ADIOS_INQ_GROUP)
-        (int64_t * gp, 
-         void    * vnamelist, 
+        (int64_t * gp,
+         void    * vnamelist,
          void    * anamelist,
          int     * timestep,
          int     * lasttimestep,
-         int     * err, 
-         int       vnamelist_len, 
-         int       anamelist_len) 
+         int     * err,
+         int       vnamelist_len,
+         int       anamelist_len)
 {
     ADIOS_FILE *afp = (ADIOS_FILE *) *gp;
     int i;
     if (afp != NULL) {
         for (i=0;i<afp->nvars;i++) {
             futils_cstr_to_fstr( afp->var_namelist[i], (char *)vnamelist+i*vnamelist_len, vnamelist_len);
-        } 
+        }
         for (i=0;i<afp->nattrs;i++) {
             futils_cstr_to_fstr( afp->attr_namelist[i], (char *)anamelist+i*anamelist_len, anamelist_len);
-        } 
+        }
         *timestep = 1;
         *lasttimestep = afp->last_step;
         *err = 0;
@@ -267,8 +267,8 @@ void FC_FUNC_(adios_inq_group, ADIOS_INQ_GROUP)
     }
 }
 
-void FC_FUNC_(adios_inq_var, ADIOS_INQ_VAR) 
-        (int64_t  * gp, 
+void FC_FUNC_(adios_inq_var, ADIOS_INQ_VAR)
+        (int64_t  * gp,
          char     * varname,
          int      * type,
          int      * ndim,
@@ -289,7 +289,7 @@ void FC_FUNC_(adios_inq_var, ADIOS_INQ_VAR)
     if (vi != NULL) {
         *type = vi->type;
 
-        /* TIME dimension should be emulated here !!! */  
+        /* TIME dimension should be emulated here !!! */
         int tidx;
         int timed = common_read_is_var_timed(afp, vi->varid);
         if (timed) {
@@ -318,7 +318,7 @@ void FC_FUNC_(adios_inq_var, ADIOS_INQ_VAR)
         fprintf(stderr, "Error: %s\n", adios_get_last_errmsg());
 }
 
-void FC_FUNC_(adios_read_var, ADIOS_READ_VAR) 
+void FC_FUNC_(adios_read_var, ADIOS_READ_VAR)
         (int64_t  * gp,
          char     * varname,
          uint64_t * start,
@@ -340,7 +340,7 @@ void FC_FUNC_(adios_read_var, ADIOS_READ_VAR)
         }
         int tidx;
         int from_step = 0, nsteps = 1;
-        /* TIME dimension should be emulated here !!! */  
+        /* TIME dimension should be emulated here !!! */
         int timed = common_read_is_var_timed(afp, vi->varid);
         if (timed) {
             from_step = (int) start[vi->ndim];
@@ -352,13 +352,13 @@ void FC_FUNC_(adios_read_var, ADIOS_READ_VAR)
 
         ADIOS_SELECTION * sel = common_read_selection_boundingbox (vi->ndim, start, count);
 
-        common_read_schedule_read (afp, sel, varstr, from_step, nsteps, data);
+        common_read_schedule_read (afp, sel, varstr, from_step, nsteps, NULL /* NCSU ALACRITY-ADIOS */, data);
         int ret = common_read_perform_reads (afp, 1);
         if (ret == err_no_error) {
             /* should return the number of bytes read */
             *read_bytes = (int64_t) common_read_type_size (vi->type, data);
             *read_bytes *= nsteps;
-            for (i=0; i<vi->ndim; i++) 
+            for (i=0; i<vi->ndim; i++)
                 *read_bytes *= (int64_t) count[i];
         } else {
             *read_bytes = (int64_t) adios_errno;
@@ -396,7 +396,7 @@ void FC_FUNC_(adios_read_local_var, ADIOS_READ_LOCAL_VAR)
            Otherwise we return an out of bound error, although it probably should
            be a "within bounds" error
 
-           Version 1: 
+           Version 1:
            - start/count has no time dimension for the local read
            - idx is for all timesteps, 0...timesteps*blocks
            Version 2:
@@ -441,7 +441,7 @@ void FC_FUNC_(adios_read_local_var, ADIOS_READ_LOCAL_VAR)
 
         ADIOS_SELECTION * sel = common_read_selection_writeblock (idx_in_step);
 
-        common_read_schedule_read_byid (afp, sel, vi->varid, step, 1, data);
+        common_read_schedule_read_byid (afp, sel, vi->varid, step, 1, NULL /* NCSU ALACRITY-ADIOS */, data);
         int ret = common_read_perform_reads (afp, 1);
         if (ret == err_no_error) {
             /* should return the number of bytes read */
@@ -480,7 +480,7 @@ void FC_FUNC_(adios_read_var_logical2, ADIOS_READ_VAR_LOGICAL2) (int64_t * gp, c
 void FC_FUNC_(adios_read_var_logical4, ADIOS_READ_VAR_LOGICAL4) (int64_t * gp, char * varname, uint64_t * start, uint64_t * count, void * data, int64_t * read_bytes, int varname_len) { FC_FUNC_(adios_read_var, ADIOS_READ_VAR) (gp, varname, start, count, data, read_bytes, varname_len); }
 void FC_FUNC_(adios_read_var_logical8, ADIOS_READ_VAR_LOGICAL8) (int64_t * gp, char * varname, uint64_t * start, uint64_t * count, void * data, int64_t * read_bytes, int varname_len) { FC_FUNC_(adios_read_var, ADIOS_READ_VAR) (gp, varname, start, count, data, read_bytes, varname_len); }
 
-void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS) 
+void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS)
         (int64_t * gp,
          char    * varname,
          void    * value,
@@ -508,28 +508,28 @@ void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS)
     if (vi != NULL) {
         size = bp_get_type_size(vi->type, vi->value);
         // get statistics information per each step
-        common_read_inq_var_stat (afp, vi, 1, 0); 
+        common_read_inq_var_stat (afp, vi, 1, 0);
         if (vi->type == adios_string) size++;
         if (vi->value) memcpy(value, vi->value, size);
 
         if (vi->statistics) {
             if (vi->type == adios_complex || vi->type == adios_double_complex) {
-                /* For complex numbers, the statistics in ADIOS_VARINFO, like 
-                   gmin, gavg, std_devs etc, are of base type double. They also 
-                   have an additional dimension that stores the statistics for 
-                   the magnitude, the real part, and the imaginary part of the 
-                   complex number, individually. For example, gmin[0] holds the 
-                   overall minimum value of the magnitude of the complex numbers. 
-                   gmin[1] and gmin [2] contain the global minimums for the real 
-                   and the imaginary parts, respectively. 
+                /* For complex numbers, the statistics in ADIOS_VARINFO, like
+                   gmin, gavg, std_devs etc, are of base type double. They also
+                   have an additional dimension that stores the statistics for
+                   the magnitude, the real part, and the imaginary part of the
+                   complex number, individually. For example, gmin[0] holds the
+                   overall minimum value of the magnitude of the complex numbers.
+                   gmin[1] and gmin [2] contain the global minimums for the real
+                   and the imaginary parts, respectively.
                  */
-                if (vi->statistics->min) 
+                if (vi->statistics->min)
                     memcpy((char *) gmin, (char *) vi->statistics->min, 3*size);
-                if (vi->statistics->max) 
+                if (vi->statistics->max)
                     memcpy(((char *) gmax), (char *) vi->statistics->max, 3*size);
-                if (vi->statistics->avg) 
+                if (vi->statistics->avg)
                     memcpy(gavg, vi->statistics->avg, 3*sizeof(double));
-                if (vi->statistics->std_dev) 
+                if (vi->statistics->std_dev)
                     memcpy(gstd_dev, vi->statistics->std_dev, 3*sizeof(double));
 
                 /* FIXME: I do not know if mins is **void and mins[i] is a void * allocated
@@ -557,23 +557,23 @@ void FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS)
                 }
 
             } else {
-                if (vi->statistics->min) 
+                if (vi->statistics->min)
                     memcpy((char *) gmin, (char *) vi->statistics->min, size);
-                if (vi->statistics->max) 
+                if (vi->statistics->max)
                     memcpy((char *) gmax, (char *) vi->statistics->max, size);
-                if (vi->statistics->avg) 
+                if (vi->statistics->avg)
                     memcpy(gavg, vi->statistics->avg, sizeof(double));
-                if (vi->statistics->std_dev) 
+                if (vi->statistics->std_dev)
                     memcpy(gstd_dev, vi->statistics->std_dev, sizeof(double));
 
                 if (vi->statistics->steps) {
-                    if (vi->statistics->steps->mins) 
+                    if (vi->statistics->steps->mins)
                         memcpy((char *) mins, (char *) vi->statistics->steps->mins, vi->nsteps * size);
-                    if (vi->statistics->steps->maxs) 
+                    if (vi->statistics->steps->maxs)
                         memcpy((char *) maxs, (char *) vi->statistics->steps->maxs, vi->nsteps * size);
-                    if (vi->statistics->steps->avgs) 
+                    if (vi->statistics->steps->avgs)
                         memcpy(avgs, vi->statistics->steps->avgs, vi->nsteps * sizeof(double));
-                    if (vi->statistics->steps->std_devs) 
+                    if (vi->statistics->steps->std_devs)
                         memcpy(std_devs, vi->statistics->steps->std_devs, vi->nsteps * sizeof(double));
                 }
             }
@@ -600,7 +600,7 @@ void FC_FUNC_(adios_get_statistics_logical2, ADIOS_GET_STATISTICS_LOGICAL2) (int
 void FC_FUNC_(adios_get_statistics_logical4, ADIOS_GET_STATISTICS_LOGICAL4) (int64_t * gp, char * varname, void * value, void * gmin, void * gmax, void * gavg, void * gstd_dev, void * mins, void * maxs, void * avgs, void * std_devs, int * err, int varname_len) { FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS) (gp, varname, value, gmin, gmax, gavg, gstd_dev, mins, maxs, avgs, std_devs, err, varname_len); }
 void FC_FUNC_(adios_get_statistics_logical8, ADIOS_GET_STATISTICS_LOGICAL8) (int64_t * gp, char * varname, void * value, void * gmin, void * gmax, void * gavg, void * gstd_dev, void * mins, void * maxs, void * avgs, void * std_devs, int * err, int varname_len) { FC_FUNC_(adios_get_statistics, ADIOS_GET_STATISTICS) (gp, varname, value, gmin, gmax, gavg, gstd_dev, mins, maxs, avgs, std_devs, err, varname_len); }
 
-void FC_FUNC_(adios_get_attr, ADIOS_GET_ATTR) 
+void FC_FUNC_(adios_get_attr, ADIOS_GET_ATTR)
         (int64_t * gp,
          char    * attrname,
          void    * attr,
@@ -627,7 +627,7 @@ void FC_FUNC_(adios_get_attr, ADIOS_GET_ATTR)
         fprintf(stderr, "Error: %s\n", adios_get_last_errmsg());
 }
 
-void FC_FUNC_(adios_inq_attr, ADIOS_INQ_ATTR) 
+void FC_FUNC_(adios_inq_attr, ADIOS_INQ_ATTR)
         (int64_t * gp,
          char    * attrname,
          int     * type,
diff --git a/src/core/adiosf_write_mod.f90 b/src/core/adiosf_write_mod.f90
index 911f017..0897694 100644
--- a/src/core/adiosf_write_mod.f90
+++ b/src/core/adiosf_write_mod.f90
@@ -1,13 +1,13 @@
-!  
+!
 !  ADIOS is freely available under the terms of the BSD license described
 !  in the COPYING file in the top level directory of this source distribution.
 !
 !  Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
 !
 
-! 
-! Fortran 90 API for writing ADIOS files 
-!    
+!
+! Fortran 90 API for writing ADIOS files
+!
 ! Use this module in your source code to ensure that
 ! you are calling the adios_* writing functions with
 ! the correct arguments
@@ -46,7 +46,7 @@ module adios_write_mod
             integer,        intent(in)  :: comm
             integer,        intent(out) :: err
         end subroutine
-        
+
         subroutine adios_group_size (fd, data_size, total_size, err)
             implicit none
             integer*8,      intent(out) :: fd
@@ -54,7 +54,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: total_size
             integer,        intent(out) :: err
         end subroutine
-        
+
         subroutine adios_set_path (fd, path, err)
             implicit none
             integer*8,      intent(in)  :: fd
@@ -110,7 +110,7 @@ module adios_write_mod
             integer,        intent(out) :: err
         end subroutine
 
-        subroutine adios_define_var (group_id, varname, path, vartype, dimensions, global_dimensions, local_offsets, id) 
+        subroutine adios_define_var (group_id, varname, path, vartype, dimensions, global_dimensions, local_offsets, id)
             implicit none
             integer*8,      intent(in)  :: group_id
             character(*),   intent(in)  :: varname
@@ -142,7 +142,7 @@ module adios_write_mod
             integer,        intent(out) :: err
         end subroutine
 
-        
+
         subroutine adios_allocate_buffer (sizeMB, err)
             implicit none
             integer,        intent(in)  :: sizeMB
@@ -154,7 +154,7 @@ module adios_write_mod
 
     !
     !
-    ! ADIOS_WRITE generic interface 
+    ! ADIOS_WRITE generic interface
     !
     ! Usage: call adios_write (fd, varname, data, err)
     !
@@ -256,7 +256,7 @@ module adios_write_mod
 
     !
     !
-    ! ADIOS_WRITE_BYID generic interface 
+    ! ADIOS_WRITE_BYID generic interface
     !
     ! Usage: call adios_write_byid (fd, varid, data, err)
     !
@@ -358,7 +358,7 @@ module adios_write_mod
 
     !
     !
-    ! ADIOS_READ generic interface 
+    ! ADIOS_READ generic interface
     !
     ! Usage: call adios_read
     !
@@ -456,13 +456,18 @@ module adios_write_mod
         module procedure adios_read_logical4_d6
         module procedure adios_read_logical8_d6
     end interface
-
-
     contains
 
     !
     !
-    ! ADIOS_WRITE generic interface 
+    ! ADIOS_WRITE generic interface
+    !
+    ! Usage: call adios_write (fd, varname, data, err)
+    !
+    !
+        !
+    !
+    ! ADIOS_WRITE generic interface
     !
     ! Usage: call adios_write (fd, varname, data, err)
     !
@@ -477,7 +482,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -488,7 +493,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -499,7 +504,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4,      intent(in) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -510,7 +515,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -521,7 +526,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,         intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -532,7 +537,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,         intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -543,7 +548,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,        intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -554,7 +559,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,     intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -565,7 +570,7 @@ module adios_write_mod
         !    integer*8,      intent(in)  :: fd
         !    character(*),   intent(in)  :: varname
         !    character(*),   intent(inout) :: data
-        !    integer,        intent(in)  :: err 
+        !    integer,        intent(in)  :: err
         !
         !    call adios_write_f2c (fd, varname, data, err)
         !end subroutine
@@ -576,7 +581,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -587,7 +592,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -598,7 +603,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -609,7 +614,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -625,7 +630,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -636,7 +641,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -647,7 +652,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -658,7 +663,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -669,7 +674,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -680,7 +685,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -691,7 +696,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -702,7 +707,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -713,7 +718,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),   intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -724,7 +729,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -735,7 +740,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -746,7 +751,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -757,7 +762,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -772,7 +777,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -783,7 +788,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -794,7 +799,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -805,7 +810,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -816,7 +821,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -827,7 +832,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -838,7 +843,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -849,7 +854,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -860,7 +865,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -871,7 +876,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -882,7 +887,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -893,7 +898,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -904,7 +909,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -919,7 +924,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -930,7 +935,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -941,7 +946,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -952,7 +957,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -963,7 +968,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -974,7 +979,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -985,7 +990,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -996,7 +1001,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1007,7 +1012,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:),  intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1018,7 +1023,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1029,7 +1034,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1040,7 +1045,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1051,7 +1056,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1066,7 +1071,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1077,7 +1082,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1088,7 +1093,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1099,7 +1104,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1110,7 +1115,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1121,7 +1126,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1132,7 +1137,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1143,7 +1148,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1154,7 +1159,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1165,7 +1170,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1176,7 +1181,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1187,7 +1192,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1198,7 +1203,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1213,7 +1218,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1224,7 +1229,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1235,7 +1240,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1246,7 +1251,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1257,7 +1262,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1268,7 +1273,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1279,7 +1284,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1290,7 +1295,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1301,7 +1306,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:,:),intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1312,7 +1317,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1323,7 +1328,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1334,7 +1339,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1345,7 +1350,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1360,7 +1365,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1371,7 +1376,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1382,7 +1387,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1393,7 +1398,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1404,7 +1409,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1415,7 +1420,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1426,7 +1431,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1437,7 +1442,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1448,7 +1453,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:,:,:),intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1459,7 +1464,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1470,7 +1475,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1481,7 +1486,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1492,7 +1497,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_f2c (fd, varname, data, err)
         end subroutine
@@ -1502,7 +1507,7 @@ module adios_write_mod
 
     !
     !
-    ! ADIOS_WRITE_BYID generic interface 
+    ! ADIOS_WRITE_BYID generic interface
     !
     ! Usage: call adios_write_byid (fd, varid, data, err)
     !
@@ -1517,7 +1522,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1528,7 +1533,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1539,7 +1544,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4,      intent(in) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1550,7 +1555,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1561,7 +1566,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,         intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1572,7 +1577,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,         intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1583,7 +1588,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,        intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1594,7 +1599,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,     intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1605,7 +1610,7 @@ module adios_write_mod
         !    integer*8,      intent(in)  :: fd
         !    integer*8,      intent(in)  :: varid
         !    character(*),   intent(inout) :: data
-        !    integer,        intent(in)  :: err 
+        !    integer,        intent(in)  :: err
         !
         !    call adios_write_byid_f2c (fd, varid, data, err)
         !end subroutine
@@ -1616,7 +1621,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1627,7 +1632,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1638,7 +1643,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1649,7 +1654,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8,      intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1665,7 +1670,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1676,7 +1681,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1687,7 +1692,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1698,7 +1703,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1709,7 +1714,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(*), intent(out) :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1720,7 +1725,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1731,7 +1736,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1742,7 +1747,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1753,7 +1758,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),   intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1764,7 +1769,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1775,7 +1780,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1786,7 +1791,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1797,7 +1802,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1812,7 +1817,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1823,7 +1828,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1834,7 +1839,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1845,7 +1850,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1856,7 +1861,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1867,7 +1872,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1878,7 +1883,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1889,7 +1894,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1900,7 +1905,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),dimension(*), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1911,7 +1916,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1922,7 +1927,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1933,7 +1938,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1944,7 +1949,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1959,7 +1964,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1970,7 +1975,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1981,7 +1986,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -1992,7 +1997,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2003,7 +2008,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2014,7 +2019,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2025,7 +2030,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2036,7 +2041,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2047,7 +2052,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),dimension(:,:),  intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2058,7 +2063,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2069,7 +2074,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2080,7 +2085,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2091,7 +2096,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2106,7 +2111,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2117,7 +2122,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2128,7 +2133,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2139,7 +2144,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2150,7 +2155,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2161,7 +2166,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2172,7 +2177,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2183,7 +2188,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2194,7 +2199,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),dimension(:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2205,7 +2210,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2216,7 +2221,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2227,7 +2232,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2238,7 +2243,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2253,7 +2258,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2264,7 +2269,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2275,7 +2280,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2286,7 +2291,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2297,7 +2302,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2308,7 +2313,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2319,7 +2324,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2330,7 +2335,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2341,7 +2346,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),dimension(:,:,:,:),intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2352,7 +2357,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2363,7 +2368,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2374,7 +2379,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2385,7 +2390,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2400,7 +2405,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*1, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2411,7 +2416,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*2, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2422,7 +2427,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*4, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2433,7 +2438,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             integer*8, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2444,7 +2449,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*4,    dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2455,7 +2460,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             real*8,   dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2466,7 +2471,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex,   dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2477,7 +2482,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             complex*16,dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2488,7 +2493,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             character(*),dimension(:,:,:,:,:),intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2499,7 +2504,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*1, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2510,7 +2515,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*2, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2521,7 +2526,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*4, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2532,7 +2537,7 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             integer*8,      intent(in)  :: varid
             logical*8, dimension(:,:,:,:,:,:), intent(in)  :: data
-            integer,        intent(in)  :: err 
+            integer,        intent(in)  :: err
 
             call adios_write_byid_f2c (fd, varid, data, err)
         end subroutine
@@ -2544,7 +2549,7 @@ module adios_write_mod
 
     !
     !
-    ! ADIOS_READ generic interface 
+    ! ADIOS_READ generic interface
     !
     ! Usage: call adios_read (fd, varname, buffer, buffer_size, err)
     !
@@ -2559,8 +2564,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2571,8 +2576,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2583,8 +2588,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2595,8 +2600,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2607,8 +2612,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,         intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2619,8 +2624,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,         intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2631,8 +2636,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,        intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2643,8 +2648,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,     intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2655,8 +2660,8 @@ module adios_write_mod
         !    integer*8,      intent(in)  :: fd
         !    character(*),   intent(in)  :: varname
         !    character(*),   intent(out) :: buffer
-        !    integer*8,      intent(in)  :: buffer_size 
-        !    integer,        intent(in)  :: err 
+        !    integer*8,      intent(in)  :: buffer_size
+        !    integer,        intent(in)  :: err
         !
         !    call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         !end subroutine
@@ -2667,8 +2672,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2679,8 +2684,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2691,8 +2696,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2703,8 +2708,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8,      intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2720,8 +2725,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2732,8 +2737,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2744,8 +2749,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2756,8 +2761,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2768,8 +2773,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2780,8 +2785,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2792,8 +2797,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2804,8 +2809,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2816,8 +2821,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),   intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2828,8 +2833,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2840,8 +2845,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2852,8 +2857,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2864,8 +2869,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2880,8 +2885,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2892,8 +2897,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2904,8 +2909,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2916,8 +2921,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2928,8 +2933,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2940,8 +2945,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2952,8 +2957,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2964,8 +2969,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2976,8 +2981,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(*), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -2988,8 +2993,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3000,8 +3005,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3012,8 +3017,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3024,8 +3029,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3040,8 +3045,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3052,8 +3057,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3064,8 +3069,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3076,8 +3081,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3088,8 +3093,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3100,8 +3105,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3112,8 +3117,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3124,8 +3129,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3136,8 +3141,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:),  intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3148,8 +3153,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3160,8 +3165,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3172,8 +3177,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3184,8 +3189,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3200,8 +3205,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3212,8 +3217,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3224,8 +3229,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3236,8 +3241,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3248,8 +3253,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3260,8 +3265,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3272,8 +3277,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3284,8 +3289,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3296,8 +3301,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3308,8 +3313,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3320,8 +3325,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3332,8 +3337,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3344,8 +3349,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3360,8 +3365,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3372,8 +3377,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3384,8 +3389,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3396,8 +3401,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3408,8 +3413,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3420,8 +3425,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3432,8 +3437,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3444,8 +3449,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3456,8 +3461,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:,:),intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3468,8 +3473,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3480,8 +3485,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3492,8 +3497,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3504,8 +3509,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3520,8 +3525,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*1, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3532,8 +3537,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*2, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3544,8 +3549,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*4, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3556,8 +3561,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             integer*8, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3568,8 +3573,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*4,    dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3580,8 +3585,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             real*8,   dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3592,8 +3597,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex,   dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3604,8 +3609,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             complex*16,dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3616,8 +3621,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             character(*),dimension(:,:,:,:,:),intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3628,8 +3633,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*1, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3640,8 +3645,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*2, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3652,8 +3657,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*4, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
@@ -3664,8 +3669,8 @@ module adios_write_mod
             integer*8,      intent(in)  :: fd
             character(*),   intent(in)  :: varname
             logical*8, dimension(:,:,:,:,:,:), intent(out) :: buffer
-            integer*8,      intent(in)  :: buffer_size 
-            integer,        intent(in)  :: err 
+            integer*8,      intent(in)  :: buffer_size
+            integer,        intent(in)  :: err
 
             call adios_read_f2c (fd, varname, buffer, buffer_size, err)
         end subroutine
diff --git a/src/core/bp_types.h b/src/core/bp_types.h
index 6b52973..e160d1f 100644
--- a/src/core/bp_types.h
+++ b/src/core/bp_types.h
@@ -28,19 +28,19 @@ struct bp_index_pg_struct_v1
 };
 
 struct bp_minifooter {
-	uint64_t time_steps;  /* = fh->tidx_stop - fh->tidx_start + 1 */
-	uint64_t pgs_count;
-	uint64_t pgs_length;
-	uint16_t vars_count;
-	uint64_t vars_length;
-	uint16_t attrs_count;
-	uint64_t attrs_length;
-	uint64_t pgs_index_offset;
-	uint64_t vars_index_offset;
-	uint64_t attrs_index_offset;
-	uint32_t version;
-	uint32_t change_endianness; // = enum ADIOS_FLAG, 0: unknown!, adios_flag_yes or adios_flag_no
-	uint64_t file_size;
+    uint64_t time_steps;  /* = fh->tidx_stop - fh->tidx_start + 1 */
+    uint64_t pgs_count;
+    uint64_t pgs_length;
+    uint16_t vars_count;
+    uint64_t vars_length;
+    uint16_t attrs_count;
+    uint64_t attrs_length;
+    uint64_t pgs_index_offset;
+    uint64_t vars_index_offset;
+    uint64_t attrs_index_offset;
+    uint32_t version;
+    uint32_t change_endianness; // = enum ADIOS_FLAG, 0: unknown!, adios_flag_yes or adios_flag_no
+    uint64_t file_size;
 } __attribute__((__packed__));
 
 struct BP_file_handle
@@ -61,6 +61,7 @@ typedef struct BP_FILE {
     struct bp_index_pg_struct_v1 * pgs_root;
     struct adios_index_var_struct_v1 * vars_root;
     struct adios_index_attribute_struct_v1 * attrs_root;
+    struct adios_index_var_struct_v1 ** vars_table; // To speed up vars_root lookup. Q. Liu, 12-2013.
     struct bp_minifooter mfooter; 
     struct BP_GROUP_VAR * gvar_h;
     struct BP_GROUP_ATTR * gattr_h;
@@ -80,34 +81,34 @@ typedef struct BP_PROC {
 } BP_PROC;
 
 struct BP_GROUP_VAR {
-	uint16_t group_count;
-	uint16_t group_id; 
-	char ** namelist;
-	uint32_t *** time_index; 
-	uint64_t * pg_offsets;
-	char ** var_namelist;
-	uint16_t * var_counts_per_group;
-	uint64_t ** var_offsets;
+    uint16_t group_count;
+    uint16_t group_id; 
+    char ** namelist;
+    uint32_t *** time_index; 
+    uint64_t * pg_offsets;
+    char ** var_namelist;
+    uint16_t * var_counts_per_group;
+    uint64_t ** var_offsets;
 };
 
 struct BP_GROUP_ATTR {
-        uint16_t group_count;
-        uint16_t group_id;
-        char ** namelist;
-        char ** attr_namelist;
-        uint16_t * attr_counts_per_group;
-        uint64_t ** attr_offsets;
+    uint16_t group_count;
+    uint16_t group_id;
+    char ** namelist;
+    char ** attr_namelist;
+    uint16_t * attr_counts_per_group;
+    uint64_t ** attr_offsets;
 };
 
 struct BP_GROUP {
-	uint16_t group_id;
-	uint16_t vars_offset;
-	uint16_t vars_count;
-        uint16_t attrs_offset;
-        uint16_t attrs_count;
-	struct BP_FILE * fh;
-	struct adios_index_var_struct_v1 * vars_root;  /* pointer into the list of BP_FILE.vars_root */
-        struct adios_index_attribute_struct_v1 * attrs_root;
+    uint16_t group_id;
+    uint16_t vars_offset;
+    uint16_t vars_count;
+    uint16_t attrs_offset;
+    uint16_t attrs_count;
+    struct BP_FILE * fh;
+    struct adios_index_var_struct_v1 * vars_root;  /* pointer into the list of BP_FILE.vars_root */
+    struct adios_index_attribute_struct_v1 * attrs_root;
 };
 
 #endif
diff --git a/src/core/bp_utils.c b/src/core/bp_utils.c
index 37e0ed1..4c250d9 100644
--- a/src/core/bp_utils.c
+++ b/src/core/bp_utils.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -11,6 +11,7 @@
 #include <stdarg.h>
 #include <sys/types.h>
 #include <string.h>
+#include <math.h>
 #include "public/adios.h"
 #include "public/adios_read.h"
 #include "public/adios_error.h"
@@ -21,6 +22,7 @@
 #define BYTE_ALIGN 8
 #define MINIFOOTER_SIZE 28
 
+#include "adios_transforms_common.h" // NCSU ALACRITY-ADIOS
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -52,7 +54,7 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b, struct adios
 
 void bp_alloc_aligned (struct adios_bp_buffer_struct_v1 * b, uint64_t size)
 {
-        
+
     b->allocated_buff_ptr =  malloc (size + BYTE_ALIGN - 1);
     if (!b->allocated_buff_ptr)
     {
@@ -89,7 +91,7 @@ void bp_realloc_aligned (struct adios_bp_buffer_struct_v1 * b
     b->length = size;
 }
 
-/* Return 0: if file is little endian, 1 if file is big endian 
+/* Return 0: if file is little endian, 1 if file is big endian
  * We know if it is different from the current system, so here
  * we determine the current endianness and report accordingly.
  */
@@ -146,12 +148,12 @@ int bp_read_open (const char * filename,
 
     MPI_Comm_rank (comm, &rank);
 
-    // variable definition 
+    // variable definition
     MPI_Offset  file_size;
 
     // open a file by the multiple processors within the same
     // communicator
-    err = MPI_File_open (comm, (char *) filename, MPI_MODE_RDONLY, 
+    err = MPI_File_open (comm, (char *) filename, MPI_MODE_RDONLY,
             (MPI_Info) MPI_INFO_NULL, &(fh->mpi_fh));
     if (err != MPI_SUCCESS) {
         char e [MPI_MAX_ERROR_STRING];
@@ -165,7 +167,7 @@ int bp_read_open (const char * filename,
     MPI_File_get_size (fh->mpi_fh, &file_size);
     fh->b->file_size = file_size;
     fh->mfooter.file_size = file_size;
-     
+
     return 0;
 }
 
@@ -285,6 +287,7 @@ thod returns.
     varinfo->sum_nblocks = v->characteristics_count;
     varinfo->statistics = 0;
     varinfo->blockinfo = 0;
+    varinfo->meshinfo = 0;
 
     return varinfo;
 }
@@ -409,6 +412,12 @@ int bp_close (BP_FILE * fh)
 
     fh->vars_root = 0;
 
+    if (fh->vars_table)
+    {
+        free (fh->vars_table);
+        fh->vars_table = 0;
+    }
+
     /* Free attributes structures */
     /* alloc in bp_utils.c bp_parse_attrs() */
     while (attrs_root) {
@@ -542,26 +551,67 @@ int bp_read_minifooter (struct BP_FILE * bp_struct)
     }
     MPI_File_seek (bp_struct->mpi_fh, (MPI_Offset) attrs_end, MPI_SEEK_SET);
     MPI_File_read (bp_struct->mpi_fh, b->buff, MINIFOOTER_SIZE, MPI_BYTE, &status);
-    
+
     /*memset (&mh->pgs_index_offset, 0, MINIFOOTER_SIZE);
     memcpy (&mh->pgs_index_offset, b->buff, MINIFOOTER_SIZE);*/
-    
+
     /* get version id. Needs the bp->offset be pointing to the last 4 bytes of the buffer,
        It also sets b->change_endianness */
     /* Note that b is not sent over to processes, only the minifooter and then b->buff (the footer) */
     b->offset = MINIFOOTER_SIZE - 4;
     adios_parse_version (b, &mh->version);
     mh->change_endianness = b->change_endianness;
-    b->offset = 0; // reset offset to beginning 
+
+    // validity check
+    if ((mh->version & ADIOS_VERSION_NUM_MASK) > 1) {
+        adios_error (err_file_open_error, "Invalid BP file detected. Version number > 1\n");
+        return 1;
+    }
+
+    b->offset = 0; // reset offset to beginning
 
     BUFREAD64(b, b->pg_index_offset)
     mh->pgs_index_offset = b->pg_index_offset;
+    // validity check  
+    if (b->pg_index_offset > b->file_size) {
+        adios_error (err_file_open_error,
+                "Invalid BP file detected. PG index offset (%lld) > file size (%lld)\n",
+                b->pg_index_offset, b->file_size);
+        return 1;
+    }
 
     BUFREAD64(b, b->vars_index_offset)
     mh->vars_index_offset = b->vars_index_offset;
+    // validity check  
+    if (b->vars_index_offset > b->file_size) {
+        adios_error (err_file_open_error,
+                "Invalid BP file detected. Variable index offset (%lld) > file size (%lld)\n",
+                b->vars_index_offset, b->file_size);
+        return 1;
+    }
+    if (b->vars_index_offset < b->pg_index_offset) {
+        adios_error (err_file_open_error,
+                "Invalid BP file detected. Variable index offset (%lld) < PG index offset (%lld)\n",
+                b->vars_index_offset, b->pg_index_offset);
+        return 1;
+    }
+
 
     BUFREAD64(b, b->attrs_index_offset)
     mh->attrs_index_offset = b->attrs_index_offset;
+    // validity check  
+    if (b->attrs_index_offset > b->file_size) {
+        adios_error (err_file_open_error,
+                "Invalid BP file detected. Attribute index offset (%lld) > file size (%lld)\n",
+                b->attrs_index_offset, b->file_size);
+        return 1;
+    }
+    if (b->attrs_index_offset < b->vars_index_offset) {
+        adios_error (err_file_open_error,
+                "Invalid BP file detected. Attribute index offset (%lld) < Variable index offset (%lld)\n",
+                b->attrs_index_offset, b->vars_index_offset);
+        return 1;
+    }
 
     b->end_of_pgs = b->pg_index_offset;
     b->pg_size = b->vars_index_offset - b->pg_index_offset;
@@ -582,7 +632,7 @@ int bp_read_minifooter (struct BP_FILE * bp_struct)
     MPI_Get_count (&status, MPI_BYTE, &r);
 
     // reset the pointer to the beginning of buffer
-    b->offset = 0;    
+    b->offset = 0;
     return 0;
 }
 
@@ -618,7 +668,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
 
     for (i = 0; i < mh->pgs_count; i++) {
         uint16_t length_of_group;
-        namelist[i] = 0;    
+        namelist[i] = 0;
         // validate remaining length
         BUFREAD16(b, length_of_group)
 
@@ -636,9 +686,9 @@ int bp_parse_pgs (struct BP_FILE * fh)
         (*root)->group_name [length_of_name] = '\0';
         memcpy ((*root)->group_name, b->buff + b->offset, length_of_name);
         b->offset += length_of_name;
-        
-        
-        if ( group_count == 0 ) { 
+
+
+        if ( group_count == 0 ) {
             namelist[group_count] = (char *) malloc (length_of_name + 1);
             strcpy (namelist[group_count], (*root)->group_name);
             ++group_count;
@@ -656,11 +706,11 @@ int bp_parse_pgs (struct BP_FILE * fh)
                 ++group_count;
                 grpidlist[i] = group_count - 1;
             }
-            else 
+            else
                 grpidlist[i] = j;
-                    
+
         }
-            
+
         BUFREAD8(b, fortran_flag)
         (*root)->adios_host_language_fortran =
             (fortran_flag == 'y' ? adios_flag_yes : adios_flag_no);
@@ -695,30 +745,30 @@ int bp_parse_pgs (struct BP_FILE * fh)
     }
     */
 
-    uint64_t * pg_offsets = 0; 
-    uint32_t * pg_pids = 0; 
+    uint64_t * pg_offsets = 0;
+    uint32_t * pg_pids = 0;
     uint32_t *** time_index = 0;
-    pg_offsets = (uint64_t *) 
+    pg_offsets = (uint64_t *)
         malloc (sizeof(uint64_t)*mh->pgs_count);
     pg_pids = (uint32_t *)
         malloc (sizeof(uint32_t)*mh->pgs_count);
     // time_index[0]: record which pg to start from per timestep per group
-    // time_index[1]: record the # of pgs per timesteps per group 
+    // time_index[1]: record the # of pgs per timesteps per group
     time_index = (uint32_t ***) malloc (sizeof(uint32_t **)*2);
 
     for (j=0;j<2;j++) {
-        time_index[j] = (uint32_t **) 
+        time_index[j] = (uint32_t **)
             malloc (sizeof(uint32_t*)*group_count);
         //printf ("### time_index[%d]=%x  group_count=%d  #pgs=%d #ts=%d\n", j, time_index[j], group_count, mh->pgs_count,  mh->time_steps);
         for (i=0;i<group_count;i++) {
             if (mh->pgs_count < mh->time_steps) {
-                /* FIXME: when can this happen? 
+                /* FIXME: when can this happen?
                    pgs = time_steps * number of writers, if there is 1 group only
                 */
-                time_index[j][i] = (uint32_t *) 
+                time_index[j][i] = (uint32_t *)
                     malloc (sizeof(uint32_t)*mh->pgs_count);
             } else {
-                time_index[j][i] = (uint32_t *) 
+                time_index[j][i] = (uint32_t *)
                     malloc (sizeof(uint32_t)*mh->time_steps);
             }
         }
@@ -745,11 +795,11 @@ int bp_parse_pgs (struct BP_FILE * fh)
                 time_index [1][grpid][time_id-tidx_start] = pg_time_count;
                 //printf ("#-- time_index[0][%d][%d]=%d\n", grpid, time_id-tidx_start, first_pg);
                 //printf ("#   time_index[1][%d][%d]=%d\n", grpid, time_id-tidx_start, pg_time_count);
-                grpid = grpidlist [i];    
+                grpid = grpidlist [i];
                 pg_time_count = 1;
                 first_pg = i; // new group starts from this pg
             }
-        }    
+        }
         else {
             /* change in timestep */
             if (group_count == 1) {
@@ -760,7 +810,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
                 //printf ("    time_index[1][%d][%d]=%d\n", grpid, time_id-tidx_start, pg_time_count);
                 first_pg = i;
             }
-            else {    
+            else {
                 if (grpid == grpidlist[i]) {
                     pg_time_count += 1;
                 } else {
@@ -768,7 +818,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
                     time_index [1][grpid][time_id-tidx_start] = pg_time_count;
                     //printf ("#.. time_index[0][%d][%d]=%d\n", grpid, time_id-tidx_start, first_pg);
                     //printf ("    time_index[1][%d][%d]=%d\n", grpid, time_id-tidx_start, pg_time_count);
-                    grpid = grpidlist [i];    
+                    grpid = grpidlist [i];
                     first_pg = i;
                 }
             }
@@ -786,7 +836,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
 
     /* Copy group_count strings from namelist and then free up namelist */
     char ** grp_namelist;
- 
+
     grp_namelist = (char **) malloc (sizeof(char*) * group_count);
     for (i=0;i<group_count;i++) {
         //grp_namelist[i] = (char *) malloc (strlen(namelist[i])+1);
@@ -794,7 +844,7 @@ int bp_parse_pgs (struct BP_FILE * fh)
         grp_namelist[i] = namelist[i];
     }
     free(namelist);
-    
+
     // here we need:
     //        grp_namelist [ngroup]
     //    time_index   [2][ngroup][nprocess]
@@ -805,8 +855,8 @@ int bp_parse_pgs (struct BP_FILE * fh)
     fh->gvar_h = (struct BP_GROUP_VAR *) malloc (sizeof(struct BP_GROUP_VAR));
     fh->gvar_h->group_count = group_count;
     fh->gvar_h->pg_offsets = pg_offsets;
-    fh->gvar_h->namelist = grp_namelist; 
-    fh->gvar_h->time_index = time_index; 
+    fh->gvar_h->namelist = grp_namelist;
+    fh->gvar_h->time_index = time_index;
     fh->gvar_h->group_id = 0;
     fh->gvar_h->var_offsets = 0;
     fh->gvar_h->var_namelist = 0;
@@ -820,8 +870,8 @@ int bp_parse_pgs (struct BP_FILE * fh)
     fh->gattr_h->attr_namelist = 0;
     fh->gattr_h->attr_counts_per_group = 0;
 
-    fh->tidx_start = tidx_start; 
-    fh->tidx_stop= tidx_stop; 
+    fh->tidx_start = tidx_start;
+    fh->tidx_stop= tidx_stop;
 
     free(grpidlist);
     return 0;
@@ -840,7 +890,7 @@ int bp_parse_attrs (struct BP_FILE * fh)
     int i;
 
     if (b->length - b->offset < VARS_MINIHEADER_SIZE) {
-        adios_error (err_invalid_buffer, 
+        adios_error (err_invalid_buffer,
                      "adios_parse_attrs_index_v1 requires a buffer "
                      "of at least %d bytes.  Only %llu were provided\n",
                      VARS_MINIHEADER_SIZE,
@@ -892,13 +942,13 @@ int bp_parse_attrs (struct BP_FILE * fh)
         (*root)->type = (enum ADIOS_DATATYPES) flag;
 
         type_size = bp_get_type_size ((*root)->type, "");
-        
+
         if (type_size == -1)
         {
             //type_size = 4;
             (*root)->type = adios_unknown;
         }
-        
+
 
         BUFREAD64(b, characteristics_sets_count)
         (*root)->characteristics_count = characteristics_sets_count;
@@ -962,9 +1012,9 @@ int bp_parse_attrs (struct BP_FILE * fh)
                set it here automatically: j div # of pgs per timestep
                Assumed that in old BP files, all pgs write each variable in each timestep.*/
             if ((*root)->characteristics [j].time_index == 0) {
-                (*root)->characteristics [j].time_index = 
+                (*root)->characteristics [j].time_index =
                      j / (mh->pgs_count / (fh->tidx_stop - fh->tidx_start + 1)) + 1;
-                /*printf("OldBP: attr %s time_index set to %d\n", 
+                /*printf("OldBP: attr %s time_index set to %d\n",
                         (*root)->attr_name,
                         (*root)->characteristics [j].time_index);*/
             }
@@ -979,6 +1029,7 @@ int bp_parse_attrs (struct BP_FILE * fh)
     uint64_t ** attr_offsets;
     char ** attr_namelist;
     int grpid, j,cnt;
+    int lenpath, lenname;
 
     attr_counts_per_group = (uint16_t *)
         malloc (sizeof(uint16_t) * fh->gattr_h->group_count);
@@ -999,7 +1050,8 @@ int bp_parse_attrs (struct BP_FILE * fh)
             }
         }
         // Full name of attributes: concatenate attr_path and attr_name
-        // Always have / in the beginning of the full name
+        /*
+        // Until 1.5 version: Always have / in the beginning of the full name
         if (strcmp ((*root)->attr_path,"/")) {
             attr_namelist [i] = (char *) malloc ( strlen((*root)->attr_name)
                     +strlen((*root)->attr_path) + 1 + 1
@@ -1012,7 +1064,27 @@ int bp_parse_attrs (struct BP_FILE * fh)
         }
         strcat(attr_namelist[i], "/");
         strcat(attr_namelist[i], (*root)->attr_name);
+        */
 
+        // From 1.6, leading / is not required anymore
+        lenpath = strlen((*root)->attr_path);
+        lenname  = strlen((*root)->attr_name);
+        if (lenpath > 0) {
+            attr_namelist [i] = (char *) malloc (lenname + lenpath + 1 + 1);
+                                                                  // extra / and ending \0
+            strcpy(attr_namelist[i], (*root)->attr_path);
+            if ((*root)->attr_path[lenpath-1] != '/') {
+                attr_namelist[i][lenpath] = '/';
+                lenpath++;
+            }
+            strcpy(&attr_namelist[i][lenpath], (*root)->attr_name);
+        }
+        else {
+            attr_namelist [i] = (char *) malloc (lenname+1); 
+            strcpy(attr_namelist[i], (*root)->attr_name);
+        }
+        //printf ("Attribute %d full path is [%s]\n", i, attr_namelist[i]);
+        
         attr_offsets[i] = (uint64_t *) malloc (
                 sizeof(uint64_t)*(*root)->characteristics_count);
         for (j=0;j < (*root)->characteristics_count;j++) {
@@ -1045,7 +1117,7 @@ int bp_parse_vars (struct BP_FILE * fh)
     struct adios_index_var_struct_v1 ** root;
 
     if (b->length - b->offset < VARS_MINIHEADER_SIZE) {
-        adios_error (err_invalid_buffer, 
+        adios_error (err_invalid_buffer,
                      "bp_parse_vars requires a buffer "
                      "of at least %d bytes.  Only %llu were provided\n",
                      VARS_MINIHEADER_SIZE,
@@ -1059,13 +1131,16 @@ int bp_parse_vars (struct BP_FILE * fh)
     BUFREAD16(b, mh->vars_count)
     BUFREAD64(b, mh->vars_length)
 
-    // validate remaining length    
+    // To speed find_var_byid(). Q. Liu, 11-2013.
+    fh->vars_table = (struct adios_index_var_struct_v1 **) malloc (mh->vars_count * 8);
+    // validate remaining length
     int i;
     for (i = 0; i < mh->vars_count; i++) {
         if (!*root) {
             *root = (struct adios_index_var_struct_v1 *)
                 malloc (sizeof (struct adios_index_var_struct_v1));
             (*root)->next = 0;
+            fh->vars_table[i] = *root;
         }
         uint8_t flag;
         uint32_t var_entry_length;
@@ -1102,7 +1177,7 @@ int bp_parse_vars (struct BP_FILE * fh)
         (*root)->characteristics_count = characteristics_sets_count;
         (*root)->characteristics_allocated = characteristics_sets_count;
 
-        // validate remaining length: offsets_count * 
+        // validate remaining length: offsets_count *
         // (8 + 2 * (size of type))
         (*root)->characteristics = malloc (characteristics_sets_count
             * sizeof (struct adios_index_characteristic_struct_v1)
@@ -1111,6 +1186,8 @@ int bp_parse_vars (struct BP_FILE * fh)
             ,  characteristics_sets_count
             * sizeof (struct adios_index_characteristic_struct_v1)
                );
+        // NOTE: Above memset assumes that all 0's is a valid initialization.
+        //       This is true, currently, but be careful in the future.
 
         uint64_t j;
         for (j = 0; j < characteristics_sets_count; j++)
@@ -1121,7 +1198,7 @@ int bp_parse_vars (struct BP_FILE * fh)
 
             BUFREAD8(b, characteristic_set_count)
             BUFREAD32(b, characteristic_set_length)
-                
+
             while (item < characteristic_set_count) {
                 bp_parse_characteristics (b, root, j);
                 item++;
@@ -1131,24 +1208,25 @@ int bp_parse_vars (struct BP_FILE * fh)
                set it here automatically: j div # of pgs per timestep
                Assumed that in old BP files, all pgs write each variable in each timestep.*/
             if ((*root)->characteristics [j].time_index == 0) {
-                (*root)->characteristics [j].time_index = 
+                (*root)->characteristics [j].time_index =
                      j / (mh->pgs_count / (fh->tidx_stop - fh->tidx_start + 1)) + 1;
                 /*printf("OldBP: var %s time_index set to %d\n",
-                        (*root)->var_name, 
+                        (*root)->var_name,
                         (*root)->characteristics [j].time_index);*/
             }
         }
         root = &(*root)->next;
     }
-    
+
     root = vars_root;
     uint16_t * var_counts_per_group;
     uint16_t *  var_gids;
     uint64_t ** var_offsets;
     char ** var_namelist;
     int grpid, j,cnt;
+    int lenpath,lenname;
 
-    var_counts_per_group = (uint16_t *) 
+    var_counts_per_group = (uint16_t *)
         malloc (sizeof(uint16_t)*fh->gvar_h->group_count);
     memset ( var_counts_per_group, 0, fh->gvar_h->group_count*sizeof(uint16_t));
     var_gids = (uint16_t *) malloc (sizeof(uint16_t )*mh->vars_count);
@@ -1166,6 +1244,8 @@ int bp_parse_vars (struct BP_FILE * fh)
                 break;
             }
         }
+        /* up until 1.5, name and /name was handled identical */
+        /*
         // Full name of variable: concatenate var_path and var_name
         // Always have / in the beginning of the full name
         if (strcmp ((*root)->var_path,"/")) {
@@ -1180,6 +1260,27 @@ int bp_parse_vars (struct BP_FILE * fh)
         }
         strcat(var_namelist[i], "/");
         strcat(var_namelist[i], (*root)->var_name);
+        */
+
+        /* From 1.6, relative and full path (starts with /) are handled separately in search */
+        // Full name of variable: concatenate var_path and var_name
+        lenpath = strlen((*root)->var_path);
+        lenname  = strlen((*root)->var_name);
+        if (lenpath > 0) {
+            var_namelist [i] = (char *) malloc (lenname + lenpath + 1 + 1);
+                                                                  // extra / and ending \0
+            strcpy(var_namelist[i], (*root)->var_path);
+            if ((*root)->var_path[lenpath-1] != '/') { // if path is not ending with /
+                var_namelist[i][lenpath] = '/';      // add the extra /
+                lenpath++;
+            }
+            strcpy(&var_namelist[i][lenpath], (*root)->var_name);
+        }
+        else {
+            var_namelist [i] = (char *) malloc (lenname+1); 
+            strcpy(var_namelist[i], (*root)->var_name);
+        }
+        //printf ("Variable %d full path is [%s]\n", i, var_namelist[i]);
 
         var_offsets[i] = (uint64_t *) malloc (
                 sizeof(uint64_t)*(*root)->characteristics_count);
@@ -1211,11 +1312,13 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
 
     BUFREAD8(b, flag)
     c = (enum ADIOS_CHARACTERISTICS) flag;
+    enum ADIOS_DATATYPES original_var_type = adios_transform_get_var_original_type_index (*root);
 
     switch (c) {
 
         case adios_characteristic_value:
-            (*root)->characteristics [j].value = bp_read_data_from_buffer(b, (*root)->type);
+        {
+            (*root)->characteristics [j].value = bp_read_data_from_buffer(b, original_var_type);
             if (!((*root)->characteristics [j].stats))
             {
                 (*root)->characteristics [j].stats = malloc (sizeof(struct adios_index_characteristics_stat_struct *));
@@ -1229,7 +1332,8 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
             (*root)->characteristics [j].bitmap |= (1 << adios_statistic_sum_square);
 
             uint8_t i, c, idx;
-            uint8_t count = adios_get_stat_set_count ((*root)->type);
+            // uint8_t count = adios_get_stat_set_count ((*root)->type);
+            uint8_t count = adios_get_stat_set_count (original_var_type);
             uint16_t characteristic_size;
 
             for (c = 0; c < count; c ++)
@@ -1245,7 +1349,7 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
                     {
                         characteristic_size = adios_get_stat_size(
                                 (*root)->characteristics [j].stats[c][idx].data
-                               ,(*root)->type
+                               ,original_var_type
                                ,(enum ADIOS_STAT)i
                                );
                         (*root)->characteristics [j].stats[c][idx].data = malloc (characteristic_size);
@@ -1256,7 +1360,7 @@ int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
                         }
 #define IS_MIN_MAX \
 if (idx == adios_statistic_min \
- || idx == adios_statistic_max) 
+ || idx == adios_statistic_max)
 
 #define IS_SUM \
 if (idx == adios_statistic_sum)
@@ -1286,7 +1390,8 @@ else IS_SUM2 \
 { \
 SET_DATA_3(t) \
 }
-                        switch ((*root)->type)
+                        // switch ((*root)->type)
+                        switch (original_var_type)
                         {
                             case adios_byte:
                                 SET_DATA(int8_t)
@@ -1325,7 +1430,7 @@ SET_DATA_3(t) \
                                 fr = * (float *) (*root)->characteristics [j].value;
                                 fi = * ((float *) (*root)->characteristics [j].value + 1);
 
-                                if (idx == adios_statistic_min || idx == adios_statistic_max) 
+                                if (idx == adios_statistic_min || idx == adios_statistic_max)
                                 {
                                     if (c == 0)
                                     {
@@ -1337,7 +1442,7 @@ SET_DATA_3(t) \
                                     }
                                     else if (c == 2)
                                     {
-                                        * (float *) data = sqrt (fr * fr + fi * fi); 
+                                        * (float *) data = sqrt (fr * fr + fi * fi);
                                     }
                                 }
                                 else if (idx == adios_statistic_sum)
@@ -1418,6 +1523,7 @@ SET_DATA_3(t) \
             }
 
             break;
+        }
 
         // NCSU - Adding in backward compatibility
         case adios_characteristic_max:
@@ -1430,7 +1536,8 @@ SET_DATA_3(t) \
             }
 
             (*root)->characteristics [j].bitmap |= (1 << adios_statistic_max);
-            (*root)->characteristics [j].stats[0][adios_statistic_max].data = bp_read_data_from_buffer(b, (*root)->type);
+            // (*root)->characteristics [j].stats[0][adios_statistic_max].data = bp_read_data_from_buffer(b, (*root)->type);
+            (*root)->characteristics [j].stats[0][adios_statistic_max].data = bp_read_data_from_buffer(b, original_var_type);
             break;
         }
 
@@ -1444,15 +1551,16 @@ SET_DATA_3(t) \
                 (*root)->characteristics [j].bitmap = 0;
             }
             (*root)->characteristics [j].bitmap |= (1 << adios_statistic_min);
-            (*root)->characteristics [j].stats[0][adios_statistic_min].data = bp_read_data_from_buffer(b, (*root)->type);
+            // (*root)->characteristics [j].stats[0][adios_statistic_min].data = bp_read_data_from_buffer(b, (*root)->type);
+            (*root)->characteristics [j].stats[0][adios_statistic_min].data = bp_read_data_from_buffer(b, original_var_type);
             break;
         }
 
         // NCSU - Parse the statistical information based in the bitmap
         case adios_characteristic_stat:
         {
-            uint8_t i, c, idx; 
-            uint8_t count = adios_get_stat_set_count ((*root)->type);
+            uint8_t i, c, idx;
+            uint8_t count = adios_get_stat_set_count (original_var_type);
             uint16_t characteristic_size;
 
             (*root)->characteristics [j].stats = malloc (count * sizeof(struct adios_index_characteristics_stat_struct *));
@@ -1472,7 +1580,7 @@ SET_DATA_3(t) \
                             uint32_t bi;
 
                             (*root)->characteristics [j].stats[c][idx].data = malloc (sizeof(struct adios_index_characteristics_hist_struct));
-                            struct adios_index_characteristics_hist_struct * hist = (*root)->characteristics [j].stats[c][idx].data; 
+                            struct adios_index_characteristics_hist_struct * hist = (*root)->characteristics [j].stats[c][idx].data;
 
                             BUFREAD32(b, hist->num_breaks)
                             hist->min = * (double *) bp_read_data_from_buffer(b, adios_double);
@@ -1494,36 +1602,42 @@ SET_DATA_3(t) \
                         {
                             characteristic_size = adios_get_stat_size(
                                 (*root)->characteristics [j].stats[c][idx].data
-                               ,(*root)->type
-                               ,(enum ADIOS_STAT)i
-                               );
+                                ,original_var_type
+                                ,(enum ADIOS_STAT)i
+                            );
                             (*root)->characteristics [j].stats[c][idx].data = malloc (characteristic_size);
 
                             void * data = (*root)->characteristics [j].stats[c][idx].data;
-			    memcpy (data, (b->buff + b->offset), characteristic_size);
+                memcpy (data, (b->buff + b->offset), characteristic_size);
                             b->offset += characteristic_size;
 
-                            if(b->change_endianness == adios_flag_yes) 
+                            if(b->change_endianness == adios_flag_yes)
                                 swap_ptr(data, characteristic_size * 8);
                         }
                         idx ++;
                     }
                     i ++;
-                }	
-            }	
+                }
+            }
             break;
-	}
+    }
 
        // NCSU - Statistics. Read the bitmap
        case adios_characteristic_bitmap:
            BUFREAD32(b, (*root)->characteristics [j].bitmap);
            break;
 
-        case adios_characteristic_offset: 
+        // NCSU ALACRITY-ADIOS - Read transform type field
+        case adios_characteristic_transform_type:
+            adios_transform_deserialize_transform_characteristic(&(*root)->characteristics[j].transform, b);
+            //BUFREAD8(b, (*root)->characteristics [j].transform_type);
+            break;
+
+        case adios_characteristic_offset:
             BUFREAD64(b, (*root)->characteristics [j].offset)
             break;
 
-        case adios_characteristic_payload_offset: 
+        case adios_characteristic_payload_offset:
             BUFREAD64(b, (*root)->characteristics [j].payload_offset)
             break;
 
@@ -1592,7 +1706,7 @@ int64_t get_var_stop_index (struct adios_index_var_struct_v1 * v, int t)
 /* Seek to the specified step and prepare a few fields
  * in ADIOS_FILE structure, i.e., nvars, var_namelist,
  * nattrs, attr_namelist. This routine also sets the
- * current_step in ADIOS_FILE. 
+ * current_step in ADIOS_FILE.
  * Note: in file mode, tostep should be given -1.
  */
 int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
@@ -1603,6 +1717,7 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
     struct adios_index_var_struct_v1 * var_root = fh->vars_root;
     struct adios_index_attribute_struct_v1 * attr_root;
     uint64_t i;
+    int lenpath, lenname;
 
     /* Streaming starts with step 0. However, time index in BP file
      * starts with 1. If 'tostep' is -1, that means we want to get all steps.
@@ -1629,17 +1744,17 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
             if (allstep || (!allstep && var_root->characteristics[i].time_index == t))
             {
                 fp->nvars++;
-                break;    
+                break;
             }
         }
-      
+
         var_root = var_root->next;
     }
 
     fp->var_namelist = (char **) malloc (sizeof (char *) * fp->nvars);
     p->varid_mapping = (int *) malloc (fp->nvars * 4);
     assert (p->varid_mapping);
-    
+
     var_root = fh->vars_root;
     j = 0;
     k = 0;
@@ -1649,6 +1764,8 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
         {
             if (allstep || (!allstep && var_root->characteristics[i].time_index == t))
             {
+                /* Up to 1.5, we always put a / to the beginning */
+                /*
                 if (strcmp (var_root->var_path,"/"))
                 {
                     fp->var_namelist[j] = (char *)malloc (strlen((var_root)->var_name)
@@ -1664,6 +1781,29 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
 
                 strcat (fp->var_namelist[j], "/");
                 strcat (fp->var_namelist[j], var_root->var_name);
+                */
+
+                /* From 1.6, relative and full path (starts with /) are handled separately in search */
+                // Full name of variable: concatenate var_path and var_name
+                lenpath = strlen(var_root->var_path);
+                lenname = strlen(var_root->var_name);
+                if (lenpath > 0) {
+                    fp->var_namelist [j] = (char *) malloc (lenname + lenpath + 1 + 1);
+                                                                    // extra / and ending \0
+                    strcpy(fp->var_namelist[j], var_root->var_path);
+                    if (var_root->var_path[lenpath-1] != '/') {
+                        fp->var_namelist[j][lenpath] = '/';
+                        lenpath++;
+                    }
+                    strcpy(&(fp->var_namelist[j][lenpath]), var_root->var_name);
+                }
+                else {
+                    fp->var_namelist[j] = (char *) malloc (lenname+1); 
+                    strcpy(fp->var_namelist[j], var_root->var_name);
+                }
+                //printf ("Seek to step: Variable %d full path is [%s]\n", j, fp->var_namelist[j]);
+
+
                 p->varid_mapping[j] = k;
 
                 j++;
@@ -1715,6 +1855,8 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
             {
                 if (allstep || (!allstep && attr_root->characteristics[i].time_index == t))
                 {
+                    /* Up to 1.5, we always put a / to the beginning */
+                    /*
                     if (strcmp (attr_root->attr_path,"/"))
                     {
                         fp->attr_namelist[j] = (char *)malloc (strlen((attr_root)->attr_name)
@@ -1730,7 +1872,26 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
 
                     strcat (fp->attr_namelist[j], "/");
                     strcat (fp->attr_namelist[j], attr_root->attr_name);
-
+                    */
+                    // Full name of attribute: concatenate attr_path and attr_name
+                    lenpath = strlen(attr_root->attr_path);
+                    lenname = strlen(attr_root->attr_name);
+                    if (lenpath > 0) {
+                        fp->attr_namelist [j] = (char *) malloc (lenname + lenpath + 1 + 1);
+                                                                    // extra / and ending \0
+                        strcpy(fp->attr_namelist[j], attr_root->attr_path);
+                        if (attr_root->attr_path[lenpath-1] != '/') {
+                            fp->attr_namelist[j][lenpath] = '/';
+                            lenpath++;
+                        }
+                        strcpy(&(fp->attr_namelist[j][lenpath]), attr_root->attr_name);
+                    }
+                    else {
+                        fp->attr_namelist[j] = (char *) malloc (lenname+1); 
+                        strcpy(fp->attr_namelist[j], attr_root->attr_name);
+                    }
+                    //printf ("Seek to step: Attribute %d full path is [%s], path=[%s], name=[%s]\n", 
+                    //        j, fp->attr_namelist[j], attr_root->attr_path, attr_root->attr_name);
                     j++;
 
                     break;
@@ -1746,46 +1907,76 @@ int bp_seek_to_step (ADIOS_FILE * fp, int tostep, int show_hidden_attrs)
     return 0;
 }
 
-/* get local and global dimensions and offsets from a variable characteristics 
+// NCSU ALACRITY-ADIOS - Added a generic dimension-getter function
+/* get local and global dimensions and offsets from a variable characteristics
    return: 1 = it is a global array, 0 = local array
 */
-int bp_get_dimension_characteristics(struct adios_index_characteristic_struct_v1 *ch,
+int bp_get_dimension_generic(const struct adios_index_characteristic_dims_struct_v1 *dims,
                                     uint64_t *ldims, uint64_t *gdims, uint64_t *offsets)
 {
     int is_global = 0; // global array or just an array written by one process?
-    int ndim = ch->dims.count;
     int k;
 
+    int ndim = dims->count;
+
     for (k = 0; k < ndim; k++)
     {
-        ldims[k] = ch->dims.dims[k * 3];
-        gdims[k] = ch->dims.dims[k * 3 + 1];
-        offsets[k] = ch->dims.dims[k * 3 + 2];
+        ldims[k] = dims->dims[k * 3];
+        gdims[k] = dims->dims[k * 3 + 1];
+        offsets[k] = dims->dims[k * 3 + 2];
         is_global = is_global || gdims[k];
     }
 
     return is_global;
 }
 
+// LAYERFIX
+// NCSU ALACRITY-ADIOS - Made to delegate to above function, passing a
+//   different dimension struct depending on the transform type
+/* get local and global dimensions and offsets from a variable characteristics
+   return: 1 = it is a global array, 0 = local array
+*/
+int bp_get_dimension_characteristics(struct adios_index_characteristic_struct_v1 *ch,
+                                    uint64_t *ldims, uint64_t *gdims, uint64_t *offsets)
+{
+    // NCSU ALACRITY-ADIOS - If the variable is transformed, use the pre-transform dimensions instead
+    //int is_transformed = (ch->transform.transform_type != adios_transform_none);
+    //const struct adios_index_characteristic_dims_struct_v1 *dims =
+    //    is_transformed ? &ch->transform.pre_transform_dimensions : &ch->dims;
+
+    return bp_get_dimension_generic(&ch->dims, ldims, gdims, offsets); // dims
+}
+
+// NCSU ALACRITY-ADIOS - Added a generic dimension-getter function
 /* As opposed to bp_get_dimension_characteristics, this routine returns
    ldims/gdims/offsets with 'time' extracted. */
-int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_struct_v1 *ch,
-                                            uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
-                                            int file_is_fortran)
+int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dims_struct_v1 *dims,
+        uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
+        int file_is_fortran)
 {
     int is_global = 0, dummy = 0, has_time;
-    int ndim = ch->dims.count; //ndim possibly has 'time' dimension
     int k;
 
+    is_global = bp_get_dimension_generic(dims, ldims, gdims, offsets);
+    int ndim = dims->count;
+    /*
     for (k = 0; k < ndim; k++)
     {
         ldims[k] = ch->dims.dims[k * 3];
         gdims[k] = ch->dims.dims[k * 3 + 1];
         offsets[k] = ch->dims.dims[k * 3 + 2];
         is_global = is_global || gdims[k];
+    }*/
+
+    if (!file_is_fortran)
+    {
+        has_time = (gdims[ndim - 1] == 0 && ldims[0] == 1);
+    }
+    else
+    {
+        has_time = (gdims[ndim - 1] == 0 && ldims[ndim - 1] == 1);
     }
 
-    has_time = (gdims[ndim - 1] == 0 && ldims[ndim - 1] > 0);
     // change all the stuff to C ordering
     if (file_is_fortran)
     {
@@ -1803,60 +1994,72 @@ int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_s
         }
     }
 
-    if (has_time)
+    else // NCSU ALACRITY-ADIOS - Bugfix, I think (should have commented on this when I did it...)
     {
-        if (!file_is_fortran)
+        if (has_time)
         {
-            /* first dimension is the time (C array)
-             * ldims[0] = 1 but gdims does not contain time info and 
-             * gdims[0] is 1st data dimension and 
-             * gdims is shorter by one value than ldims in case of C.
-             * Therefore, gdims[*ndim-1] = 0 if there is a time dimension. 
-             */
-            // error check
-            if (ndim > 1 && ldims[0] != 1)
+            if (!file_is_fortran)
             {
-                log_error ("ADIOS Error 1: this is a BP file with C ordering "
-                           "but we didn't find an array to have time dimension "
-                           "in the first dimension. l:g:o = (");
-                for (k = 0; k < ndim; k++)
+                /* first dimension is the time (C array)
+                * ldims[0] = 1 but gdims does not contain time info and
+                * gdims[0] is 1st data dimension and
+                * gdims is shorter by one value than ldims in case of C.
+                * Therefore, gdims[*ndim-1] = 0 if there is a time dimension.
+                */
+                // error check
+                if (ndim > 1 && ldims[0] != 1)
                 {
-                    log_error_cont ("%llu:%llu:%llu%s", 
-                                   ldims[k], gdims[k], offsets[k], 
-                                   (k<ndim-1 ? ", " : "") );
-                }
+                    log_error ("ADIOS Error 1: this is a BP file with C ordering "
+                            "but we didn't find an array to have time dimension "
+                            "in the first dimension. l:g:o = (");
+                    for (k = 0; k < ndim; k++)
+                    {
+                        log_error_cont ("%llu:%llu:%llu%s",
+                                ldims[k], gdims[k], offsets[k],
+                                (k<ndim-1 ? ", " : "") );
+                    }
 
-                log_error_cont ("\n");
-            }
+                    log_error_cont ("\n");
+                }
 
-            for (k = 0; k < ndim - 1; k++)
-            {
-                ldims[k] = ldims[k + 1];
+                for (k = 0; k < ndim - 1; k++)
+                {
+                    ldims[k] = ldims[k + 1];
+                }
+                ldims[ndim-1] = 0;
             }
-        }
-        else
-        {
-            // last dimension is the time (Fortran array)
-            if (ndim > 1 && ldims[0] != 1)
+            else
             {
-                log_error ("ADIOS Error: this is a BP file with Fortran array "
-                           "ordering but we didn't find an array to have time "
-                           "dimension in the last dimension. l:g:o = (");
-                for (k = 0; k < ndim; k++)
+                // last dimension is the time (Fortran array)
+                if (ndim > 1 && ldims[0] != 1)
                 {
-                    log_error_cont ("%llu:%llu:%llu%s", 
-                                    ldims[k], gdims[k], offsets[k], 
-                                    (k<ndim-1 ? ", " : "") );
+                    log_error ("ADIOS Error: this is a BP file with Fortran array "
+                            "ordering but we didn't find an array to have time "
+                            "dimension in the last dimension. l:g:o = (");
+                    for (k = 0; k < ndim; k++)
+                    {
+                        log_error_cont ("%llu:%llu:%llu%s",
+                                ldims[k], gdims[k], offsets[k],
+                                (k<ndim-1 ? ", " : "") );
+                    }
+
+                    log_error_cont (")\n");
                 }
 
-                log_error_cont (")\n");
-            }
+                for (k = 0; k < ndim - 1; k++)
+                {
+                    gdims[k] = gdims[k + 1];
+                    ldims[k] = ldims[k + 1];
+                    offsets[k] = offsets[k + 1];
+                }
 
-            for (k = 0; k < ndim - 1; k++)
-            {
-                gdims[k] = gdims[k + 1];
-                ldims[k] = ldims[k + 1];
-                offsets[k] = offsets[k + 1]; 
+                // NCSU ALACRITY-ADIOS - Bugfix, since we have just shifted down all
+                //   dimensions, but some code relies on unused dimensions being 0
+                //   (this function has no other way to indicate to the called that
+                //   the returned dimensions may be less numerous than the input).
+                gdims[ndim-1] = 0;
+                ldims[ndim-1] = 0;
+                offsets[ndim-1] = 0;
             }
         }
     }
@@ -1864,11 +2067,33 @@ int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_s
     return is_global;
 }
 
+// LAYERFIX
+// NCSU ALACRITY-ADIOS - Made this delegate to a generic function
+int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_struct_v1 *ch,
+                                            uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
+                                            int file_is_fortran) {
+
+    // NCSU ALACRITY-ADIOS - If the variable is transformed, use the pre-transform dimensions instead
+    //int is_transformed = (ch->transform.transform_type != adios_transform_none);
+    //const struct adios_index_characteristic_dims_struct_v1 *dims =
+    //    is_transformed ? &ch->transform.pre_transform_dimensions : &ch->dims;
+
+    return bp_get_dimension_generic_notime(&ch->dims, ldims, gdims, offsets, file_is_fortran); // dims
+}
+
+
+// NCSU ALACRITY-ADIOS - Delegate to generic function
+void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_root, int file_is_fortran,
+                        int * ndim, uint64_t ** dims, int * nsteps) {
+    bp_get_dimensions_generic(fh, var_root, file_is_fortran, ndim, dims, nsteps, 0);
+}
+
+// NCSU ALACRITY-ADIOS - Factored out generic version of this function
 /* Fill out ndim and dims for the variable.
    ndim and dims doesn't include 'time' dimension.
 */
-void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_root, int file_is_fortran,
-                        int * ndim, uint64_t ** dims, int * nsteps)
+void bp_get_dimensions_generic (BP_FILE * fh, struct adios_index_var_struct_v1 * var_root, int file_is_fortran,
+                        int * ndim, uint64_t ** dims, int * nsteps, int use_pretransform_dimensions)
 {
     int i, j, has_time_index_characteristic;
     int is_global; // global array or just an array written by one process?
@@ -1876,9 +2101,14 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
     uint64_t gdims[32];
     uint64_t offsets[32];
 
+    // NCSU ALACRITY-ADIOS - Use the correct dimension struct
+    struct adios_index_characteristic_dims_struct_v1 *var_dims =
+            use_pretransform_dimensions ? &var_root->characteristics[0].transform.pre_transform_dimensions
+                                        : &var_root->characteristics[0].dims;
+
     has_time_index_characteristic = fh->mfooter.version & ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC;
     /* Get dimension information */
-    * ndim = var_root->characteristics [0].dims.count;
+    * ndim = var_dims->count; //adios_transform_get_var_original_num_dims(var_root); // LAYERFIX
     * dims = 0;
     * nsteps = (has_time_index_characteristic ?
                get_var_nsteps (var_root) : fh->tidx_stop - fh->tidx_start + 1);
@@ -1894,7 +2124,7 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
 
     memset (*dims, 0, sizeof (uint64_t) * (* ndim));
 
-    is_global = bp_get_dimension_characteristics (&(var_root->characteristics[0]),
+    is_global = bp_get_dimension_generic(var_dims,//&(var_root->characteristics[0]),
                                                   ldims, gdims, offsets);
 
     if (!is_global)
@@ -1927,10 +2157,10 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
             if (!file_is_fortran)
             {
                 /* first dimension is the time (C array)
-                 * ldims[0] = 1 but gdims does not contain time info and 
-                 * gdims[0] is 1st data dimension and 
+                 * ldims[0] = 1 but gdims does not contain time info and
+                 * gdims[0] is 1st data dimension and
                  * gdims is shorter by one value than ldims in case of C.
-                 * Therefore, gdims[*ndim-1] = 0 if there is a time dimension. 
+                 * Therefore, gdims[*ndim-1] = 0 if there is a time dimension.
                  */
                 // error check
                 if (* ndim > 1 && ldims[0] != 1)
@@ -1940,8 +2170,8 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
                                "in the first dimension. l:g:o = (");
                     for (i = 0; i < * ndim; i++)
                     {
-                        log_error_cont ("%llu:%llu:%llu%s", 
-                                        ldims[i], gdims[i], offsets[i], 
+                        log_error_cont ("%llu:%llu:%llu%s",
+                                        ldims[i], gdims[i], offsets[i],
                                         (i<*ndim-1 ? ", " : "") );
                     }
 
@@ -1958,8 +2188,8 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
                                "dimension in the last dimension. l:g:o = (");
                     for (i = 0; i < * ndim; i++)
                     {
-                        log_error_cont ("%llu:%llu:%llu%s", 
-                                        ldims[i], gdims[i], offsets[i], 
+                        log_error_cont ("%llu:%llu:%llu%s",
+                                        ldims[i], gdims[i], offsets[i],
                                         (i<*ndim-1 ? ", " : "") );
                     }
 
@@ -1978,16 +2208,23 @@ void bp_get_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 * var_roo
     }
 }
 
+
+void bp_get_and_swap_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+                                 int *ndim, uint64_t **dims, int *nsteps, int swap_flag) {
+    bp_get_and_swap_dimensions_generic(fh, var_root, file_is_fortran, ndim, dims, nsteps, swap_flag, 0);
+}
+
+// NCSU ALACRITY-ADIOS - Factored out a generic version of this function
 /* Get dimensions of a variable and flip them if swap_flag is set.
    ndim: has already taken time dimension out if there is any.
    dims: is local dims if local array. is global dims if global array.
 */
-void bp_get_and_swap_dimensions (BP_FILE * fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
-                                 int *ndim, uint64_t **dims, int *nsteps, int swap_flag)
+void bp_get_and_swap_dimensions_generic (BP_FILE * fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+                                         int *ndim, uint64_t **dims, int *nsteps, int swap_flag, int use_pretransform_dimensions)
 {
     int dummy = 0;
 
-    bp_get_dimensions (fh, var_root, file_is_fortran, ndim, dims, nsteps);
+    bp_get_dimensions_generic(fh, var_root, file_is_fortran, ndim, dims, nsteps, use_pretransform_dimensions);
 
     if (swap_flag)
     {
@@ -2024,7 +2261,7 @@ int * get_var_nblocks (struct adios_index_var_struct_v1 * var_root, int nsteps)
     int i, j, prev_step = -1;
     int * nblocks = (int *) malloc (sizeof (int) * nsteps);
 
-    assert (nblocks); 
+    assert (nblocks);
 
     memset (nblocks, 0, sizeof (int) * nsteps);
 
@@ -2061,7 +2298,7 @@ void * bp_read_data_from_buffer(struct adios_bp_buffer_struct_v1 *b, enum ADIOS_
     }
 
     if (!data) {
-        adios_error (err_no_memory, 
+        adios_error (err_no_memory,
                      "bp_read_data_from_buffer: cannot allocate %d bytes\n",data_size);
         return 0;
     }
@@ -2137,32 +2374,32 @@ void bp_grouping ( struct BP_FILE * fh_p,
 {
     struct BP_FILE * fh = (struct BP_FILE *) fh_p;
     struct bp_index_pg_struct_v1 * pg_root = fh->pgs_root;
-    struct bp_minifooter * mh = &fh->mfooter;    
-    int i, j; 
+    struct bp_minifooter * mh = &fh->mfooter;
+    int i, j;
     uint32_t time_id;
     uint64_t pg_time_count = 0;
-    uint64_t * pg_offsets = (uint64_t *) 
+    uint64_t * pg_offsets = (uint64_t *)
         malloc (sizeof(uint64_t)*mh->pgs_count);
-    uint32_t * pg_pids = (uint32_t *) 
+    uint32_t * pg_pids = (uint32_t *)
         malloc (sizeof(uint32_t)*mh->pgs_count);
-    uint64_t * time_index = (uint64_t *) 
+    uint64_t * time_index = (uint64_t *)
         malloc (sizeof(uint64_t)*mh->time_steps);
     time_id = pg_root->time_index;
 
     uint16_t group_count = 0;
-     
+
     for (i = 0; i < mh->pgs_count; i++) {
         pg_pids [i] = pg_root->process_id;
         pg_offsets [i] = pg_root->offset_in_file;
         if (pg_root->time_index == time_id) {
             pg_time_count += 1;
-        }    
+        }
         else {
             time_index [time_id-1] = pg_time_count;
             time_id = pg_root->time_index;
             pg_time_count = 1;
         }
-    
+
         pg_root = pg_root->next;
     }
 
@@ -2171,7 +2408,7 @@ void bp_grouping ( struct BP_FILE * fh_p,
     time_index [time_id-1] = pg_time_count;
     time_id = 0;
     for (i = 0; i < mh->time_steps; i++) {
-        if (i > 0) 
+        if (i > 0)
             time_id += time_index[i-1];
 
     }
@@ -2186,9 +2423,9 @@ void bp_grouping ( struct BP_FILE * fh_p,
                 vars->characteristics->var_id,
                 vars->id
                 );
-            ++vars_cnt;    
+            ++vars_cnt;
         }
-        vars = vars->next;    
+        vars = vars->next;
     }
      printf("cnt=%d \n",vars_cnt);
 
@@ -2205,21 +2442,21 @@ int bp_read_pgs (struct BP_FILE * bp_struct)
     bp_realloc_aligned (b, b->pg_size);
     b->offset = 0;
 
-    if (sizeof (char *) == 4) { 
-        MPI_File_seek (bp_struct->mpi_fh, 
-                (MPI_Offset) b->pg_index_offset, 
+    if (sizeof (char *) == 4) {
+        MPI_File_seek (bp_struct->mpi_fh,
+                (MPI_Offset) b->pg_index_offset,
                 MPI_SEEK_SET);
 
-        MPI_File_read (bp_struct->mpi_fh, b->buff, 
+        MPI_File_read (bp_struct->mpi_fh, b->buff,
                 b->pg_size, MPI_BYTE, &status);
         MPI_Get_count (&status, MPI_BYTE, &r);
     }
-    else { 
-        MPI_File_seek (bp_struct->mpi_fh, 
-                (MPI_Offset) b->pg_index_offset, 
+    else {
+        MPI_File_seek (bp_struct->mpi_fh,
+                (MPI_Offset) b->pg_index_offset,
                 MPI_SEEK_SET);
 
-        MPI_File_read (bp_struct->mpi_fh, b->buff, 
+        MPI_File_read (bp_struct->mpi_fh, b->buff,
                 b->pg_size, MPI_BYTE, &status);
         MPI_Get_count (&status, MPI_BYTE, &r);
     }
@@ -2241,21 +2478,21 @@ int bp_read_vars (struct BP_FILE * bp_struct)
     bp_realloc_aligned (b, b->vars_size);
     b->offset = 0;
 
-    if (sizeof (char *) == 4) { 
-        MPI_File_seek (bp_struct->mpi_fh, 
-                (MPI_Offset) b->vars_index_offset, 
+    if (sizeof (char *) == 4) {
+        MPI_File_seek (bp_struct->mpi_fh,
+                (MPI_Offset) b->vars_index_offset,
                 MPI_SEEK_SET);
 
-        MPI_File_read (bp_struct->mpi_fh, b->buff, 
+        MPI_File_read (bp_struct->mpi_fh, b->buff,
                 b->vars_size, MPI_BYTE, &status);
         MPI_Get_count (&status, MPI_BYTE, &r);
     }
-    else { 
+    else {
         MPI_File_seek (bp_struct->mpi_fh,
-                (MPI_Offset) b->vars_index_offset, 
+                (MPI_Offset) b->vars_index_offset,
                 MPI_SEEK_SET);
 
-        MPI_File_read (bp_struct->mpi_fh, b->buff, 
+        MPI_File_read (bp_struct->mpi_fh, b->buff,
                 b->vars_size, MPI_BYTE, &status);
         MPI_Get_count (&status, MPI_BYTE, &r);
     }
@@ -2270,14 +2507,14 @@ int bp_read_vars (struct BP_FILE * bp_struct)
 void print_pg_index (struct bp_index_pg_struct_v1 * pg_root,
         struct bp_minifooter * mh)
 {
-    int i, j; 
+    int i, j;
     uint32_t time_id;
     uint64_t pg_time_count = 0;
-    uint64_t * pg_offsets = (uint64_t *) 
+    uint64_t * pg_offsets = (uint64_t *)
         malloc (sizeof(uint64_t)*mh->pgs_count);
-    uint32_t * pg_pids = (uint32_t *) 
+    uint32_t * pg_pids = (uint32_t *)
         malloc (sizeof(uint32_t)*mh->pgs_count);
-    uint64_t * time_index = (uint64_t *) 
+    uint64_t * time_index = (uint64_t *)
         malloc (sizeof(uint64_t)*mh->time_steps);
     time_id = pg_root->time_index;
     for (i = 0; i < mh->pgs_count; i++)
@@ -2287,29 +2524,29 @@ void print_pg_index (struct bp_index_pg_struct_v1 * pg_root,
         if (pg_root->time_index == time_id)
         {
             pg_time_count += 1;
-        }    
+        }
         else {
             time_index [time_id-1] = pg_time_count;
             time_id = pg_root->time_index;
             pg_time_count = 1;
-        }    
+        }
         pg_root = pg_root->next;
     }
 
     time_index [time_id-1] = pg_time_count;
     time_id = 0;
     for (i = 0; i < mh->time_steps; i++) {
-        if (i > 0) 
+        if (i > 0)
             time_id += time_index[i-1];
     }
 }
 
 void print_vars_index_top (struct adios_index_var_struct_v1 * vars_root)
 {
-    printf("Variables (group) :\n");    
+    printf("Variables (group) :\n");
     while (vars_root) {
         if (!strcmp (vars_root->var_path, "/")) {
-            printf ("\t %s", 
+            printf ("\t %s",
                 vars_root->var_name
                 );
         }
@@ -2319,14 +2556,14 @@ void print_vars_index_top (struct adios_index_var_struct_v1 * vars_root)
                 vars_root->var_name
                 );
         }
-        
+
         int j, cnt;
         struct adios_index_characteristic_dims_struct_v1 * pdims;
         pdims = &vars_root->characteristics [0].dims;
         cnt = pdims->count;
         if (cnt != 0) {
             printf (" (");
-            for (j = 0; j < cnt; j++) { 
+            for (j = 0; j < cnt; j++) {
                 if (j>0)
                     printf (", ");
                 if (pdims->dims [j*3 + 1] != 0) {
@@ -2563,10 +2800,11 @@ int has_subfiles (struct BP_FILE * fh)
 }
 
 /****************************************************
-  Find the var associated with the given variable id 
+  Find the var associated with the given variable id
 *****************************************************/
 struct adios_index_var_struct_v1 * bp_find_var_byid (BP_FILE * fh, int varid)
 {
+/*
     struct adios_index_var_struct_v1 * var_root = fh->vars_root;
     int i;
 
@@ -2582,19 +2820,25 @@ struct adios_index_var_struct_v1 * bp_find_var_byid (BP_FILE * fh, int varid)
                varid);
         return NULL;
     }
+*/
+    return fh->vars_table[varid];
+ //   return var_root;
+}
 
-    return var_root;
+int is_global_array (struct adios_index_characteristic_struct_v1 *ch) {
+    return is_global_array_generic(&ch->dims);
 }
 
+// NCSU ALACRITY-ADIOS - Factored out generic version of the function
 /* Check whether an array is global */
-int is_global_array (struct adios_index_characteristic_struct_v1 *ch)
+int is_global_array_generic (const struct adios_index_characteristic_dims_struct_v1 *dims)
 {
     int is_global = 0; // global array or just an array written by one process?
-    int ndim = ch->dims.count, k;
+    int ndim = dims->count, k;
 
     for (k = 0; k < ndim; k ++)
     {
-        is_global = is_global || ch->dims.dims[k*3 + 1];
+        is_global = is_global || dims->dims[k*3 + 1];
     }
 
     return is_global;
@@ -2604,11 +2848,11 @@ int is_global_array (struct adios_index_characteristic_struct_v1 *ch)
  *  If the type is adios_string, and the second argument is
  *  the string itself, it returns strlen(var)+1.
  *  For other types, it does not care about var and returns
- *  the size occupied by one element. 
+ *  the size occupied by one element.
  *
  *  Note that adios_internals:adios_get_type_size returns
- *  strlen(var) for strings. 
- */ 
+ *  strlen(var) for strings.
+ */
 int bp_get_type_size (enum ADIOS_DATATYPES type, void * var)
 {
     switch (type)
@@ -2657,24 +2901,24 @@ int bp_get_type_size (enum ADIOS_DATATYPES type, void * var)
 
 double bp_value_to_double (enum ADIOS_DATATYPES type, void * data)
 {
-	switch (type)
+    switch (type)
     {
         case adios_string:
             return 0;
 
         case adios_complex:
-			return * ((float *) data);
-		
+            return * ((float *) data);
+
         case adios_double_complex:
-			return * ((double *) data);
+            return * ((double *) data);
 
         case adios_double:
-			return * ((double *) data);
+            return * ((double *) data);
 
         case adios_long_double:
-			return * ((long double *) data);
+            return * ((long double *) data);
 
-		case adios_unsigned_byte:
+        case adios_unsigned_byte:
             return * ((uint8_t *) data);
 
         case adios_byte:
@@ -2732,11 +2976,11 @@ int check_bp_validity (const char * fname)
     MPI_File_seek (fh, (MPI_Offset) file_size - MINIFOOTER_SIZE - 28, MPI_SEEK_SET);
     MPI_File_read (fh, str, 8, MPI_BYTE, &status);
     MPI_File_close (&fh);
-          
+
     //printf ("check_bp_validity: %s\n", str);
     str[8] = '\0';
 
-    flag = (strcmp (str, "ADIOS-BP") == 0 ) ? 1 : 0; 
+    flag = (strcmp (str, "ADIOS-BP") == 0 ) ? 1 : 0;
 
     return flag;
 }
diff --git a/src/core/bp_utils.h b/src/core/bp_utils.h
index 6968281..99c9b71 100644
--- a/src/core/bp_utils.h
+++ b/src/core/bp_utils.h
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -18,16 +18,16 @@ void bp_alloc_aligned (struct adios_bp_buffer_struct_v1 * b, uint64_t size);
 void bp_realloc_aligned (struct adios_bp_buffer_struct_v1 * b, uint64_t size);
 int bp_get_endianness( uint32_t change_endianness );
 int bp_parse_characteristics (struct adios_bp_buffer_struct_v1 * b,
-		  	      struct adios_index_var_struct_v1 ** root,
-			      uint64_t j);
+                    struct adios_index_var_struct_v1 ** root,
+                uint64_t j);
 int bp_get_characteristics_data (void ** ptr_data,
-				 void * buffer,
-				 int data_size,
-				 enum ADIOS_DATATYPES type);
+                void * buffer,
+                int data_size,
+                enum ADIOS_DATATYPES type);
 int bp_read_close (struct adios_bp_buffer_struct_v1 * b);
 int bp_read_open (const char * filename,
-	 	  MPI_Comm comm, 
-		  struct BP_FILE * fh);
+        MPI_Comm comm,
+        struct BP_FILE * fh);
 MPI_File * get_BP_file_handle(struct BP_file_handle * l, uint32_t file_index);
 void add_BP_file_handle (struct BP_file_handle ** l, struct BP_file_handle * n);
 void close_all_BP_files (struct BP_file_handle * l);
@@ -47,13 +47,22 @@ int64_t get_var_stop_index (struct adios_index_var_struct_v1 * v, int t);
 
 const char * bp_value_to_string (enum ADIOS_DATATYPES type, void * data);
 int bp_get_type_size (enum ADIOS_DATATYPES type, void * var);
-int bp_get_dimensioncharacteristics(struct adios_index_characteristic_struct_v1 *ch,
+int bp_get_dimension_generic(const struct adios_index_characteristic_dims_struct_v1 *dims,
                                     uint64_t *ldims, uint64_t *gdims, uint64_t *offsets);
+int bp_get_dimension_characteristics(struct adios_index_characteristic_struct_v1 *ch,
+                                    uint64_t *ldims, uint64_t *gdims, uint64_t *offsets);
+int bp_get_dimension_generic_notime (const struct adios_index_characteristic_dims_struct_v1 *dims,
+                                     uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
+                                     int file_is_fortran);
 int bp_get_dimension_characteristics_notime (struct adios_index_characteristic_struct_v1 *ch,
                                             uint64_t *ldims, uint64_t *gdims, uint64_t *offsets,
                                             int file_is_fortran);
+void bp_get_dimensions_generic(BP_FILE *fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+                               int *ndim, uint64_t **dims, int *nsteps, int use_pretransform_dimensions);
 void bp_get_dimensions (BP_FILE *fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
                         int *ndim, uint64_t **dims, int *nsteps);
+void bp_get_and_swap_dimensions_generic (BP_FILE *fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
+                                         int *ndim, uint64_t **dims, int *nsteps, int swap_flag, int use_pretransform_dimensions);
 void bp_get_and_swap_dimensions (BP_FILE *fh, struct adios_index_var_struct_v1 *var_root, int file_is_fortran,
                                  int *ndim, uint64_t **dims, int *nsteps, int swap_flag);
 int get_var_nsteps (struct adios_index_var_struct_v1 * var_root);
@@ -67,6 +76,7 @@ double bp_value_to_double(enum ADIOS_DATATYPES type, void * data);
 int is_fortran_file (struct BP_FILE * fh);
 int has_subfiles (struct BP_FILE * fh);
 struct adios_index_var_struct_v1 * bp_find_var_byid (BP_FILE * fh, int varid);
+int is_global_array_generic (const struct adios_index_characteristic_dims_struct_v1 *dims); // NCSU ALACRITY-ADIOS
 int is_global_array (struct adios_index_characteristic_struct_v1 * ch);
 int check_bp_validity (const char * fname);
 int get_num_subfiles (struct BP_FILE * fh);
diff --git a/src/core/buffer.c b/src/core/buffer.c
index b427f47..a46e3e5 100644
--- a/src/core/buffer.c
+++ b/src/core/buffer.c
@@ -11,7 +11,7 @@
 #include <unistd.h>   /* _SC_PAGE_SIZE, _SC_AVPHYS_PAGES */
 
 #if defined(__APPLE__)
-#	include <mach/mach.h>
+#    include <mach/mach.h>
 #endif
 
 #include "core/buffer.h"
@@ -85,7 +85,7 @@ int adios_set_buffer_size ()
 
         pagesize = sysconf (_SC_PAGE_SIZE);
         pages =  adios_get_avphys_pages ();
-	
+    
         if (adios_buffer_alloc_percentage)
         {
             adios_buffer_size_max =   (pages * pagesize / 100.0)
diff --git a/src/core/common_adios.c b/src/core/common_adios.c
index 53d1d18..c0114c8 100644
--- a/src/core/common_adios.c
+++ b/src/core/common_adios.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -13,6 +13,7 @@
 #include <unistd.h>
 #include <stdint.h>
 #include <sys/time.h> // gettimeofday
+#include <assert.h>
 
 // xml parser
 #include <mxml.h>
@@ -24,26 +25,41 @@
 #include "core/buffer.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_logger.h"
+#include "core/qhashtbl.h"
 #include "public/adios_error.h"
 
+// NCSU ALACRITY-ADIOS
+#include "adios_transforms_common.h"
+#include "adios_transforms_read.h"
+#include "adios_transforms_write.h"
+
+#ifdef WITH_NCSU_TIMER
+#include "timer.h"
+#endif
+
 #ifdef DMALLOC
 #include "dmalloc.h"
 #endif
 
 extern struct adios_transport_struct * adios_transports;
+extern int adios_errno;
 
 ///////////////////////////////////////////////////////////////////////////////
 int common_adios_init (const char * config, MPI_Comm comm)
 {
     // parse the config file
-    return adios_parse_config (config, comm);
+    adios_errno = err_no_error;
+    adios_parse_config (config, comm);
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // all XML file pieces will be provided by another series of calls
 int common_adios_init_noxml (MPI_Comm comm)
 {
-    return adios_local_config (comm);
+    adios_errno = err_no_error;
+    adios_local_config (comm);
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -51,6 +67,7 @@ int common_adios_finalize (int mype)
 {
     struct adios_method_list_struct * m;
 
+    adios_errno = err_no_error;
     for (m = adios_get_methods (); m; m = m->next)
     {
         if (   m->method->m != ADIOS_METHOD_UNKNOWN
@@ -64,17 +81,22 @@ int common_adios_finalize (int mype)
 
     adios_cleanup ();
 
-    return 0;
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_finalize ();
+#endif
+
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 int common_adios_allocate_buffer (enum ADIOS_BUFFER_ALLOC_WHEN adios_buffer_alloc_when
                                  ,uint64_t buffer_size)
 {
+    adios_errno = err_no_error;
     adios_buffer_size_requested_set (buffer_size * 1024 * 1024);
     adios_buffer_alloc_when_set (adios_buffer_alloc_when);
-
-    return adios_set_buffer_size ();
+    adios_set_buffer_size ();
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -82,6 +104,11 @@ int common_adios_open (int64_t * fd, const char * group_name
                 ,const char * name, const char * file_mode, MPI_Comm comm
                )
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_open_to_close");
+    timer_start ("adios_open");
+#endif
+
     int64_t group_id = 0;
     struct adios_file_struct * fd_p = (struct adios_file_struct *)
                                   malloc (sizeof (struct adios_file_struct));
@@ -89,6 +116,7 @@ int common_adios_open (int64_t * fd, const char * group_name
     struct adios_method_list_struct * methods = 0;
     enum ADIOS_METHOD_MODE mode;
 
+    adios_errno = err_no_error;
     adios_common_get_group (&group_id, group_name);
     g = (struct adios_group_struct *) group_id;
     methods = g->methods;
@@ -106,13 +134,13 @@ int common_adios_open (int64_t * fd, const char * group_name
                     mode = adios_mode_update;
                 else
                 {
-                    adios_error(err_invalid_file_mode, 
+                    adios_error(err_invalid_file_mode,
                         "adios_open: unknown file mode: %s, supported r,w,a,u\n",
                         file_mode);
 
                     *fd = 0;
 
-                    return 1;
+                    return adios_errno;
                 }
 
     fd_p->name = strdup (name);
@@ -131,19 +159,19 @@ int common_adios_open (int64_t * fd, const char * group_name
     fd_p->pg_start_in_file = 0;
 
 #ifdef SKEL_TIMING
-	fd_p->timing_obj = 0;
+    fd_p->timing_obj = 0;
 #endif
 
 #if 1
     /* Time index magic done here */
-    if (mode == adios_mode_write) 
+    if (mode == adios_mode_write)
     {
-        /* Traditionally, time=1 at the first step, and for subsequent file 
+        /* Traditionally, time=1 at the first step, and for subsequent file
            creations, time increases. Although, each file contains one step,
            the time index indicates that they are in a series.
         */
         g->time_index++;
-    } 
+    }
     else if (mode == adios_mode_append)
     {
         g->time_index++;
@@ -161,7 +189,7 @@ int common_adios_open (int64_t * fd, const char * group_name
         g->time_index = 1;
 #else
     /* old way pre-1.4*/
-    if (mode != adios_mode_read) 
+    if (mode != adios_mode_read)
         g->time_index++;
 #endif
 
@@ -181,23 +209,34 @@ int common_adios_open (int64_t * fd, const char * group_name
 
     *fd = (int64_t) fd_p;
 
-    return 0;
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_open");
+#endif
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 static const char ADIOS_ATTR_PATH[] = "/__adios__";
 
+uint32_t pinned_timestep = 0;
+void adios_pin_timestep(uint32_t ts) {
+  pinned_timestep = ts;
+}
+
 int common_adios_group_size (int64_t fd_p
                      ,uint64_t data_size
                      ,uint64_t * total_size
                      )
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_group_size");
+#endif
+    adios_errno = err_no_error;
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
-
-        return 1;
+        return adios_errno;
     }
     struct adios_method_list_struct * m = fd->group->methods;
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
@@ -207,17 +246,20 @@ int common_adios_group_size (int64_t fd_p
         fd->write_size_bytes = 0;
         fd->buffer = 0;
         *total_size = 0;
-        return 0;
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_group_size");
+#endif
+        return err_no_error;
     }
 
     /* Add ADIOS internal attributes now (should be before calculating the overhead) */
-    if (fd->mode != adios_mode_read && 
+    if (fd->mode != adios_mode_read &&
          (fd->group->process_id == 0 || fd->subfile_index != -1)
-       ) 
+       )
     {
         struct timeval tp;
         char epoch[16];
-        gettimeofday(&tp, NULL); 
+        gettimeofday(&tp, NULL);
         sprintf(epoch, "%d", (int) tp.tv_sec);
 
         int def_adios_init_attrs = 1;
@@ -227,10 +269,10 @@ int common_adios_group_size (int64_t fd_p
 
         if (def_adios_init_attrs) {
             log_debug ("Define ADIOS extra attributes, "
-                       "time = %d, rank = %d, epoch = %s subfile=%d\n", 
+                       "time = %d, rank = %d, epoch = %s subfile=%d\n",
                        fd->group->time_index, fd->group->process_id, epoch, fd->subfile_index);
 
-            adios_common_define_attribute ((int64_t)fd->group, "version", ADIOS_ATTR_PATH, 
+            adios_common_define_attribute ((int64_t)fd->group, "version", ADIOS_ATTR_PATH,
                     adios_string, VERSION, NULL);
 
             adios_common_define_attribute ((int64_t)fd->group, "create_time_epoch", ADIOS_ATTR_PATH,
@@ -239,22 +281,22 @@ int common_adios_group_size (int64_t fd_p
                     adios_integer, epoch, NULL);
             // id of last attribute is fd->group->member_count
             fd->group->attrid_update_epoch = fd->group->member_count;
-            
+
         }
-        /* FIXME: this code works fine, it does not duplicate the attribute, 
-           but the index will still contain all copies and the read will see 
-           only the first one. Thus updating an attribute does not work 
+        /* FIXME: this code works fine, it does not duplicate the attribute,
+           but the index will still contain all copies and the read will see
+           only the first one. Thus updating an attribute does not work
            in practice.
          */
-        else 
+        else
         {
-            // update attribute of update time (define would duplicate it) 
+            // update attribute of update time (define would duplicate it)
             struct adios_attribute_struct * attr = adios_find_attribute_by_id
-                   (fd->group->attributes, fd->group->attrid_update_epoch); 
+                   (fd->group->attributes, fd->group->attrid_update_epoch);
             if (attr) {
                 log_debug ("Update ADIOS extra attribute name=%s, "
-                           "time = %d, rank = %d, epoch = %s, subfile=%d\n", 
-                           attr->name, fd->group->time_index, fd->group->process_id, 
+                           "time = %d, rank = %d, epoch = %s, subfile=%d\n",
+                           attr->name, fd->group->time_index, fd->group->process_id,
                            epoch, fd->subfile_index);
 
                 free(attr->value);
@@ -275,13 +317,28 @@ int common_adios_group_size (int64_t fd_p
 
     fd->write_size_bytes += overhead;
 
+    // NCSU ALACRITY-ADIOS - Current solution to group_size problem: find
+    // the most "expansive" transform method used in the file, and assume
+    // all of the data uses that method, for a very rough but safe upper bound.
+    //
+    // (see the comment in the top of adios_transforms.c, under section
+    // 'The "group size" problem,' for more details)
+    uint64_t wc_transformed_size = adios_transform_worst_case_transformed_group_size(data_size, fd);
+    if (wc_transformed_size > data_size) {
+        log_debug("Computed worst-case bound on transformed data for a group size of %llu is %llu; increasing group size to match.\n",
+                  data_size, wc_transformed_size);
+
+        fd->write_size_bytes += (wc_transformed_size - data_size);
+        *total_size += (wc_transformed_size - data_size);
+    }
+
     uint64_t allocated = adios_method_buffer_alloc (fd->write_size_bytes);
     if (allocated != fd->write_size_bytes)
     {
         fd->shared_buffer = adios_flag_no;
 
         log_warn ("adios_group_size (%s): Not buffering. "
-                  "needs: %llu available: %llu.\n", 
+                  "needs: %llu available: %llu.\n",
                   fd->group->name, fd->write_size_bytes, allocated);
     }
     else
@@ -312,6 +369,9 @@ int common_adios_group_size (int64_t fd_p
         m = m->next;
     }
 
+    if (pinned_timestep != 0)
+        fd->group->time_index = pinned_timestep;
+
     if (fd->shared_buffer == adios_flag_no)
     {
         adios_method_buffer_free (allocated);
@@ -330,7 +390,7 @@ int common_adios_group_size (int64_t fd_p
             adios_error (err_no_memory, "Cannot allocate %llu bytes for buffered output.\n",
                     fd->write_size_bytes);
 
-            return 1;
+            return adios_errno;
         }
         else
         {
@@ -342,19 +402,23 @@ int common_adios_group_size (int64_t fd_p
         }
     }
 
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_group_size");
+#endif
     // each var will be added to the buffer by the adios_write calls
     // attributes will be added by adios_close
 
-    return 0;
+    return adios_errno;
 }
 
 int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_struct * v, void * var)
 {
     struct adios_method_list_struct * m = fd->group->methods;
 
+    adios_errno = err_no_error;
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
-        return 0;
+        return adios_errno;
     }
 
     if (v->data)
@@ -392,8 +456,7 @@ int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_str
                     adios_error (err_no_memory,
                                  "In adios_write, cannot allocate %lld bytes to copy scalar %s\n",
                                  element_size, v->name);
-
-                    return 0;
+                    return adios_errno;
                 }
 
                 memcpy ((char *) v->data, var, element_size);
@@ -406,8 +469,7 @@ int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_str
                     adios_error (err_no_memory,
                                  "In adios_write, cannot allocate %lld bytes to copy string %s\n",
                                  element_size, v->name);
-
-                    return 0;
+                    return adios_errno;
                 }
                 ((char *) v->data) [element_size] = 0;
                 memcpy ((char *) v->data, var, element_size);
@@ -422,28 +484,137 @@ int common_adios_write_byid (struct adios_file_struct * fd, struct adios_var_str
     common_adios_write (fd, v, var);
     // v->data is set to NULL in the above call
 
-    if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
-    {
-        adios_copy_var_written (&fd->group->vars_written, v, fd);
+    if (!adios_errno) {
+        if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
+        {
+            adios_copy_var_written (fd->group, v);
+        }
+    }
+
+    return adios_errno;
+}
+
+static int common_adios_write_transform_helper(struct adios_file_struct * fd, struct adios_var_struct * v) {
+    int use_shared_buffer = (fd->shared_buffer == adios_flag_yes);
+    int wrote_to_shared_buffer = 0;
+
+    // If we are using the shared buffer, transform the data directly into it
+    if (use_shared_buffer) {
+        uint16_t header_size = adios_calc_var_overhead_v1(v);
+        uint64_t header_offset;
+        uint64_t payload_offset;
+        uint64_t end_offset;
+
+        // Reserve space for the variable header (it will need to be written after
+        // the transform to capture updated metadata)
+        header_offset = fd->offset;
+        fd->offset += header_size;
+        payload_offset = fd->offset;
+
+        // This function will either:
+        // a) write to the shared buffer, leave v->data, v->data_size and
+        //    v->free_data untouched, and return 1, OR
+        // b) write to v->data, set v->data_size and v->free_data, and return 0
+        //
+        int success = adios_transform_variable_data(fd, v, use_shared_buffer, &wrote_to_shared_buffer);
+        if (!success) {
+            fd->offset = header_offset;
+            return 0;
+        }
+
+        // Assumption: we don't change the header size, just contents, in
+        // adios_transform_variable_data
+        assert(adios_calc_var_overhead_v1(v) == header_size);
+
+        // Store the ending offset of the payload write (if any)
+        end_offset = fd->offset;
+
+        // Rewind and write the header back where it should be
+        fd->offset = header_offset;
+        // var payload sent for sizing information
+        adios_write_var_header_v1(fd, v);
+
+        assert(fd->offset == payload_offset);
+
+        // If the data was stored to the shared buffer, update v->data,
+        // v->data_size and v->free_data. Else, write the payload to the shared
+        // buffer (the other v->* fields have already been updated)
+        if (wrote_to_shared_buffer) {
+            v->data = fd->buffer + payload_offset;
+            v->data_size = end_offset - payload_offset;
+            v->free_data = adios_flag_no;
+
+            // Update the buffer back to the end of the header+payload
+            fd->offset = end_offset;
+        } else {
+            // write payload
+            adios_write_var_payload_v1 (fd, v);
+
+            // fd->offset now points to the end of the header+payload
+        }
+
+        // Success!
+        return 1;
+    } else {
+        int ret = adios_transform_variable_data(fd, v, use_shared_buffer, &wrote_to_shared_buffer);
+
+        assert(!wrote_to_shared_buffer);
+        assert(v->data);
+
+        return ret;
     }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 /* common_adios_write is just a partial implementation. It expects filled out
- * structures. This is because C and Fortran implementations of adios_write are 
+ * structures. This is because C and Fortran implementations of adios_write are
  * different for some part and this is the common part.
  */
 int common_adios_write (struct adios_file_struct * fd, struct adios_var_struct * v, void * var)
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_write");
+#endif
+    adios_errno = err_no_error;
     struct adios_method_list_struct * m = fd->group->methods;
 
-    if (fd->shared_buffer == adios_flag_yes)
+    // NCSU ALACRITY-ADIOS - Do some processing here depending on the transform
+    //   type specified (if any)
+
+    // First, before doing any transform (or none), compute variable statistics,
+    // as we can't do this after the data is transformed
+    adios_generate_var_characteristics_v1 (fd, v);
+
+    // If no transform is specified, do the normal thing (write to shared
+    // buffer immediately, if one exists)
+    if (v->transform_type == adios_transform_none)
     {
-        // var payload sent for sizing information
-        adios_write_var_header_v1 (fd, v);
+        if (fd->shared_buffer == adios_flag_yes)
+        {
+            // var payload sent for sizing information
+            adios_write_var_header_v1 (fd, v);
 
-        // write payload
-        adios_write_var_payload_v1 (fd, v);
+            // write payload
+            adios_write_var_payload_v1 (fd, v);
+        }
+    }
+    // Else, do a transform
+    else
+    {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform");
+#endif
+        int success = common_adios_write_transform_helper(fd, v);
+        if (success) {
+            // Make it appear as if the user had supplied the transformed data
+            var = v->data;
+        } else {
+            log_error("Error: unable to apply transform %s to variable %s; likely ran out of memory, check previous error messages\n", adios_transform_plugin_primary_xml_alias(v->transform_type), v->name);
+            // FIXME: Reverse the transform metadata and write raw data as usual
+        }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform");
+#endif
     }
 
     // now tell each transport attached that it is being written
@@ -461,12 +632,26 @@ int common_adios_write (struct adios_file_struct * fd, struct adios_var_struct *
         m = m->next;
     }
 
+    // NCSU ALACRITY-ADIOS - Free transform-method-allocated data buffers
     if (v->dimensions)
     {
+        // TODO: Is this correct? Normally v->data is a user buffer, so we
+        //   can't free it. However, after a transform, we probably do need
+        //   to free it. We mark this by setting the free_data flag. However,
+        //   as this flag is hardly ever used, I don't know whether this is
+        //   using the flag correctly or not. Need verification with
+        //   Gary/Norbert/someone knowledgable about ADIOS internals.
+        if (v->transform_type != adios_transform_none && v->free_data == adios_flag_yes && v->data)
+            free(v->data);
         v->data = 0;
     }
 
-    return 0;
+    v->write_count++;
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_write");
+#endif
+    // printf ("var: %s written %d\n", v->name, v->write_count);
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -476,32 +661,30 @@ int common_adios_get_write_buffer (int64_t fd_p, const char * name
                            )
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
+    adios_errno = err_no_error;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
-
-        return 1;
+        return adios_errno;
     }
     struct adios_var_struct * v = fd->group->vars;
     struct adios_method_list_struct * m = fd->group->methods;
 
-    v = adios_find_var_by_name (v, name, fd->group->all_unique_var_names);
+    v = adios_find_var_by_name (fd->group, name);
 
     if (!v)
     {
         adios_error (err_invalid_varname, "Bad var name (ignored): '%s' (%c%c%c)\n",
                      name, name[0], name[1], name[2]);
-
-        return 1;
+        return adios_errno;
     }
 
     if (fd->mode == adios_mode_read)
     {
-        adios_error (err_invalid_file_mode, 
+        adios_error (err_invalid_file_mode,
                      "write attempted on %s in %s. This was opened for read\n",
                      name , fd->name);
-
-        return 1;
+        return adios_errno;
     }
 
     // since we are only getting one buffer, get it from the first
@@ -521,20 +704,22 @@ int common_adios_get_write_buffer (int64_t fd_p, const char * name
             m = m->next;
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+
 int common_adios_read (int64_t fd_p, const char * name, void * buffer
                ,uint64_t buffer_size
                )
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
+    adios_errno = err_no_error;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_group_size\n");
 
-        return 1;
+        return adios_errno;
     }
     struct adios_var_struct * v;
     struct adios_method_list_struct * m = fd->group->methods;
@@ -542,21 +727,19 @@ int common_adios_read (int64_t fd_p, const char * name, void * buffer
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
         // nothing to do so just return
-        return 0;
+        return err_no_error;
     }
 
     if (!(fd->mode == adios_mode_read))
     {
-        adios_error (err_invalid_file_mode, 
+        adios_error (err_invalid_file_mode,
                      "read attempted on %s which was opened for write\n",
                      fd->name);
 
-        return 1;
+        return adios_errno;
     }
 
-    v = adios_find_var_by_name (fd->group->vars, name
-                               ,fd->group->all_unique_var_names
-                               );
+    v = adios_find_var_by_name (fd->group, name);
     if (v)
     {
         // since can only read from one place into the buffer,
@@ -574,28 +757,30 @@ int common_adios_read (int64_t fd_p, const char * name, void * buffer
             }
             else
                 m = m->next;
-	}
+    }
     }
     else
     {
         adios_error (err_invalid_varname, "var %s in file %s not found on read\n",
                      name, fd->name);
 
-        return 1;
+        return adios_errno;
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// OBSOLETE, kept only for backward compatibility
 int common_adios_set_path (int64_t fd_p, const char * path)
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
+    adios_errno = err_no_error;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_set_path\n");
 
-        return 1;
+        return adios_errno;
     }
     struct adios_group_struct * t = fd->group;
     struct adios_var_struct * v = t->vars;
@@ -615,6 +800,13 @@ int common_adios_set_path (int64_t fd_p, const char * path)
 
     while (a)
     {
+        // skip internal attributes
+        if (a->path && strstr (a->path, "__adios__"))
+        {
+            a = a->next;
+            continue;
+        }
+
         if (a->path)
         {
             free (a->path);
@@ -625,26 +817,31 @@ int common_adios_set_path (int64_t fd_p, const char * path)
         a = a->next;
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// OBSOLETE, kept only for backward compatibility
+// Inconsistent behavior with new ADIOS variable naming
+// The variable is not replaced with the new path in the hash table here, so
+// it is still found using the old path!
 int common_adios_set_path_var (int64_t fd_p, const char * path
                        ,const char * name
                        )
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
+    adios_errno = err_no_error;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_set_path_var\n");
 
-        return 1;
+        return adios_errno;
     }
     struct adios_group_struct * t = fd->group;
     struct adios_var_struct * v = t->vars;
 
     // check for vars and then attributes
-    v = adios_find_var_by_name (t->vars, name, fd->group->all_unique_var_names);
+    v = adios_find_var_by_name (t, name);
 
     if (v)
     {
@@ -654,17 +851,28 @@ int common_adios_set_path_var (int64_t fd_p, const char * path
         }
 
         v->path = strdup (path);
+
+        /* Possible new behavior: replace the old path with the new path
+         * in the hash table so that the variable is found by
+         * the new path. Inconsistent with old codes that only used
+         * the variable name without the path in adios_write()
+         */
+        //remove var from hash table by old fullpath...
+        //t->hashtbl_vars->remove (t->hashtbl_vars, name);
+        // and add it back with new fullpath
+        //t->hashtbl_vars->put2 (t->hashtbl_vars, v->path, v->name, v);
+
     }
     else
     {
-        adios_error (err_invalid_varname, 
+        adios_error (err_invalid_varname,
                      "adios_set_path_var (path=%s, var=%s): var not found\n",
                      path, name);
 
-        return 1;
+        return adios_errno;
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -673,6 +881,7 @@ int common_adios_end_iteration ()
 {
     struct adios_method_list_struct * m;
 
+    adios_errno = err_no_error;
     for (m = adios_get_methods (); m; m = m->next)
     {
         if (   m->method->m != ADIOS_METHOD_UNKNOWN
@@ -685,7 +894,7 @@ int common_adios_end_iteration ()
         }
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -694,6 +903,7 @@ int common_adios_start_calculation ()
 {
     struct adios_method_list_struct * m;
 
+    adios_errno = err_no_error;
     for (m = adios_get_methods (); m; m = m->next)
     {
         if (   m->method->m != ADIOS_METHOD_UNKNOWN
@@ -706,7 +916,7 @@ int common_adios_start_calculation ()
         }
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -715,6 +925,7 @@ int common_adios_stop_calculation ()
 {
     struct adios_method_list_struct * m;
 
+    adios_errno = err_no_error;
     for (m = adios_get_methods (); m; m = m->next)
     {
         if (   m->method->m != ADIOS_METHOD_UNKNOWN
@@ -727,23 +938,32 @@ int common_adios_stop_calculation ()
         }
     }
 
-    return 0;
+    return adios_errno;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 int common_adios_close (int64_t fd_p)
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_close");
+#endif
+    adios_errno = err_no_error;
+
     struct adios_file_struct * fd = (struct adios_file_struct *) fd_p;
     if (!fd)
     {
         adios_error (err_invalid_file_pointer, "Invalid handle passed to adios_close\n");
 
-        return 1;
+        return adios_errno;
     }
     struct adios_method_list_struct * m = fd->group->methods;
     if (m && m->next == NULL && m->method->m == ADIOS_METHOD_NULL)
     {
         // nothing to do so just return
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_close");
+    timer_stop ("adios_open_to_close");
+#endif
         return 0;
     }
 
@@ -827,9 +1047,9 @@ int common_adios_close (int64_t fd_p)
             fd->group->vars_written->dimensions = dimensions;
         }
 
-		// NCSU - Clear stat
+        // NCSU - Clear stat
         if (fd->group->vars_written->stats)
-		{
+        {
             uint8_t j = 0, idx = 0;
             uint8_t c = 0, count = adios_get_stat_set_count(fd->group->vars_written->type);
 
@@ -856,7 +1076,11 @@ int common_adios_close (int64_t fd_p)
                 free (fd->group->vars_written->stats[c]);
             }
             free (fd->group->vars_written->stats);
-		}
+        }
+
+        // NCSU ALACRITY-ADIOS - Clear transform metadata
+        adios_transform_clear_transform_var(fd->group->vars_written);
+
         if (fd->group->vars_written->data)
             free (fd->group->vars_written->data);
 
@@ -872,8 +1096,32 @@ int common_adios_close (int64_t fd_p)
     }
 
     free ((void *) fd_p);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_close");
+    timer_stop ("adios_open_to_close");
+//    printf ("Timers, ");
+//    printf ("%d, ", fd->group->process_id);
+//    printf ("%d, ", fd->group->time_index);
+//    printf ("%lf, ", timer_get_total_interval ("adios_open" ));
+//    printf ("%lf, ", timer_get_total_interval ("adios_group_size"));
+//    printf ("%lf, ", timer_get_total_interval ("adios_transform" ));
+//    printf ("%lf, ", timer_get_total_interval ("adios_write" ));
+//    printf ("%lf\n", timer_get_total_interval ("adios_close"     ));
+//    timer_reset_timers ();
+
+    printf("[TIMERS] Proc: %d Time: %d ", fd->group->process_id, fd->group->time_index);
+    int i;
+    timer_result_t *results = timer_get_results_sorted();
+    for (i = 0; i < timer_get_num_timers(); i++) {
+        printf("%s: %0.4lf ", results[i].name, results[i].time);
+    }
+    printf("\n");
+    free(results);
+
+    //timer_reset_timers ();
+#endif
 
-    return 0;
+    return adios_errno;
 }
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/common_read.c b/src/core/common_read.c
index 83d3f62..c41517b 100644
--- a/src/core/common_read.c
+++ b/src/core/common_read.c
@@ -9,12 +9,22 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <assert.h>
+#include <inttypes.h>
 #include "public/adios_error.h"
 #include "core/adios_logger.h"
 #include "core/common_read.h"
-#include "core/adios_read_hooks.h"
 #include "core/futils.h"
 #include "core/bp_utils.h" // struct namelists_struct
+#include "core/qhashtbl.h"
+#include "public/adios_schema.h"
+
+// NCSU ALACRITY-ADIOS
+#include "adios_read_hooks.h"
+#include "transforms/adios_transforms_transinfo.h"
+#include "transforms/adios_transforms_hooks_read.h"
+#include "transforms/adios_transforms_reqgroup.h"
+#include "transforms/adios_transforms_datablock.h"
 #define BYTE_ALIGN 8
 
 #ifdef DMALLOC
@@ -44,8 +54,16 @@ struct common_read_internals_struct {
     char ** full_varnamelist;    /* fp->var_namelist to save here if one group is viewed */
     int     full_nattrs;         /* fp->nvars to save here for a group view */
     char ** full_attrnamelist;   /* fp->attr_namelist to save here if one group is viewed */
+    qhashtbl_t *hashtbl_vars;    /* speed up search for var_namelist to varid  */
+
+    // NCSU ALACRITY-ADIOS - Table of sub-requests issued by transform method
+    adios_transform_read_request *transform_reqgroups;
 };
 
+// NCSU ALACRITY-ADIOS - Forward declaration/function prototypes
+static void common_read_free_blockinfo(ADIOS_VARBLOCK **varblock, int sum_nblocks);
+
+
 
 int common_read_init_method (enum ADIOS_READ_METHOD method,
                              MPI_Comm comm,
@@ -64,6 +82,8 @@ int common_read_init_method (enum ADIOS_READ_METHOD method,
     } 
     // init the adios_read_hooks_struct if not yet initialized  
     adios_read_hooks_init (&adios_read_hooks); 
+    // NCSU ALACRITY-ADIOS - Initialize transform methods
+    adios_transform_read_init();
 
     // process common parameters here
     params = text_to_name_value_pairs (parameters);
@@ -155,6 +175,7 @@ ADIOS_FILE * common_read_open (const char * fname,
 {
     ADIOS_FILE * fp;
     struct common_read_internals_struct * internals; 
+    int i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         adios_error (err_invalid_read_method, 
@@ -167,12 +188,80 @@ ADIOS_FILE * common_read_open (const char * fname,
                     calloc(1,sizeof(struct common_read_internals_struct));
     // init the adios_read_hooks_struct if not yet initialized 
     adios_read_hooks_init (&adios_read_hooks); 
+    // NCSU ALACRITY-ADIOS - Initialize transform methods
+    adios_transform_read_init();
 
     internals->method = method;
     internals->read_hooks = adios_read_hooks;
 
     fp = adios_read_hooks[internals->method].adios_open_fn (fname, comm, lock_mode, timeout_sec);
+    if (!fp)
+        return fp;
+
+    // create hashtable from the variable names as key and their index as value
+    int hashsize = fp->nvars;
+    if (fp->nvars > 100) hashsize = 100;
+    internals->hashtbl_vars = qhashtbl(hashsize);
+    for (i=0; i<fp->nvars; i++) {
+        internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
+                                       (void *)i+1); // avoid 0 for error checking later
+    }
+
+    //read mesh names from attributes for example the var is using a mesh named trimesh, 
+    //we have /adios_schema/trimesh/type. We can extract trimesh from the string
+    fp->nmeshes = 0;
+    fp->mesh_namelist = NULL;
+    if (fp->attr_namelist)
+    {
+        char ** tmp = (char **) malloc (sizeof(char*) * fp->nattrs);
+        for (i=0; i<fp->nattrs; i++)
+        {
+            // find "/adios_schema/***/type" attributes for getting the names of meshes
+            if (strstr (fp->attr_namelist[i], "/adios_schema/") == fp->attr_namelist[i])   // starts with /adios_schema/
+            {
+                char *s = fp->attr_namelist[i]+strlen("/adios_schema/");
+                char *p = strchr (s, '/');  
+                if ( p && 
+                     strstr (p, "/type") == p)
+                {
+                    // retrieve the name of the mesh
+                    tmp [ fp->nmeshes ] = (char *) malloc (sizeof(char*) * (size_t)(p-s)+1);
+                    memcpy ( tmp[ fp->nmeshes ], s, (size_t)(p-s) ); 
+                    tmp[ fp->nmeshes ][(p-s)] = '\0'; 
+                    fp->nmeshes++;
+                }
+            }
+        }
+
+        if (fp->nmeshes) 
+        {
+            fp->mesh_namelist = (char **) realloc (tmp, sizeof (char *) * fp->nmeshes);
+            assert (fp->mesh_namelist);
+        }
 
+/*
+        int c = 0;
+        for (i=0; i<fp->nattrs; i++)
+        {
+            if (strstr (fp->attr_namelist[i], "/adios_schema") && strstr (fp->attr_namelist[i], "/type") &&
+                strcspn(fp->attr_namelist[i], "/adios_schema") == 0 && strcspn (fp->attr_namelist[i], "/type") == strlen(fp->attr_namelist[i]-strlen("/type")) )
+            {
+                fp->mesh_namelist[c] = (char *) malloc (strlen (fp->attr_namelist[i]) + 1);
+                assert (fp->mesh_namelist[c]);
+                //avoid to copy slash
+                strncpy (fp->mesh_namelist[c], fp->attr_namelist[i]+strlen("/adios_schema")+1, strlen(fp->attr_namelist[i])-strlen("/adios_schema")-strlen("/type")-1); 
+                c++;
+            }
+        }
+*/
+
+    }
+
+/*        for (i=0; i<fp->nmeshes; i++)
+        {
+            printf ("mesh: %s\n", fp->mesh_namelist[i]);
+        }*/
+    
     // save the method and group information in fp->internal_data
     if (fp){
         adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups, 
@@ -194,6 +283,7 @@ ADIOS_FILE * common_read_open_file (const char * fname,
 {
     ADIOS_FILE * fp;
     struct common_read_internals_struct * internals; 
+    int i;
 
     if ((int)method < 0 || (int)method >= ADIOS_READ_METHOD_COUNT) {
         adios_error (err_invalid_read_method, 
@@ -206,11 +296,59 @@ ADIOS_FILE * common_read_open_file (const char * fname,
                     calloc(1,sizeof(struct common_read_internals_struct));
     // init the adios_read_hooks_struct if not yet initialized 
     adios_read_hooks_init (&adios_read_hooks); 
+    // NCSU ALACRITY-ADIOS - Initialize transform methods
+    adios_transform_read_init();
 
     internals->method = method;
     internals->read_hooks = adios_read_hooks;
 
     fp = adios_read_hooks[internals->method].adios_open_file_fn (fname, comm);
+    if (!fp)
+        return fp;
+    
+    // create hashtable from the variable names as key and their index as value
+    int hashsize = fp->nvars;
+    if (fp->nvars > 100) hashsize = 100;
+    internals->hashtbl_vars = qhashtbl(hashsize);
+    for (i=0; i<fp->nvars; i++) {
+        internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
+                                       (void *)i+1); // avoid 0 for error checking later
+    }
+
+    //read mesh names from attributes for example the var is using a mesh named trimesh, 
+    //we have /adios_schema/trimesh/type. We can extract trimesh from the string
+    fp->nmeshes = 0;
+    fp->mesh_namelist = NULL;
+
+    if (fp->attr_namelist)
+    {
+        char ** tmp = (char **) malloc (sizeof(char*) * fp->nattrs);
+        for (i=0; i<fp->nattrs; i++)
+        {
+            // find "/adios_schema/***/type" attributes for getting the names of meshes
+            if (strstr (fp->attr_namelist[i], "/adios_schema/") == fp->attr_namelist[i])   // starts with /adios_schema/
+            {
+                char *s = fp->attr_namelist[i]+strlen("/adios_schema/");
+                char *p = strchr (s, '/');
+                if ( p &&
+                     strstr (p, "/type") == p)
+                {
+                    // retrieve the name of the mesh
+                    tmp [ fp->nmeshes ] = (char *) malloc (sizeof(char*) * (size_t)(p-s)+1);
+                    memcpy ( tmp[ fp->nmeshes ], s, (size_t)(p-s) );
+                    tmp[ fp->nmeshes ][(p-s)] = '\0';
+                    fp->nmeshes++;
+                }
+            }
+        }
+
+        if (fp->nmeshes)
+        {
+            fp->mesh_namelist = (char **) realloc (tmp, sizeof (char *) * fp->nmeshes);
+            assert (fp->mesh_namelist);
+        }
+
+    }
 
     // save the method and group information in fp->internal_data
     if (fp){
@@ -226,6 +364,16 @@ ADIOS_FILE * common_read_open_file (const char * fname,
     return fp;
 }
 
+// NCSU ALACRITY-ADIOS - Cleanup for read request groups
+#define MYFREE(p) {if (p) free((void*)p); (p)=NULL;}
+static void clean_up_read_reqgroups(adios_transform_read_request **reqgroups_head) {
+    adios_transform_read_request *removed;
+    while ((removed = adios_transform_read_request_pop(reqgroups_head)) != NULL) {
+        adios_transform_read_request_free(&removed);
+    }
+}
+#undef MYFREE
+
 int common_read_close (ADIOS_FILE *fp) 
 {
     struct common_read_internals_struct * internals;
@@ -238,10 +386,21 @@ int common_read_close (ADIOS_FILE *fp)
             // reset from group view before calling the real close
             common_read_group_view (fp, -1);
         }
+        int i;
+        if (fp->nmeshes) {
+            for (i=0; i<fp->nmeshes; i++)
+                free(fp->mesh_namelist[i]);
+            free(fp->mesh_namelist);
+        }
+                
         retval = internals->read_hooks[internals->method].adios_close_fn (fp);
         free_namelist (internals->group_namelist, internals->ngroups);
         free (internals->nvars_per_group);
         free (internals->nattrs_per_group);
+        // NCSU ALACRITY-ADIOS - Cleanup read request groups
+        clean_up_read_reqgroups(&internals->transform_reqgroups);
+        if (internals->hashtbl_vars)
+            internals->hashtbl_vars->free (internals->hashtbl_vars);
         free (internals);
     } else {
         adios_error ( err_invalid_file_pointer, "Invalid file pointer at adios_read_close()\n");
@@ -267,13 +426,26 @@ void common_read_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
 int common_read_advance_step (ADIOS_FILE *fp, int last, float timeout_sec)
 {
     struct common_read_internals_struct * internals;
+    int hashsize;
     int retval;
+    int i;
     
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
         retval = internals->read_hooks[internals->method].adios_advance_step_fn (fp, last, timeout_sec);
         if (!retval) {
+            // Re-create hashtable from the variable names as key and their index as value
+            if (internals->hashtbl_vars)
+                internals->hashtbl_vars->free (internals->hashtbl_vars);
+            hashsize = fp->nvars;
+            if (fp->nvars > 100) hashsize = 100;
+            internals->hashtbl_vars = qhashtbl(hashsize);
+            for (i=0; i<fp->nvars; i++) {
+                internals->hashtbl_vars->put (internals->hashtbl_vars, fp->var_namelist[i], 
+                        (void *)i+1); // avoid 0 for error checking later
+            }
+
             /* Update group information too */
             adios_read_hooks[internals->method].adios_get_groupinfo_fn (fp, &internals->ngroups, 
                     &internals->group_namelist, &internals->nvars_per_group, &internals->nattrs_per_group);
@@ -306,8 +478,45 @@ void common_read_release_step (ADIOS_FILE *fp)
     }
 }
 
+static int common_read_find_var (const ADIOS_FILE *fp, const char *name, int quiet)
+{
+    /** Find a string name in a list of names and return the index. 
+        Search should work with starting / characters and without.
+        Create adios error and return -1 if name is null or
+          if name is not found in the list.
+        role = 0 for variable search, 1 for attribute search
+     */
+    struct common_read_internals_struct * internals;
+    int varid = -1;
+    
+    adios_errno = err_no_error;
+
+    if (!name) {
+        if (!quiet)
+            adios_error (err_invalid_varname, "Null pointer passed as variable name!\n");
+        else
+            adios_errno = err_invalid_varname;
+        return -1;
+    }
+
+    if (fp) {
+        internals = (struct common_read_internals_struct *) fp->internal_data;
+
+        varid = (int) internals->hashtbl_vars->get (internals->hashtbl_vars, name);
+        // varid=0 is "not found", otherwise +1 bigger than actual varid
+        varid--;
+    }
 
-static int common_read_find_name (int n, char ** namelist, const char *name, int role)
+    if (varid == -1) {
+        if (!quiet)
+            adios_error (err_invalid_varname, "Variable '%s' is not found!\n", name);
+        else
+            adios_errno = err_invalid_varname;
+    }
+    return varid;
+}
+
+static int common_read_find_attr (int n, char ** namelist, const char *name, int quiet)
 {
     /** Find a string name in a list of names and return the index. 
         Search should work with starting / characters and without.
@@ -317,11 +526,12 @@ static int common_read_find_name (int n, char ** namelist, const char *name, int
      */
     int id, nstartpos=0, sstartpos;
     char ** s = namelist;
-    char *rolename[2] = { "variable", "attribute" };
-    enum ADIOS_ERRCODES roleerror[2] = { err_invalid_varname, err_invalid_attrname };
 
     if (!name) {
-        adios_error (roleerror[role!=0], "Null pointer passed as %s name!\n", rolename[role!=0]);
+        if (!quiet)
+            adios_error (err_invalid_attrname, "Null pointer passed as attribute name!\n");
+        else
+            adios_errno = err_invalid_attrname;
         return -1;
     }
 
@@ -336,13 +546,12 @@ static int common_read_find_name (int n, char ** namelist, const char *name, int
             break; // found this name
         s++;
     }
-
+    
     if (id == n) {
-        adios_error (roleerror[role!=0], "%s '%s' is not found! One "
-                "possible error is to set the view to a specific group and "
-                "then try to read a %s of another group. In this case, "
-                "reset the group view with adios_group_view(fp,-1).\n", 
-                rolename[role!=0], name, rolename[role!=0]);
+        if (!quiet)
+            adios_error (err_invalid_attrname, "Attribute '%s' is not found!\n", name);
+        else
+            adios_errno = err_invalid_attrname;
         return -1;
     }
     return id;
@@ -353,11 +562,11 @@ ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE *fp, const char * varname)
 {
     struct common_read_internals_struct * internals;
     ADIOS_VARINFO * retval;
-    
+ 
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
-        int varid = common_read_find_name (fp->nvars, fp->var_namelist, varname, 0);
+        int varid = common_read_find_var (fp, varname, 0);
         if (varid >= 0) {
             retval = common_read_inq_var_byid (fp, varid);
         } else {
@@ -370,9 +579,56 @@ ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE *fp, const char * varname)
     return retval;
 }
 
+// NCSU ALACRITY-ADIOS - For copying original metadata from transform
+//   info to inq var info
+static void patch_varinfo_with_transform_blockinfo(ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    common_read_free_blockinfo(&vi->blockinfo, vi->sum_nblocks);    // Free blockinfo in varinfo
+    vi->blockinfo = ti->orig_blockinfo;                                // Move blockinfo from transinfo to varinfo
+    ti->orig_blockinfo = 0;                                            // Delink blockinfo from transinfo
+}
+static void patch_varinfo_with_transinfo(ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    // First make room for the transform info fields
+    free(vi->dims);
+
+    // Now move them
+    vi->type = ti->orig_type;
+    vi->ndim = ti->orig_ndim;
+    vi->global = ti->orig_global;
+    vi->dims = ti->orig_dims;
+
+    // Finally, delink them from the transform info so they aren't inadvertently free'd
+    ti->orig_dims = 0;
 
+    patch_varinfo_with_transform_blockinfo(vi, ti); // Also move blockinfo if extant
+}
+
+// NCSU ALACRITY-ADIOS - Delegate to the 'inq_var_raw_byid' function, then
+//   patch the original metadata in from the transform info
 ADIOS_VARINFO * common_read_inq_var_byid (const ADIOS_FILE *fp, int varid)
 {
+    ADIOS_VARINFO *vi;
+    ADIOS_TRANSINFO *ti;
+
+    vi = common_read_inq_var_raw_byid(fp, varid);
+    if (vi == NULL)
+        return NULL;
+    
+    vi->meshinfo = NULL;
+
+    // NCSU ALACRITY-ADIOS - translate between original and transformed metadata if necessary
+    ti = common_read_inq_transinfo(fp, vi); // No orig_blockinfo
+    if (ti && ti->transform_type != adios_transform_none) {
+        patch_varinfo_with_transinfo(vi, ti);
+    }
+    common_read_free_transinfo(vi, ti);
+
+    return vi;
+}
+
+// NCSU ALACRITY-ADIOS - Renaming of common_read_inq_var_byid, named 'raw'
+//   because it is oblivious to the original metadata as stored in TRANSINFO
+ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE *fp, int varid)
+{
     struct common_read_internals_struct * internals;
     ADIOS_VARINFO * retval;
     
@@ -400,6 +656,55 @@ ADIOS_VARINFO * common_read_inq_var_byid (const ADIOS_FILE *fp, int varid)
     return retval;
 }
 
+// NCSU ALACRITY-ADIOS - common-layer inquiry function to read transform info.
+// NOTE: does not follow the normal pattern of adding the info into
+//   ADIOS_VARINFO because this information should not be sent to the user;
+//   only in rare cases will a user application need this information (like a
+//   query engine using an transform-embedded index), in which case that code
+//   can dive deeper and access this function. Alternatively, if this use case
+//   becomes more common, a simple 'transform raw' API could be added.
+ADIOS_TRANSINFO * common_read_inq_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi) {
+    if (!fp) {
+        adios_error (err_invalid_file_pointer,
+                     "Null ADIOS_FILE pointer passed to common_read_inq_transinfo()\n");
+        return NULL;
+    }
+    if (!vi) {
+        adios_error (err_invalid_argument,
+                     "Null ADIOS_VARINFO pointer passed to common_read_inq_transinfo()\n");
+        return NULL;
+    }
+
+    struct common_read_internals_struct * internals;
+    internals = (struct common_read_internals_struct *) fp->internal_data;
+
+    ADIOS_TRANSINFO *ti = internals->read_hooks[internals->method].adios_inq_var_transinfo_fn(fp, vi);
+    return ti;
+}
+
+int common_read_inq_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO * ti) {
+    if (!fp) {
+        adios_error (err_invalid_argument,
+                     "Null ADIOS_FILE pointer passed to common_read_inq_trans_blockinfo()\n");
+        return 1;
+    }
+    if (!vi) {
+        adios_error (err_invalid_argument,
+                     "Null ADIOS_VARINFO pointer passed to common_read_inq_trans_blockinfo()\n");
+        return 1;
+    }
+    if (!ti) {
+        adios_error (err_invalid_argument,
+                     "Null ADIOS_TRANSINFO pointer passed to common_read_inq_trans_blockinfo()\n");
+        return 1;
+    }
+
+    struct common_read_internals_struct * internals;
+    internals = (struct common_read_internals_struct *) fp->internal_data;
+    return internals->read_hooks[internals->method].adios_inq_var_trans_blockinfo_fn(fp, vi, ti);
+}
+
+
 
 int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
                              int per_step_stat, int per_block_stat)
@@ -426,8 +731,34 @@ int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
     return retval;
 }
 
+// NCSU ALACRITY-ADIOS - Delegate to the 'inq_var_blockinfo_raw' function, then
+//   patch the original metadata in from the transform info
 int common_read_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
 {
+    ADIOS_TRANSINFO *ti;
+
+    int retval = common_read_inq_var_blockinfo_raw(fp, varinfo);
+    if (retval != err_no_error)
+        return retval;
+
+    // NCSU ALACRITY-ADIOS - translate between original and transformed metadata if necessary
+    ti = common_read_inq_transinfo(fp, varinfo);
+    if (ti && ti->transform_type != adios_transform_none) {
+        retval = common_read_inq_trans_blockinfo(fp, varinfo, ti);
+        if (retval != err_no_error)
+            return retval;
+
+        patch_varinfo_with_transform_blockinfo(varinfo, ti);
+    }
+    common_read_free_transinfo(varinfo, ti);
+
+    return err_no_error;
+}
+
+// NCSU ALACRITY-ADIOS - Renaming of common_read_inq_var_blockinfo, named 'raw'
+//   because it is oblivious to the original metadata as stored in TRANSINFO
+int common_read_inq_var_blockinfo_raw (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
+{
     struct common_read_internals_struct * internals;
     int retval;
     int group_varid;
@@ -450,20 +781,26 @@ int common_read_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo
     return retval;
 }
 
-#define MYFREE(p) {free(p); p=NULL;}
-void common_read_free_varinfo (ADIOS_VARINFO *vp)
-{
+#define MYFREE(p) {free(p); (p)=NULL;}
+// NCSU ALACRITY-ADIOS - Factored this out to use elsewhere
+static void common_read_free_blockinfo(ADIOS_VARBLOCK **varblock, int sum_nblocks) {
+    if (*varblock) {
     int i;
-    if (vp) {
-        if (vp->blockinfo) {
-            ADIOS_VARBLOCK *bp = vp->blockinfo;
-            for (i=0; i<vp->sum_nblocks; i++) {
+        ADIOS_VARBLOCK *bp = *varblock;
+        for (i = 0; i < sum_nblocks; i++) {
                 if (bp->start) MYFREE (bp->start);
                 if (bp->count) MYFREE (bp->count);
                 bp++;
             }
-            MYFREE(vp->blockinfo);
+        MYFREE(*varblock);
         }
+}
+
+void common_read_free_varinfo (ADIOS_VARINFO *vp)
+{
+    int i;
+    if (vp) {
+        common_read_free_blockinfo(&vp->blockinfo, vp->sum_nblocks);
 
         if (vp->statistics) {
             ADIOS_VARSTAT *sp = vp->statistics;
@@ -501,17 +838,2058 @@ void common_read_free_varinfo (ADIOS_VARINFO *vp)
         if (vp->dims)    MYFREE(vp->dims);
         if (vp->value)   MYFREE(vp->value);
         if (vp->nblocks) MYFREE(vp->nblocks);
-
+        if (vp->meshinfo) MYFREE(vp->meshinfo);
         free(vp);
     }
 }
 
+// NCSU ALACRITY-ADIOS - Free transform info
+void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    if (ti) {
+        if (ti->orig_dims) MYFREE(ti->orig_dims);
+        if (ti->transform_metadata && ti->should_free_transform_metadata)
+            MYFREE(ti->transform_metadata);
+
+        common_read_free_blockinfo(&ti->orig_blockinfo, vi->sum_nblocks);
+
+        free(ti);
+    }
+}
+#undef MYFREE
+
+
+// the function is the same as common_read_get_attr_byid
+// but no ERROR msg print out
+// called by common_read_get_attr_mesh
+int common_read_get_attr_byid_mesh (const ADIOS_FILE * fp,
+                               int attrid,
+                               enum ADIOS_DATATYPES * type,
+                               int * size,
+                               void ** data)
+{
+    struct common_read_internals_struct * internals;
+    int retval;
+
+    adios_errno = err_no_error;
+    if (fp) {
+        if (attrid >= 0 && attrid < fp->nattrs) {
+            internals = (struct common_read_internals_struct *) fp->internal_data;
+            retval = internals->read_hooks[internals->method].adios_get_attr_byid_fn (fp, attrid+internals->group_attrid_offset, type, size, data);
+        } else {
+            retval = err_invalid_attrid;
+        }
+    } else {
+        adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_read_get_attr_byid()\n");
+        retval = err_invalid_file_pointer;
+    }
+    return retval;
+}
+
+// this function is almost the same as common_read_get_attr
+// just to avoid the ERROR msg when some attributes are not found
+// for example spacing/maximum are optinal in uniform mesh
+int common_read_get_attr_mesh (const ADIOS_FILE * fp,
+                            const char * attrname,
+                            enum ADIOS_DATATYPES * type,
+                            int * size,
+                            void ** data)
+{
+    struct common_read_internals_struct * internals;
+    int retval;
+
+    adios_errno = err_no_error;
+    if (fp) {
+        internals = (struct common_read_internals_struct *) fp->internal_data;
+        int attrid = common_read_find_attr (fp->nattrs, fp->attr_namelist, attrname, 1);
+        if (attrid > -1) {
+            retval = common_read_get_attr_byid_mesh (fp, attrid, type, size, data);
+        } else {
+            retval = adios_errno; // adios_errno was set in common_read_find_attr
+        }
+    } else {
+        adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_read_get_attr()\n");
+        retval = err_invalid_file_pointer;
+    }
+    return retval;
+}
+
+int common_read_inq_var_meshinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
+{
+    enum ADIOS_DATATYPES attr_type;
+    int  attr_size;
+    int  read_fail = 0;
+    void * data = NULL;
+    int i;
+    int match;
+
+    varinfo->meshinfo = (ADIOS_VARMESH *) malloc (sizeof(ADIOS_VARMESH));
+    char * var_name = strdup (fp->var_namelist[varinfo->varid]);
+//    printf ("var name is %s\n", var_name);
+    char * var_mesh = malloc (strlen(var_name)+strlen("/adios_schema")+1);
+    strcpy (var_mesh, var_name);
+    strcat (var_mesh, "/adios_schema");
+    
+    read_fail = common_read_get_attr_mesh (fp, var_mesh, &attr_type, &attr_size, &data); 
+    if (read_fail)
+    {
+//        adios_error (err_no_matching_mesh_var,
+//                     "No matching mesh for var %s.\n", 
+//                     var_nme);
+        varinfo->meshinfo = NULL;
+        return 1;
+    }
+    else
+    {
+        match = 0;
+//        printf ("meshname from attr is %s\n", (char *)data);
+        for (i=0; i<fp->nmeshes; i++)
+        {
+//            printf ("mesh name is %s\n", fp->mesh_namelist[i]);
+            if ( !strcmp(fp->mesh_namelist[i], (char *)data))
+            {
+                match = 1;
+                varinfo->meshinfo->meshid = i;
+            }
+        }
+        if (match == 0)
+        {
+//            adios_error (err_mesh_missing,
+//                         "Mesh %s for var %s is not stored in meshlist.\n", 
+//                         (char *)data, var_name);
+            varinfo->meshinfo = NULL;
+            return 1;
+        }
+    }
+
+    // point centering or cell centering
+    char * data_centering = malloc (strlen(var_mesh)+strlen("/centering")+1);
+    strcpy (data_centering, var_mesh);
+    strcat (data_centering, "/centering");
+    read_fail = common_read_get_attr_mesh (fp, data_centering, &attr_type, &attr_size, &data); 
+//    printf ("attr data_centering is %s\n", data_centering);
+    free (data_centering);
+    free (var_mesh);
+    if (read_fail)        // if no attr for centering
+    {
+//        char * meshtype = malloc (strlen("/adios_schema/")+strlen(var_name)+strlen("/type")+1);
+//        strcpy (meshtype, "/adios_schema/");
+//        strcat (meshtype, fp->mesh_namelist[varinfo->meshinfo->meshid]);      
+//        strcat (meshtype, "/type");
+//        printf ("attr meshtype is %s\n", meshtype);
+//        data = NULL;
+//        read_fail = common_read_get_attr_mesh (fp, meshtype, &attr_type, &attr_size, &data);
+//        if (read_fail)
+//        {
+//            adios_error (err_mesh_name_attr_missing,
+//                         "Mesh name from attr %s is not available\n", 
+//                         meshtype);
+//            free (meshtype);
+//            return 1;
+//        }
+//        else
+//        {
+//            free (meshtype);
+//            if (!strcmp((char *)data, "unstructured"))
+//            {
+                adios_error (err_mesh_unstructured_centering_missing,
+                             "Centering info of var %s on mesh %s is required\n",
+                             var_name, fp->mesh_namelist[varinfo->meshinfo->meshid]);
+                varinfo->meshinfo = NULL; 
+                return 1;
+//            }
+//        }
+    }
+    else
+    {
+        if (!strcmp((char *)data, "point"))
+        {
+            varinfo->meshinfo->centering = 1;      // point centering
+        }
+        else if (!strcmp((char *)data, "cell"))
+        {
+            varinfo->meshinfo->centering = 2;      // cell centering
+        }
+        else
+        {
+            adios_error (err_mesh_unstructured_centering_invalid,
+                         "Centering method of var %s on mesh %s is not supported (point/cell).\n", 
+                         var_name, fp->mesh_namelist[varinfo->meshinfo->meshid]);
+            varinfo->meshinfo = NULL;
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+
+int adios_get_uniform_mesh_attr (ADIOS_FILE * fp, ADIOS_MESH *meshinfo, char * attrs)      //attr for origins-num(origins), spacings-num(spacings), maximums-num(maximums)
+{
+    int i, j;
+    enum ADIOS_DATATYPES attr_type;
+    int attr_size;
+    void * data = NULL;
+    int  read_fail = 0;
+    bool have_max = 0;
+    bool have_spacing = 0;
+    int varid;
+
+    char * attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/")+strlen(attrs)+strlen("-num")+1 );
+    strcpy (attribute, "/adios_schema/");
+    strcat (attribute, meshinfo->name);
+    strcat (attribute, "/");
+    strcat (attribute, attrs);
+    strcat (attribute, "-num");
+//    printf("attribute is %s\n", attribute);
+    data = NULL;
+    read_fail = common_read_get_attr_mesh (fp, attribute, &attr_type, &attr_size, &data);
+    free (attribute);
+    if (!read_fail)                       //found attributes maximums/spacings/origins
+    {
+        int num_attr = *(int *)data;
+        if (num_attr != meshinfo->uniform->num_dimensions)
+        {
+            if (!strcmp (attrs,"origins"))
+            {
+                num_attr = meshinfo->uniform->num_dimensions;
+                log_warn ("Uniform mesh %s number of origins %d does not match number of dimensions %d!" 
+                          "We use number of dimensions for origins\n", 
+                          meshinfo->name, num_attr, meshinfo->uniform->num_dimensions);
+            }
+            else if (!strcmp (attrs, "spacings"))
+            {
+                num_attr = meshinfo->uniform->num_dimensions;
+                log_warn ("Uniform mesh %s number of origins %d does not match number of dimensions %d!" 
+                          "We use number of dimensions for spacings\n", 
+                          meshinfo->name, num_attr, meshinfo->uniform->num_dimensions);
+            }
+            else if (!strcmp (attrs, "maximums"))
+            {
+                if (num_attr < meshinfo->uniform->num_dimensions)
+                {
+                    adios_error (err_mesh_unifrom_invalid_num_max,
+                                 "Uniform mesh %s number of maximums %d is less than the number of dimensions %d!\n", 
+                                 meshinfo->name, num_attr, meshinfo->uniform->num_dimensions);
+                    meshinfo->uniform = NULL;
+                    return -1; 
+                }
+                else if (num_attr > meshinfo->uniform->num_dimensions)
+                {
+                    num_attr = meshinfo->uniform->num_dimensions;
+                    log_warn ("Uniform mesh %s provided number of maximums %d is greater than the number of dimensions %d!" 
+                              "We use number of dimentions for maximums and ignore the rest maximums\n", 
+                              meshinfo->name, num_attr, meshinfo->uniform->num_dimensions);
+                }
+            }
+        }
+        if (!strcmp (attrs,"origins"))
+        {
+            meshinfo->uniform->origins = (double *) malloc (sizeof(double)*num_attr);
+            for (i = 0; i < num_attr; i++ )
+                meshinfo->uniform->origins[i] = 0.0;
+        }
+        else if (!strcmp (attrs, "spacings"))
+        {
+            have_spacing = 1;
+            meshinfo->uniform->spacings = (double *) malloc (sizeof(double)*num_attr);
+            for (i = 0; i < num_attr; i++ )
+            {
+                meshinfo->uniform->spacings[i] = 1.0;
+//                printf("meshinfo->uniform->spacings[%d] = %lf\n", i, meshinfo->uniform->spacings[i]);
+            }
+        }
+        else if (!strcmp (attrs, "maximums"))
+        {
+            have_max = 1;
+            meshinfo->uniform->maximums = (double *) malloc (sizeof(double)*num_attr);
+            for (i = 0; i < num_attr; i++ )
+                meshinfo->uniform->maximums[i] = 0.0;
+        }
+
+        for (i = 0; i < num_attr; i++ )
+        {
+            char * i_buffer;
+            int i_digits;
+            if (num_attr < 10)
+                i_buffer = (char *) malloc (sizeof(char)+1);
+            else
+            {
+                adios_error (err_mesh_unifrom_invalid_num_dims,
+                             "Uniform mesh %s has more than 10 dimensions!\n", 
+                             meshinfo->name);
+                meshinfo->uniform = NULL;
+                return 0; 
+            }
+            i_digits = sprintf (i_buffer, "%d", i);
+            //i_digits to reprent the number in dimensions0/dimensions1/... 
+            char * value = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/")+strlen(attrs)+i_digits+1 );
+            strcpy (value, "/adios_schema/");
+            strcat (value, meshinfo->name);
+            strcat (value, "/");
+            strcat (value, attrs);
+            strcat (value, i_buffer);
+//            printf("origin_value is %s\n", value);
+            free (i_buffer);
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, value, &attr_type, &attr_size, &data);
+            free (value);
+            if (read_fail)
+            {
+                if (!strcmp (attrs, "origins"))
+                {
+                    log_warn ("Uniform mesh %s origins[%d] value is missing.\n"
+                              "We use default value 0.\n",
+                              meshinfo->name, i);
+                }
+                else if (!strcmp (attrs, "maximums"))
+                {
+                    adios_error (err_mesh_unifrom_missing_maximum,
+                                 "Uniform mesh %s maximums[%d] is not provided!\n", 
+                                 meshinfo->name, i);
+                    meshinfo->uniform = NULL;
+                    return -1; 
+                }
+                else if (!strcmp (attrs, "spacings"))
+                {
+                    log_warn ("Uniform mesh %s spacings[%d] value is missing.\n"
+                              "We use default value 1.\n", 
+                              meshinfo->name, i);
+                }
+            }
+            else
+            {
+                char * pEnd;
+                double d1;
+                char * tmp_dimensions_value = strdup((char *)data);
+                d1 = strtod (tmp_dimensions_value, &pEnd);
+                if ( pEnd && pEnd[0]==0 ) // pEnd points to the terminating \0 of the string 
+                {
+                    // string was a number
+                    if (!strcmp (attrs, "origins"))
+                        meshinfo->uniform->origins[i] = d1;                           //
+                    else if (!strcmp (attrs, "maximums"))
+                        meshinfo->uniform->maximums[i] = d1;
+                    else if (!strcmp (attrs, "spacings"))
+                        meshinfo->uniform->spacings[i] = d1;
+                }
+                else
+                {
+                    // string may be a variable
+                    char * value_tmp = strdup((char *)data);
+                    varid = common_read_find_var (fp, value_tmp, 1);
+                    if (varid >= 0)
+                    {
+                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        if (!strcmp (attrs, "origins"))
+                        {
+                            if (v->type == adios_real)   
+                                meshinfo->uniform->origins[i] = *(float *)v->value;                        
+                            else if (v->type == adios_double)   
+                                meshinfo->uniform->origins[i] = *(double *)v->value;
+                            else if (v->type == adios_byte)
+                                meshinfo->uniform->origins[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->uniform->origins[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->uniform->origins[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->uniform->origins[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->uniform->origins[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->uniform->origins[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->uniform->origins[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)
+                                meshinfo->uniform->origins[i] = *(unsigned long long *)v->value;
+                            else
+                            {
+                                adios_error (err_mesh_unifrom_invalid_var_type,
+                                             "Uniform mesh %s origins support (unsigned) char, (unsigned) short, "
+                                             "(unsigned) int,(unsigned) long long, float and double\n", 
+                                             meshinfo->name);
+                                meshinfo->uniform = NULL;
+                                return -1;
+                            }
+                        }
+                        else if (!strcmp (attrs, "maximums"))
+                        {
+                            if (v->type == adios_real)    
+                                 meshinfo->uniform->maximums[i] = *(float *)v->value;
+                            else if (v->type == adios_double)   
+                                meshinfo->uniform->maximums[i] = *(double *)v->value;
+                            else if (v->type == adios_byte)
+                                meshinfo->uniform->maximums[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->uniform->maximums[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->uniform->maximums[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->uniform->maximums[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->uniform->maximums[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->uniform->maximums[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->uniform->maximums[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)
+                                meshinfo->uniform->maximums[i] = *(unsigned long long *)v->value;
+                            else
+                            {
+                                adios_error (err_mesh_unifrom_invalid_var_type,
+                                             "Uniform mesh %s maximums support (unsigned) char, (unsigned) short, "
+                                             "(unsigned) int, (unsigned) long long, float and double\n",
+                                             meshinfo->name);
+                                meshinfo->uniform = NULL;
+                                return -1;
+                            }
+                        }
+                        else if (!strcmp (attrs, "spacings"))
+                        {
+                            if (v->type == adios_real)    
+                                meshinfo->uniform->spacings[i] = *(float *)v->value;
+                            else if (v->type == adios_double)    
+                                meshinfo->uniform->spacings[i] = *(double *)v->value;
+                            else if (v->type == adios_byte)
+                                meshinfo->uniform->spacings[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->uniform->spacings[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->uniform->spacings[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->uniform->spacings[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->uniform->spacings[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->uniform->spacings[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->uniform->spacings[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)
+                                meshinfo->uniform->spacings[i] = *(unsigned long long *)v->value; 
+                            else 
+                            {
+                                adios_error (err_mesh_unifrom_invalid_var_type,
+                                             "Uniform mesh %s spacings support (unsigned) char, (unsigned) short, "
+                                             "(unsigned) int, (unsigned) long long, float and double\n",
+                                             meshinfo->name); 
+                                 meshinfo->uniform = NULL;
+                                 return -1;
+                            }
+//                            printf ("meshinfo->uniform->spacings[%d] = %lf\n",i, meshinfo->uniform->spacings[i]);
+                        }
+                        common_read_free_varinfo (v);
+                    }
+                    else
+                    {
+                        if (!strcmp (attrs, "origins"))
+                        {
+                            log_warn ("Uniform mesh %s origins%d var %s is not provided. \n"
+                                      "We use default value 0.\n", 
+                                      meshinfo->name, i, (char *)data);
+                        }
+                        else if (!strcmp (attrs, "maximums"))
+                        {
+                            adios_error (err_mesh_unifrom_missing_maximum,
+                                         "Uniform mesh %s maximums%d var %s is not provided.\n", 
+                                         meshinfo->name, i, (char *)data);
+                            meshinfo->uniform = NULL;
+                            return -1; 
+                        }
+                        else if (!strcmp (attrs, "spacings"))
+                        {
+                            log_warn ("Uniform mesh %s spacings%d var %s is not provided. \n"
+                                      "We use default value 1.\n", 
+                                      meshinfo->name, i, (char *)data);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    else                //not found attributes maximums/spacings/origins
+    {
+        if (!strcmp (attrs,"origins"))
+        {
+            meshinfo->uniform->origins = (double *) malloc (sizeof(double)*meshinfo->uniform->num_dimensions);
+            for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+                meshinfo->uniform->origins[i] = 0.0;
+            log_info ("Uniform mesh %s does not provide origin info."
+                      "We use default value 0.\n", 
+                      meshinfo->name);
+        }
+        else if (!strcmp (attrs, "spacings"))
+        {
+            have_spacing = 1;
+            meshinfo->uniform->spacings = (double *) malloc (sizeof(double)*meshinfo->uniform->num_dimensions);
+            for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+                meshinfo->uniform->spacings[i] = 1.0;
+            log_info ("Uniform mesh %s does not provide spacing info."
+                      "We use default value 1.\n", 
+                      meshinfo->name);
+        }
+        else if (!strcmp (attrs, "maximums"))
+        {
+            meshinfo->uniform->maximums = (double *) malloc (sizeof(double)*meshinfo->uniform->num_dimensions);
+            for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+            {
+                meshinfo->uniform->maximums[i] = ((double)meshinfo->uniform->dimensions[i]-1.0)*meshinfo->uniform->spacings[i]+meshinfo->uniform->origins[i];
+//                printf("max[%d] is %lf \n", i, meshinfo->uniform->maximums[i]);
+            }
+            log_info ("Uniform mesh %s does not provide maximums info.\n" 
+                      "We calculate maximums based on origins and spacings. \n", 
+                      meshinfo->name);
+        }
+
+    }
+
+    if (have_max || have_spacing)
+        return 1;
+    else
+        return 0;
+
+}
+
+
+ADIOS_MESH * common_read_inq_mesh_byid (ADIOS_FILE *fp, int meshid)
+{
+    enum ADIOS_DATATYPES attr_type;
+    int attr_size;
+    void * data = NULL;
+    int  read_fail = 0;
+    int i, j, varid;
+
+    ADIOS_MESH * meshinfo = (ADIOS_MESH *) malloc (sizeof(ADIOS_MESH));
+    //mesh id
+    meshinfo->id = meshid;
+    //mesh name
+    meshinfo->name = strdup(fp->mesh_namelist[meshinfo->id]);
+    //construct /adios_schema/***/time-varying
+    //mesh time-varying
+    char * time_varying = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/time-varying")+1 );
+    strcpy (time_varying, "/adios_schema/");
+    strcat (time_varying, meshinfo->name);
+    strcat (time_varying, "/time-varying");
+    read_fail = common_read_get_attr_mesh (fp, time_varying, &attr_type, &attr_size, &data);
+    free (time_varying);
+    if (read_fail)
+        meshinfo->time_varying = 0;
+    else
+    {
+        if ( !strcmp ((char *)data,"yes") )
+            meshinfo->time_varying = 1;  
+        else
+            meshinfo->time_varying = 0;
+    }
+    //construct /adios_schema/***/type to get mesh type (uniform, rectilinear, structured, unstructured)
+    //mesh type
+    char * mesh_attribute = malloc ( strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/type")+1 );
+    strcpy (mesh_attribute, "/adios_schema/");
+    strcat (mesh_attribute, meshinfo->name);
+    strcat (mesh_attribute, "/type");
+    common_read_get_attr_mesh (fp, mesh_attribute, &attr_type, &attr_size, &data);
+    free (mesh_attribute);
+    if ( !strcmp((char *)data, "uniform") )
+    {
+        bool have_spacing = 0;
+        bool have_max = 0;
+
+        meshinfo->type = ADIOS_MESH_UNIFORM;
+        meshinfo->uniform = (MESH_UNIFORM * ) malloc (sizeof(MESH_UNIFORM));
+
+        // initialize pointers that might not be set below
+        meshinfo->uniform->spacings = NULL;
+        meshinfo->uniform->maximums = NULL;
+        meshinfo->uniform->origins = NULL;
+        
+        char * dimension_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions-num")+1 );
+        strcpy (dimension_attribute, "/adios_schema/");
+        strcat (dimension_attribute, meshinfo->name);
+        strcat (dimension_attribute, "/dimensions-num");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, dimension_attribute, &attr_type, &attr_size, &data);
+        free (dimension_attribute);
+//        printf("dimension_attribute is %s\n", dimension_attribute);
+//        printf("dimension is %d\n",*(int *)data);
+        if (!read_fail)
+        {
+            meshinfo->uniform->num_dimensions = *(int *)data;
+            meshinfo->uniform->dimensions = (uint64_t *) malloc (sizeof(uint64_t)*meshinfo->uniform->num_dimensions);
+            for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+            {
+                meshinfo->uniform->dimensions[i] = 0;
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->uniform->num_dimensions < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else
+                {
+                    adios_error (err_mesh_unifrom_invalid_num_dims,
+                                 "Uniform mesh %s has more than 10 dims!\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                //i_digits to reprent the number in dimensions0/dimensions1/... 
+                char * dimensions_value = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions")+i_digits+1 );
+                strcpy (dimensions_value, "/adios_schema/");
+                strcat (dimensions_value, meshinfo->name);
+                strcat (dimensions_value, "/dimensions");
+                strcat (dimensions_value, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, dimensions_value, &attr_type, &attr_size, &data);
+                free (dimensions_value);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_unifrom_missing_one_dim,
+                                 "Uniform mesh %s dimensions[%d] is not provided!\n", 
+                                 meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    char * pEnd;
+                    char * tmp_dimensions_value = strdup((char *)data);
+                    uint64_t tmp_value = strtoull (tmp_dimensions_value, &pEnd, 10);
+//                    if (tmp_value)
+                    if ( pEnd && pEnd[0]==0 )
+                        meshinfo->uniform->dimensions[i] = tmp_value;
+                    else
+                    {
+                        char * dimensions_value_tmp = strdup((char *)data);
+                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        if (varid >= 0) {
+                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            if (v->type == adios_byte)
+                                meshinfo->uniform->dimensions[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->uniform->dimensions[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->uniform->dimensions[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->uniform->dimensions[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->uniform->dimensions[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->uniform->dimensions[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->uniform->dimensions[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)
+                                meshinfo->uniform->dimensions[i] = *(unsigned long long *)v->value;
+
+                            common_read_free_varinfo (v);
+                        }
+                        else
+                        {
+                            adios_error (err_mesh_unifrom_invalid_dim,
+                                         "Uniform mesh %s dimensions%d var %s is not correct!\n", 
+                                         meshinfo->name, i, (char *)data);
+                            return NULL; 
+                        }
+//                        free (dimensions_value_tmp);
+                    }
+                }  
+            }
+        }
+        else
+        {
+            adios_error (err_mesh_unifrom_missing_dims,
+                         "Uniform mesh %s dimension is required\n", 
+                         meshinfo->name);
+            return NULL;            
+        }
+
+        //start processing origins, origin is optional
+        int have_origins;
+        have_origins = adios_get_uniform_mesh_attr (fp, meshinfo, "origins");
+        if (have_origins == -1)
+            return NULL;
+//        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+//            printf ("origins[%d] is %lf\n", i, meshinfo->uniform->origins[i]);
+
+        //start processing spacings, spacing is optional 
+        int have_spacings;
+        have_spacings = adios_get_uniform_mesh_attr (fp, meshinfo, "spacings");
+        if (have_spacings == -1)
+            return NULL;
+//        for (i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+//            printf ("spacings[%d] is %lf\n", i, meshinfo->uniform->spacings[i]);
+
+        //start processing maximums, maximum is optional
+        int have_maximums;
+        have_maximums = adios_get_uniform_mesh_attr (fp, meshinfo, "maximums");
+        if (have_maximums == -1)
+            return NULL;
+//        for (int i = 0; i < meshinfo->uniform->num_dimensions; i++ )
+//            printf ("maximums[%d] is %lf\n", i, meshinfo->uniform->maximums[i]);
+
+        //if mesh spacing and maximum are both defined, check if consistant
+        if (have_spacings == 1 && have_maximums == 1)
+        {
+            for (i = 0; i < meshinfo->uniform->num_dimensions; i++)
+            {
+                if (meshinfo->uniform->spacings[i] != (meshinfo->uniform->maximums[i]-meshinfo->uniform->origins[i])/(double)(meshinfo->uniform->dimensions[i]-1))
+                {
+//                    printf ( "meshinfo->uniform->origins = %lf,  meshinfo->uniform->dimensions = %lf\n", meshinfo->uniform->origins[i], meshinfo->uniform->dimensions[i]);
+                    adios_error (err_mesh_unifrom_max_conflict,
+                                 "Uniform mesh %s provided uniform mesh spacing and maximum is not consistant "
+                                 "provided spacing is %lf, calculated spacing is %lf\n", 
+                                 meshinfo->name, meshinfo->uniform->spacings[i], 
+                                 (meshinfo->uniform->maximums[i]-meshinfo->uniform->origins[i])/(double)(meshinfo->uniform->dimensions[i]-1));
+                    return NULL; 
+                }
+            }
+        }
+//end of uniform mesh 
+    }
+    else if ( !strcmp((char *)data, "rectilinear") )   
+    {
+        meshinfo->type = ADIOS_MESH_RECTILINEAR;
+        meshinfo->rectilinear = (MESH_RECTILINEAR * ) malloc (sizeof(MESH_RECTILINEAR));
+        meshinfo->rectilinear->use_single_var = 0;    // default value 0 indicates using multi-var
+
+        // start processing rectilinear mesh dimensions
+        char * dimension_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions-num")+1 );
+        strcpy (dimension_attribute, "/adios_schema/");
+        strcat (dimension_attribute, meshinfo->name);
+        strcat (dimension_attribute, "/dimensions-num");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, dimension_attribute, &attr_type, &attr_size, &data);
+        free (dimension_attribute);
+        if (!read_fail)
+        {
+            meshinfo->rectilinear->num_dimensions = *(int *)data;
+//            printf ("the dimension is %d\n", meshinfo->rectilinear->num_dimensions);
+            meshinfo->rectilinear->dimensions = (uint64_t *) malloc (sizeof(uint64_t)*meshinfo->rectilinear->num_dimensions);
+            for (i = 0; i < meshinfo->rectilinear->num_dimensions; i++ )
+            {
+                meshinfo->rectilinear->dimensions[i] = 0;
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->rectilinear->num_dimensions < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else
+                {
+                    adios_error (err_mesh_recti_invalid_num_dims,
+                                 "Rectilinear mesh %s has more than 10 dims!\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                //i_digits to reprent the number in dimensions0/dimensions1/... 
+                char * dimensions_value = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions")+i_digits+1 );
+                strcpy (dimensions_value, "/adios_schema/");
+                strcat (dimensions_value, meshinfo->name);
+                strcat (dimensions_value, "/dimensions");
+                strcat (dimensions_value, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, dimensions_value, &attr_type, &attr_size, &data);
+//                printf("dimensions_value is %s\n", dimensions_value);
+                free (dimensions_value);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_recti_missing_one_dim,
+                                 "Rectilinear mesh %s dimensions[%d] is not provided!\n", 
+                                 meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    char * pEnd;
+                    char * tmp_dimensions_value = strdup((char *)data);
+                    uint64_t tmp_value = strtoull (tmp_dimensions_value, &pEnd, 10);
+//                    if (tmp_value)
+                    if ( pEnd && pEnd[0]==0 )
+                        meshinfo->rectilinear->dimensions[i] = tmp_value;
+                    else
+                    {
+                        char * dimensions_value_tmp = strdup((char *)data);
+                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        if (varid >= 0) {
+                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            if (v->type == adios_byte)
+                                meshinfo->rectilinear->dimensions[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->rectilinear->dimensions[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->rectilinear->dimensions[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->rectilinear->dimensions[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->rectilinear->dimensions[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->rectilinear->dimensions[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->rectilinear->dimensions[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)  
+                                meshinfo->rectilinear->dimensions[i] = *(unsigned long long *)v->value;
+//                            meshinfo->rectilinear->dimensions[i] = *(uint64_t *)v->value;
+                            common_read_free_varinfo (v);
+                        }
+                        else
+                        {
+                            adios_error (err_mesh_recti_invalid_dim,
+                                         "Rectilinear mesh %s dimensions%d var %s is not correct!\n", 
+                                         meshinfo->name, i, (char *)data);
+                            return NULL; 
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            adios_error (err_mesh_recti_missing_dims,
+                         "Rectilinear mesh %s dimension is required\n", 
+                         meshinfo->name);
+            return NULL; 
+        }
+//        for (int i = 0; i < meshinfo->rectilinear->num_dimensions; i++ )
+//            printf ("dimensions[%d] is %d\n", i, meshinfo->rectilinear->dimensions[i]);
+
+        // start processing rectilinear mesh coordinates
+        char * coords_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coordinates-single-var")+1 );
+        strcpy (coords_attribute, "/adios_schema/");
+        strcat (coords_attribute, meshinfo->name);
+        strcat (coords_attribute, "/coords-single-var");
+        read_fail = common_read_get_attr_mesh (fp, coords_attribute, &attr_type, &attr_size, &data);
+//        printf("coords_attribute is %s\n", coords_attribute);
+        free (coords_attribute);
+        if (!read_fail)   //use coordinates-single-var
+        {
+            meshinfo->rectilinear->coordinates = (char **) malloc (sizeof(char *));
+            meshinfo->rectilinear->use_single_var = 1;
+            char * coords_tmp = strdup((char *)data);
+            varid = common_read_find_var (fp, coords_tmp, 1);
+            if (varid >= 0)
+            {
+                ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                // check if mesh dimension matches coordinates dimension
+                if (v->ndim == 0)                      //scalar
+                {    
+                    adios_error (err_mesh_recti_invalid_coords,
+                                 "Rectilinear mesh %s coordinates dimension is 0\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                else                                   //vector, more than one dim
+                {
+                   if (v->ndim == 1)                  //one dim vector
+                    {
+                        uint64_t dim_tmp = 1;
+                        for (j=0; j<meshinfo->rectilinear->num_dimensions; j++)
+                            dim_tmp *= meshinfo->rectilinear->dimensions[j];
+                        if (dim_tmp*meshinfo->rectilinear->num_dimensions != v->dims[0])
+                        {
+                            adios_error (err_mesh_recti_invalid_coords,
+                                         "Rectilinear mesh %s coordinates dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
+                                         meshinfo->name, v->dims[0], dim_tmp*meshinfo->rectilinear->num_dimensions);
+                            return NULL; 
+                        }
+                        else
+                            meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]);
+                    }
+                    else        //multi dim vector
+                    {
+                        // check if each mesh dimension matches coordinates dimension 
+                        for (j=0; j<v->ndim; j++)
+                        {
+                            if (meshinfo->rectilinear->dimensions[j] != v->dims[j])
+                            {
+                                adios_error (err_mesh_recti_invalid_coords, 
+                                             "Rectilinear mesh %s dimension[%d]= %d does not match coordinates dimension[%d]= %d\n",
+                                             meshinfo->name, j, meshinfo->rectilinear->dimensions[j], j, v->dims[j] );
+                                return NULL; 
+                            }
+                        }
+                        meshinfo->rectilinear->coordinates[0] = strdup (fp->var_namelist[varid]); 
+                    }
+                }
+                common_read_free_varinfo (v);
+            }
+            else
+            {
+                adios_error (err_mesh_recti_invalid_coords,    
+                            "Rectilinear mesh %s coordinates var name %s not found\n",
+                            meshinfo->name, coords_tmp );
+                return NULL; 
+            }
+//            printf ("coordinates is %s\n", meshinfo->rectilinear->coordinates[0]);
+        }
+        else                              // use coordinates-multi-var?
+        {
+            coords_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coords-multi-var-num")+1 );
+            strcpy (coords_attribute, "/adios_schema/");
+            strcat (coords_attribute, meshinfo->name);
+            strcat (coords_attribute, "/coords-multi-var-num");
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, coords_attribute, &attr_type, &attr_size, &data);
+            free (coords_attribute);
+            if (!read_fail)  //found attributes coords-multi-var
+            {
+                int num_coordinates = *(int *)data;
+                if (num_coordinates < meshinfo->rectilinear->num_dimensions)
+                {
+                    adios_error (err_mesh_recti_invalid_coords,
+                                 "Rectilinear mesh %s number of coordinates %d is less than the number of dimensions %d!\n", 
+                                 meshinfo->name, num_coordinates, meshinfo->rectilinear->num_dimensions);
+                    return NULL; 
+                }
+                if (num_coordinates > meshinfo->rectilinear->num_dimensions)
+                {
+                    num_coordinates = meshinfo->rectilinear->num_dimensions;
+                    log_warn ("Rectilinear mesh %s number of coordinates %d is greater than the number of dimensions %d! "
+                              "We use number of dimensions for maximums and ignore the rest maximums.\n", 
+                              meshinfo->name, num_coordinates, meshinfo->rectilinear->num_dimensions);
+                }
+                meshinfo->rectilinear->coordinates = (char **) malloc (num_coordinates*sizeof(char *)); 
+                for (i=0; i<num_coordinates; i++)
+                {
+                    char * i_buffer;
+                    int i_digits;
+                    if (num_coordinates < 10)
+                        i_buffer = (char *) malloc (sizeof(char)+1);
+                    else
+                    {
+                        adios_error (err_mesh_recti_invalid_num_coords, 
+                                     "Rectilinear mesh %s has more than 10 coordinates!\n", 
+                                     meshinfo->name);
+                        return NULL; 
+                    }
+                    i_digits = sprintf (i_buffer, "%d", i);
+ //                   printf ("i digit is %d\n", i_digits); 
+                    char * coords_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coords-multi-var")+i_digits+1 );
+                    strcpy (coords_var, "/adios_schema/");
+                    strcat (coords_var, meshinfo->name);
+                    strcat (coords_var, "/coords-multi-var");
+                    strcat (coords_var, i_buffer);
+//                    printf ("coords_var is %s\n", coords_var);
+                    free (i_buffer);
+                    data = NULL;
+                    read_fail = common_read_get_attr_mesh (fp, coords_var, &attr_type, &attr_size, &data);
+                    free (coords_var);
+                    if (read_fail)
+                    {
+                        adios_error (err_mesh_recti_missing_one_coords,
+                                     "Rectilinear mesh %s coordinate of coordinate[%d] is not provided!\n", 
+                                     meshinfo->name, i);
+                        return NULL; 
+                    }
+
+                    char * coords_var_tmp = strdup((char *)data);
+                    varid = common_read_find_var (fp, coords_var_tmp, 1);
+                    if (varid >= 0) {
+                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        if (meshinfo->rectilinear->dimensions[i] != v->dims[0])
+                        {
+                            adios_error (err_mesh_recti_invalid_coords,
+                                    "Rectilinear mesh %s dimension[%d] = %lld does not "
+                                    "match coordinates dimension[%d] = %lld\n",
+                                    meshinfo->name, i, meshinfo->rectilinear->dimensions[i], 
+                                    i, v->dims[0] );
+                            return NULL; 
+                        }
+                        else
+                        {
+                            meshinfo->rectilinear->coordinates[i] = strdup (fp->var_namelist[varid]);
+                            // printf ("coordinates[%d] is %s\n", i, meshinfo->rectilinear->coordinates[i]);
+                        }
+                        common_read_free_varinfo (v);
+                    }
+                }
+            }
+            else                //coords-single-var not found, coords-multi-var not found
+            {
+                adios_error (err_mesh_recti_missing_coords,
+                             "Rectilinear mesh %s coordinate is not provided\n", 
+                             meshinfo->name);
+                return NULL; 
+            }
+//            for (int i = 0; i < meshinfo->rectilinear->num_dimensions; i++ )
+//                printf ("coordinates[%d] is %s\n", i, meshinfo->rectilinear->coordinates[i]);
+        }
+    }
+    else if ( !strcmp((char *)data, "structured") )
+    {
+        meshinfo->type = ADIOS_MESH_STRUCTURED;
+        meshinfo->structured = (MESH_STRUCTURED* ) malloc (sizeof(MESH_STRUCTURED));
+        meshinfo->structured->use_single_var = 0;        // default value 0 indicates using multi-var   
+        meshinfo->structured->nspaces = meshinfo->structured->num_dimensions;   //default spaces = # of dims
+ 
+        // start processing structured mesh dimensions
+        char * dimension_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions-num")+1 );
+        strcpy (dimension_attribute, "/adios_schema/");
+        strcat (dimension_attribute, meshinfo->name);
+        strcat (dimension_attribute, "/dimensions-num");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, dimension_attribute, &attr_type, &attr_size, &data);
+        free (dimension_attribute);
+        if (!read_fail)
+        {
+            meshinfo->structured->num_dimensions = *(int *)data;
+            meshinfo->structured->dimensions = (uint64_t *) malloc (sizeof(uint64_t)*meshinfo->structured->num_dimensions);
+            for (i = 0; i < meshinfo->structured->num_dimensions; i++ )
+            {
+                meshinfo->structured->dimensions[i] = 0;
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->structured->num_dimensions < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else
+                {
+                    adios_error (err_mesh_structured_invalid_num_dims,
+                                 "Strctured mesh %s has more than 10 dimensions!\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                char * dimensions_value = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/dimensions")+i_digits+1 );
+                strcpy (dimensions_value, "/adios_schema/");
+                strcat (dimensions_value, meshinfo->name);
+                strcat (dimensions_value, "/dimensions");
+                strcat (dimensions_value, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, dimensions_value, &attr_type, &attr_size, &data);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_structured_missing_one_dim,
+                                 "Strctured mesh %s dimension of dimensions[%d] is not provided!\n", 
+                                 meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    char * pEnd;
+                    char * tmp_dimensions_value = strdup((char *)data);
+                    uint64_t tmp_value = strtoull (tmp_dimensions_value, &pEnd, 10);
+//                    if (tmp_value)
+                    if ( pEnd && pEnd[0]==0 )
+                        meshinfo->structured->dimensions[i] = tmp_value;
+                    else
+                    {
+                        char * dimensions_value_tmp = strdup((char *)data);
+                        varid = common_read_find_var (fp, dimensions_value_tmp, 1);
+                        if (varid >= 0) {
+                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            if (v->type == adios_byte)
+                                meshinfo->structured->dimensions[i] = *(signed char *)v->value;
+                            else if (v->type == adios_unsigned_byte)
+                                meshinfo->structured->dimensions[i] = *(unsigned char *)v->value;
+                            else if (v->type == adios_short)
+                                meshinfo->structured->dimensions[i] = *(signed short *)v->value;
+                            else if (v->type == adios_unsigned_short)
+                                meshinfo->structured->dimensions[i] = *(unsigned short *)v->value;
+                            else if (v->type == adios_integer)
+                                meshinfo->structured->dimensions[i] = *(signed int *)v->value;
+                            else if (v->type == adios_unsigned_integer)
+                                meshinfo->structured->dimensions[i] = *(unsigned int *)v->value;
+                            else if (v->type == adios_long)
+                                meshinfo->structured->dimensions[i] = *(signed long long *)v->value;
+                            else if (v->type == adios_unsigned_long)
+                                meshinfo->structured->dimensions[i] = *(unsigned long long *)v->value;
+//                            meshinfo->structured->dimensions[i] = *(uint64_t *)v->value;
+                            common_read_free_varinfo (v);
+                        }
+                        else
+                        {
+                            adios_error (err_mesh_structured_invalid_dim,
+                                         "Strctured mesh %s dimensions%d var %s is not correct!\n", 
+                                         meshinfo->name, i, (char *)data);
+                            return NULL; 
+                        }
+//                        free (dimensions_value_tmp);
+                    }
+                }
+            }
+        }
+        else
+        {
+            adios_error (err_mesh_structured_missing_dims, 
+                         "Strctured mesh %s dimension is required\n", 
+                         meshinfo->name);
+            return NULL; 
+        }
+
+        // start processing structured mesh points
+        char * points_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coordinates-single-var")+1 );
+        strcpy (points_attribute, "/adios_schema/");
+        strcat (points_attribute, meshinfo->name);
+        strcat (points_attribute, "/points-single-var");
+        read_fail = common_read_get_attr_mesh (fp, points_attribute, &attr_type, &attr_size, &data);
+        free (points_attribute);
+        if (!read_fail)   //use points-single-var
+        {
+            meshinfo->structured->points = (char **) malloc (sizeof(char *));
+            meshinfo->structured->use_single_var = 1;         // modify default value to 1
+            
+            char * coords_tmp = strdup((char *)data);
+            varid = common_read_find_var (fp, coords_tmp, 1);
+            if (varid >= 0)
+            {
+                ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]); 
+                if (v->ndim == 0)                      //scalar
+                {
+                    adios_error (err_mesh_structured_invaid_dim_points,
+                                 "Strctured mesh %s points dimension is 0.\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                else                                   //vector, more than one dim
+                {
+                    if (v->ndim == 1)     //if points is 1D array
+                    {
+                        uint64_t dim_tmp = 1;
+                        for (j=0; j<meshinfo->structured->num_dimensions; j++)
+                            dim_tmp *= meshinfo->structured->dimensions[j];
+                        if (dim_tmp*meshinfo->structured->num_dimensions != v->dims[0])
+                        {
+                            adios_error (err_mesh_structured_invaid_points,
+                                         "Strctured mesh %s points dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
+                                         meshinfo->name, v->dims[0], dim_tmp*meshinfo->structured->num_dimensions);
+                            return NULL; 
+                        }
+                        else
+                            meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
+                    }
+                    else
+                    {
+                        // check if each mesh dimension matches points dimension 
+                        for (j=0; j<v->ndim; j++)              // if points is multi dim array
+                        {
+                            if (meshinfo->structured->dimensions[j] != v->dims[j])
+                            {
+                                adios_error (err_mesh_structured_invaid_points,
+                                             "Strctured mesh %s dimension[%d]= %"PRIu64" does not match points dimension[%d]= %"PRIu64"\n",
+                                             meshinfo->name, j, meshinfo->structured->dimensions[j], j, v->dims[j] );
+                                return NULL; 
+                            }
+                        }
+                        meshinfo->structured->points[0] = strdup (fp->var_namelist[varid]);
+                    }
+                }
+                common_read_free_varinfo (v);
+            }
+            else
+            {
+                adios_error (err_mesh_structured_invaid_points,
+                            "Strctured mesh %s points var name %s not found\n",
+                            meshinfo->name, coords_tmp);
+                return NULL;
+            }
+        }
+        else                    //use points-multi-var
+        {
+            points_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coords-multi-var-num")+1 );
+            strcpy (points_attribute, "/adios_schema/");
+            strcat (points_attribute, meshinfo->name);
+            strcat (points_attribute, "/points-multi-var-num");
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, points_attribute, &attr_type, &attr_size, &data);
+            free (points_attribute);
+            if (!read_fail)  //found attributes points-multi-var
+            {
+                int points_dim = *(int *)data;
+                if (points_dim < meshinfo->structured->num_dimensions)
+                {
+                    adios_error (err_mesh_structured_invaid_dim_points,
+                                 "Strctured mesh %s provided points dim %d is less than dims of mesh %d!\n",
+                                 meshinfo->name, points_dim, meshinfo->structured->num_dimensions);
+                    return NULL; 
+                }
+                if (points_dim > meshinfo->structured->num_dimensions)
+                {
+                    points_dim = meshinfo->structured->num_dimensions;
+                    log_warn ("Strctured mesh %s points dim %d is greater than mesh dimes %d! "
+                              "We use number of mesh dimensions for points and ignore the rest points\n", 
+                              meshinfo->name, points_dim, meshinfo->structured->num_dimensions);
+                }
+                meshinfo->structured->points = (char **) malloc (points_dim*sizeof(char *)); 
+                for (i=0; i<points_dim; i++)
+                {
+                    char * i_buffer;
+                    int i_digits;
+                    if (points_dim < 10)
+                        i_buffer = (char *) malloc (sizeof(char)+1);
+                    else
+                    {
+                        adios_error (err_mesh_structured_invalid_num_points,
+                                     "Structured mesh %s has than 10 points var!\n", 
+                                     meshinfo->name);
+                        return NULL; 
+                    }
+                    i_digits = sprintf (i_buffer, "%d", i);
+                    char * points_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/points-multi-var")+i_digits+1 );
+                    strcpy (points_var, "/adios_schema/");
+                    strcat (points_var, meshinfo->name);
+                    strcat (points_var, "/points-multi-var");
+                    strcat (points_var, i_buffer);
+                    free (i_buffer);
+                    data = NULL;
+                    read_fail = common_read_get_attr_mesh (fp, points_var, &attr_type, &attr_size, &data);
+                    free (points_var);
+                    if (read_fail)
+                    {
+                        adios_error (err_mesh_structured_missing_one_points,
+                                     "Strctured mesh %s points of dim[%d] is not provided!\n", 
+                                     meshinfo->name, i);
+                        return NULL; 
+                    }
+                    char * points_var_tmp = strdup((char *)data);
+                    varid = common_read_find_var (fp, points_var_tmp, 1);
+                    if (varid >= 0) 
+                    {
+                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        //check if dim of mesh matches point dim
+                        if (v->ndim == 1)     //if var is 1D array
+                        {
+                            uint64_t dim_tmp = 1;
+                            int m = 0;
+                            for (m=0; m<meshinfo->structured->num_dimensions; m++)
+                                dim_tmp *= meshinfo->structured->dimensions[m];
+                            if (dim_tmp != v->dims[0])
+                            {
+                                adios_error (err_mesh_structured_invaid_points,
+                                             "Strctured mesh %s points dimension %"PRIu64" does not match mesh dimension %"PRIu64"\n", 
+                                             meshinfo->name, v->dims[0], dim_tmp);
+                                return NULL; 
+                            }
+                            else
+                                meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
+                        }
+                        else
+                        {
+                            // check if each mesh dim matches points dim (var is multi dim array)
+                            int m = 0;
+                            for (m=0; m<v->ndim; m++)              // if points is multi dim array
+                            {
+                                if (meshinfo->structured->dimensions[m] != v->dims[m])
+                                {
+                                    adios_error (err_mesh_structured_invaid_points,
+                                                 "Strctured mesh %s dimension[%d]= %"PRIu64" does not match points dimension[%d]= %"PRIu64"\n",
+                                                 meshinfo->name, m, meshinfo->structured->dimensions[m], m, v->dims[m] );
+                                    return NULL; 
+                                }
+                            }
+                            meshinfo->structured->points[i] = strdup (fp->var_namelist[varid]);
+                        }
+                        common_read_free_varinfo (v);
+                    } 
+                    else
+                    {
+                        adios_error (err_mesh_structured_missing_one_points,
+                                     "Structured mesh %s var of points-multi-var%d is not provided.\n", 
+                                     meshinfo->name, i); 
+                        return NULL; 
+                    }
+                }   // end of for loop i
+            }  // end of if found attributes points-multi-var
+            else
+            {
+                adios_error (err_mesh_structured_missing_points,
+                             "Structured mesh %s point is not provided.\n", 
+                             meshinfo->name);
+                return NULL; 
+            }
+
+        }  // end of else use points-multi-var
+
+        // start processing structured mesh nspace
+        char * mesh_nspace = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/nspace")+1 );
+        strcpy (mesh_nspace, "/adios_schema/");
+        strcat (mesh_nspace, meshinfo->name);
+        strcat (mesh_nspace, "/nspace");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, mesh_nspace, &attr_type, &attr_size, &data);
+        free (mesh_nspace);
+        if (read_fail)
+        {
+            log_info ("Unstructured mesh %s nspace is not provided. " 
+                      "We use num of dims %d for nspaces.\n",
+                      meshinfo->name, meshinfo->structured->num_dimensions);
+        }
+        else
+        {
+            long int d1;
+            char * pEnd;
+            d1 = strtol((char *)data, &pEnd, 10);
+//            if (d1)
+            if ( pEnd && pEnd[0]==0 )
+                meshinfo->structured->nspaces = d1;
+            else
+            {
+                char * spaces_var_tmp = strdup((char *)data);
+//                printf ("spaces_var_tmp is %s\n", spaces_var_tmp);
+                varid = common_read_find_var (fp, spaces_var_tmp, 1);
+                if (varid >= 0)
+                {
+                    ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                    meshinfo->structured->nspaces = *(int *)v->value;
+                    common_read_free_varinfo (v);
+                }
+                else
+                {
+                    log_warn ("Var %s for structured mesh %s nspace is not found. ", 
+                              "We use num of dims %d for nspaces.\n",
+                              (char *)data, meshinfo->name, meshinfo->structured->num_dimensions);
+                }
+            }
+        } // end of structured mesh nspace
+    }// end of structured mesh
+    else if ( !strcmp((char *)data, "unstructured") )
+    {
+        meshinfo->type = ADIOS_MESH_UNSTRUCTURED;
+        meshinfo->unstructured = (MESH_UNSTRUCTURED* ) malloc (sizeof(MESH_UNSTRUCTURED));
+//        meshinfo->unstructured->use_single_var = 0;  // default value 0 indicates using multi-var
+        meshinfo->unstructured->nvar_points = 1;
+//        meshinfo->unstructured->uniform_cell = 1;   // default value 0 indicates using uniform cell
+//        meshinfo->unstrutured->nspaces init
+//        meshinfo->unstructured->npoints init
+
+        // start processing unstructured mesh points-single-var/points-multi-var
+        char * points_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coordinates-single-var")+1 );
+        strcpy (points_attribute, "/adios_schema/");
+        strcat (points_attribute, meshinfo->name);
+        strcat (points_attribute, "/points-single-var");
+        read_fail = common_read_get_attr_mesh (fp, points_attribute, &attr_type, &attr_size, &data);
+        free (points_attribute);
+        if (!read_fail)   //use points-single-var
+        {
+            meshinfo->unstructured->points = (char **) malloc (sizeof(char *));  
+//            meshinfo->unstructured->use_single_var = 1;         // modify default value to 1
+            char * coords_tmp = strdup((char *)data);
+//            printf ("coords_tmp is %s\n", coords_tmp);
+            varid = common_read_find_var (fp, coords_tmp, 1);
+            if (varid >= 0)
+            {
+                ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                if (v->ndim == 0)                      //scalar
+                {
+                    adios_error (err_mesh_unstructured_invaid_points,
+                                 "Unstructured mesh %s points dimension is 0.\n", 
+                                 meshinfo->name);
+                    return NULL; 
+                }
+                else                                   //vector
+                {
+                    meshinfo->unstructured->nspaces = v->ndim;                //unstructured mesh nspaces init
+                    meshinfo->unstructured->npoints = 1;
+                    int j = 0;
+                    for (j=0; j<v->ndim; j++)
+                        meshinfo->unstructured->npoints *= v->dims[j];         
+                    meshinfo->unstructured->npoints /= v->ndim;               //unstructured mesh npoints init
+                    meshinfo->unstructured->points[0] = strdup (fp->var_namelist[varid]);
+                }
+                common_read_free_varinfo (v);
+            }
+            else
+            {
+                adios_error (err_mesh_unstructured_invaid_points,
+                             "Unstrctured mesh %s var %s for points-single-var is not found.\n", 
+                             meshinfo->name, coords_tmp);
+                return NULL;
+            }
+        }
+        else                    //use points-multi-var
+        {
+            points_attribute = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/coords-multi-var-num")+1 );
+            strcpy (points_attribute, "/adios_schema/");
+            strcat (points_attribute, meshinfo->name);
+            strcat (points_attribute, "/points-multi-var-num");
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, points_attribute, &attr_type, &attr_size, &data);
+            free (points_attribute);
+            if (!read_fail)  //found attributes points-multi-var
+            {
+                meshinfo->unstructured->nvar_points = *(int *)data;
+                int points_dim = *(int *)data;
+                meshinfo->unstructured->points = (char **) malloc (points_dim*sizeof(char *));
+                meshinfo->unstructured->nspaces = points_dim;       //unstructured mesh nspaces init
+                int first_dim = 1;
+                meshinfo->unstructured->npoints = 1;
+                char * first_match_var;
+                for (i=0; i<points_dim; i++)
+                {
+                    char * i_buffer;
+                    int i_digits;
+                    if (points_dim < 10)
+                        i_buffer = (char *) malloc (sizeof(char)+1);
+                    else
+                    {
+                        adios_error (err_mesh_unstructured_invaid_num_points,
+                                     "Structured mesh %s has more than 10 points.\n", 
+                                     meshinfo->name);
+                        return NULL; 
+                    }
+                    i_digits = sprintf (i_buffer, "%d", i);
+                    char * points_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/points-multi-var")+i_digits+1 );
+                    strcpy (points_var, "/adios_schema/");
+                    strcat (points_var, meshinfo->name);
+                    strcat (points_var, "/points-multi-var");
+                    strcat (points_var, i_buffer);
+                    free (i_buffer);
+                    data = NULL;
+                    read_fail = common_read_get_attr_mesh (fp, points_var, &attr_type, &attr_size, &data);
+                    free (points_var);
+                    if (read_fail)
+                    {
+                        adios_error (err_mesh_unstructured_missing_one_points, 
+                                     "Unstructured mesh %s points of dim[%d] is not provided.\n", 
+                                     meshinfo->name, i);
+                        return NULL; 
+                    }
+                    char * points_var_tmp = strdup((char *)data);
+//                    printf ( "points_var_tmp is %s\n", points_var_tmp);
+                    varid = common_read_find_var (fp, points_var_tmp, 1);
+                    if (varid >= 0)
+                    {
+                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        if (first_dim)
+                        {
+                            first_match_var = strdup (points_var_tmp);
+                            int k = 0;
+                            for (k=0; k<v->ndim; k++)
+                                meshinfo->unstructured->npoints *= v->dims[k];
+                            first_dim = 0;
+                        }
+                        else
+                        {
+                            if (v->ndim == 1)
+                            {
+                                if (meshinfo->unstructured->npoints != v->dims[0])
+                                {
+                                    adios_error (err_mesh_unstructured_invaid_dim_points,
+                                                 "Unstructured mesh %s points-multi-var%d %"PRIu64" does not match points-multi-var0 %"PRIu64".\n", 
+                                                 meshinfo->name, i, v->dims[0], meshinfo->unstructured->npoints);
+                                    return NULL; 
+                                }
+                            }
+                            else // v->ndim > 1, check if match for each dim
+                            {
+                                ADIOS_VARINFO * v_first = common_read_inq_var(fp, first_match_var);
+                                if (v_first->ndim == 1)
+                                {
+                                    int k = 0;
+                                    uint64_t var_dim_tmp = 1;
+                                    for (k=0; k<v->ndim; k++)
+                                        var_dim_tmp *= v->dims[k];
+                                    if (var_dim_tmp != meshinfo->unstructured->npoints)
+                                    {
+                                        adios_error (err_mesh_unstructured_invaid_dim_points, 
+                                                     "Unstructured mesh %s points-multi-var%d %"PRIu64" does not match points-multi-var0 %"PRIu64".\n",
+                                                     meshinfo->name, i, var_dim_tmp, meshinfo->unstructured->npoints);
+                                        return NULL; 
+                                    }
+                                }
+                                else  //both v_first and v has more than 2 dims
+                                {
+                                    if (v_first->ndim != v->ndim)
+                                    {
+                                        adios_error (err_mesh_unstructured_invaid_dim_points,
+                                                     "Unstructured mesh %s points-multi-var%d dim does not match points-multi-var0 dim.\n",
+                                                     meshinfo->name, i);
+                                        return NULL; 
+                                    }
+                                    else
+                                    {
+                                        int k = 0; 
+                                        for (k=0; k<v->ndim; k++)
+                                        {
+                                            if (v->dims[k]!=v_first->dims[k])
+                                            {
+                                                adios_error (err_mesh_unstructured_invaid_dim_points,
+                                                             "Unstructured mesh %s points-multi-var%d dim%d does not match points-multi-var0 dim%d.\n",
+                                                    meshinfo->name, i, k, k);
+                                                return NULL; 
+                                            }
+                                        }
+                                    }
+                                }
+                                common_read_free_varinfo (v_first);
+                            }
+                        }
+                        meshinfo->unstructured->points[i] = strdup (fp->var_namelist[varid]);
+                        common_read_free_varinfo (v);
+                    }
+                    else
+                    {
+                        adios_error (err_mesh_unstructured_missing_one_points,
+                                     "Unstructured mesh %s var of points-multi-var%d is not provided.\n", 
+                                     meshinfo->name, i);
+                        return NULL; 
+                    }
+                }   // end of for loop i
+            }  // end of if found attributes points-multi-var
+            else
+            {
+                adios_error (err_mesh_unstructured_missing_points,
+                             "Unstructured mesh %s point is not provided.\n", 
+                             meshinfo->name);
+                return NULL; 
+            }
+
+        }  // end of else use points-multi-var
+
+
+        // start processing unstructured mesh npoints
+        char * num_points = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/npoints")+1 );
+        strcpy (num_points, "/adios_schema/");
+        strcat (num_points, meshinfo->name);
+        strcat (num_points, "/npoints");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, num_points, &attr_type, &attr_size, &data);
+        free (num_points);
+        if (read_fail)
+        {
+            log_info ("Unstructured mesh %s npoints is not provided. "
+                      "We use calculated default npoints %"PRIu64" from points-var.\n", 
+                      meshinfo->name, meshinfo->unstructured->npoints);
+        }
+        else
+        {
+            uint64_t d1;
+            char * pEnd;
+            d1 = strtoull((char *)data, &pEnd, 10);
+//            if (d1)
+            if ( pEnd && pEnd[0]==0 )
+            {
+                if (meshinfo->unstructured->npoints != d1)
+                {
+                    log_warn ("In unstructured mesh %s, provided npoints %"PRIu64" does not match points calculated from points-var %"PRIu64". "
+                              "We use calculated npoints from points-var %"PRIu64".\n",
+                              meshinfo->name, d1, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
+                }
+            }
+            else
+            {
+                char * points_var_tmp = strdup((char *)data);
+                varid = common_read_find_var (fp, points_var_tmp, 1);
+                if (varid >= 0)
+                {
+                    ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                    if (v->type==adios_long || v->type==adios_unsigned_long) //long long or unsigned long long   
+                    {
+                        if (meshinfo->unstructured->npoints != *(uint64_t *)v->value)
+                            log_warn ("Provided npoints %"PRIu64" does not match points calculated from points-var %"PRIu64". "
+                                      "We use calculated npoints from points-var %"PRIu64".\n",
+                                      *(uint64_t *)v->value, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
+                    }
+                    else      //int
+                    {
+                        if (meshinfo->unstructured->npoints != *(int *)v->value)
+                        log_warn ("Provided npoints %d does not match points calculated from points-var %"PRIu64". "
+                                  "We use calculated npoints from points-var %"PRIu64".\n",
+                                  *(int *)v->value, meshinfo->unstructured->npoints, meshinfo->unstructured->npoints);
+                    }
+                    common_read_free_varinfo (v);
+                }
+                else
+                {
+                    log_warn ("Unstructured mesh %s var of npoints is not correct. "
+                              "We use calculated default npoints %"PRIu64" from points-var\n", 
+                              meshinfo->name, meshinfo->unstructured->npoints);
+                }
+            }
+        }
+
+        // start processing unstructured mesh nspaces
+        char * mesh_nspace = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/nspace")+1 );
+        strcpy (mesh_nspace, "/adios_schema/");
+        strcat (mesh_nspace, meshinfo->name);
+        strcat (mesh_nspace, "/nspace");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, mesh_nspace, &attr_type, &attr_size, &data);
+        free (mesh_nspace);
+        if (read_fail) {
+            log_info ("Unstructured mesh %s nspace is not provided. "
+                      "We use points dim %d for nspaces\n", 
+                      meshinfo->name,  meshinfo->unstructured->nspaces);
+        }
+        else
+        {
+            int d1;
+            char * pEnd;
+            d1 = strtol((char *)data, &pEnd, 10);
+//            if (d1)
+            if ( pEnd && pEnd[0]==0 )
+            {   
+                if (meshinfo->unstructured->nspaces > d1) {
+                    log_warn ("The provided nspaces %d is less the points dim %d. "
+                              "We use points dim %d for nspaces\n",
+                             d1, meshinfo->unstructured->nspaces, 
+                             meshinfo->unstructured->nspaces);
+                } else
+                    meshinfo->unstructured->nspaces = d1;
+            }
+            else
+            {
+                char * spaces_var_tmp = strdup((char *)data);
+                varid = common_read_find_var (fp, spaces_var_tmp, 1);
+                if (varid >= 0)
+                {
+                    ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                    if (meshinfo->unstructured->nspaces > *(int *)v->value) {
+                        log_warn ("Unstructured mesh %s: the provided nspaces %d "
+                                  "is less than the points dim %d. "
+                                  "We use points dim %d for nspaces.\n",
+                                  meshinfo->name, *(int *)v->value, 
+                                  meshinfo->unstructured->nspaces, 
+                                  meshinfo->unstructured->nspaces);
+                    } else
+                        meshinfo->unstructured->nspaces = *(int *)v->value;
+                    common_read_free_varinfo (v);
+                }
+                else
+                    log_warn ("Unstructured mesh %s var of npoints is not correct, "
+                              " use points dim %d for nspaces\n",
+                              meshinfo->name, meshinfo->unstructured->nspaces);
+            }
+        }
+
+        // start processing cells, including cell count, cell data and cell type
+        // how many types of cells
+        char * num_cell_type = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ncsets")+1 );
+        strcpy (num_cell_type, "/adios_schema/");
+        strcat (num_cell_type, meshinfo->name);
+        strcat (num_cell_type, "/ncsets");
+        data = NULL;
+        read_fail = common_read_get_attr_mesh (fp, num_cell_type, &attr_type, &attr_size, &data);
+//        printf ("num_cell_type is %s\n", num_cell_type);
+        free (num_cell_type);
+        if (read_fail)
+        {
+            adios_error (err_mesh_unstructured_missing_ncsets, 
+                        "Unstructured mesh %s ncsets is not provided, user should have "
+                        "mixed-cells-count/uniform-cells in xml file\n", meshinfo->name);
+            return NULL;
+        }
+        else
+        {
+            int d1 = *(int *)data;
+            if (d1)
+            {
+                meshinfo->unstructured->ncsets = d1;
+//                if (d1 == 1)
+//                    meshinfo->unstructured->uniform_cell = 1;
+//                else 
+//                    meshinfo->unstructured->uniform_cell = 0;
+            }
+            else
+            {
+                adios_error (err_mesh_unstructured_invalid_ncsets, 
+                            "Reading unstructured mesh %s ncsets failed\n", 
+                            meshinfo->name);
+                return NULL;
+
+            }
+        }
+
+        // start processing ccount, how many cells for cell type
+//        if (meshinfo->unstructured->uniform_cell)        //uniform cells
+        if (meshinfo->unstructured->ncsets == 1)
+        {
+            meshinfo->unstructured->ccounts = (uint64_t *) malloc (sizeof(uint64_t));
+
+            char * num_cells = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ccount")+1 );
+            strcpy (num_cells, "/adios_schema/");
+            strcat (num_cells, meshinfo->name);
+            strcat (num_cells, "/ccount");
+//            printf ("num_cells is %s\n", num_cells);
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, num_cells, &attr_type, &attr_size, &data);
+            free (num_cells);
+            if (read_fail)
+            {
+                adios_error (err_mesh_unstructured_missing_ccount,
+                            "Unstructured mesh %s number of cells (ccount) is required.\n", 
+                            meshinfo->name);    
+                return NULL;
+            }
+            else
+            {
+                uint64_t d1;
+                char * pEnd;
+                d1 = strtoull((char *)data, &pEnd, 10);  //number of cells
+//                if (d1)
+                if ( pEnd && pEnd[0]==0 )
+                    meshinfo->unstructured->ccounts[0] = d1;
+                else
+                {
+                    char * ccount_tmp = strdup((char *)data);
+                    varid = common_read_find_var (fp, ccount_tmp, 1);
+                    if (varid >= 0)
+                    {
+                        ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                        if (v->type == adios_unsigned_long || v->type == adios_long)
+                            meshinfo->unstructured->ccounts[0] = *(uint64_t *)v->value;
+                        else
+                            meshinfo->unstructured->ccounts[0] = *(int *)v->value;
+                        common_read_free_varinfo (v); 
+                    }
+                    else
+                    {
+                        adios_error (err_mesh_unstructured_invalid_ccount,
+                                    "Unstructured mesh %s var for ccount is invalid.\n", 
+                                    meshinfo->name);
+                        return NULL;
+                    }
+                }
+            }    
+        }
+        else  //mixed cells
+        {
+            meshinfo->unstructured->ccounts = (uint64_t *) malloc (sizeof(uint64_t)*meshinfo->unstructured->ncsets);
+            int i = 0;
+            for (i=0; i<meshinfo->unstructured->ncsets; i++)
+            {
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->unstructured->ncsets < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else 
+                {
+                    adios_error (err_mesh_unstructured_invalid_ctypes,
+                                "Unstructured mesh %s has more than 10 cell types.\n", 
+                                meshinfo->name);
+                    return NULL;
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                char * ccount_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ccount")+i_digits+1 );
+                strcpy (ccount_var, "/adios_schema/");
+                strcat (ccount_var, meshinfo->name);
+                strcat (ccount_var, "/ccount");
+                strcat (ccount_var, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, ccount_var, &attr_type, &attr_size, &data);
+                free (ccount_var);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_unstructured_missing_ccount,
+                                "Unstructured mesh %s ccount%d is not provided!\n", 
+                                meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    uint64_t d1;
+                    char * pEnd;
+                    d1 = strtoull((char *)data, &pEnd, 10);
+//                    if (d1)
+                    if ( pEnd && pEnd[0]==0 )
+                        meshinfo->unstructured->ccounts[i] = d1;
+                    else
+                    {
+                        char * ccount_mix_tmp = strdup((char *)data);
+                        varid = common_read_find_var (fp, ccount_mix_tmp, 1);
+                        if (varid >= 0)
+                        {
+                            ADIOS_VARINFO * v = common_read_inq_var(fp, fp->var_namelist[varid]);
+                            if (v->type == adios_long || v->type == adios_unsigned_long)
+                                meshinfo->unstructured->ccounts[i] = *(uint64_t *)v->value;
+                            else
+                                meshinfo->unstructured->ccounts[i] = *(int *)v->value;
+                            common_read_free_varinfo (v);
+                        }
+                        else
+                        {
+                            adios_error (err_mesh_unstructured_invalid_ccount,
+                                        "Unstructured mesh %s var for ccount%d is invalid\n", 
+                                        meshinfo->name, i);
+                            return NULL; 
+                        }
+                    }
+                }
+            }
+
+        } // end of ccount
+        
+        // start processing cdata
+//        if (meshinfo->unstructured->uniform_cell)        //uniform cells
+        if (meshinfo->unstructured->ncsets == 1)
+        {
+            meshinfo->unstructured->cdata = (char **) malloc (sizeof(char *));
+            char * data_cells = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/cdata")+1 );
+            strcpy (data_cells, "/adios_schema/");
+            strcat (data_cells, meshinfo->name);
+            strcat (data_cells, "/cdata");
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, data_cells, &attr_type, &attr_size, &data);
+            free (data_cells);
+            if (read_fail)
+            {
+                adios_error (err_mesh_unstructured_missing_cdata,
+                            "Unstructured mesh %s cell data is required\n", 
+                            meshinfo->name);
+                return NULL; 
+            }
+            else
+            {
+                char * cdata_tmp = strdup((char *)data);
+                varid = common_read_find_var (fp, cdata_tmp, 1);
+                if (varid >= 0)
+                    meshinfo->unstructured->cdata[0] = strdup(fp->var_namelist[varid]);
+                else
+                {
+                    adios_error (err_mesh_unstructured_invalid_cdata,
+                                "Unstructured mesh %s var for cdata is invalid\n", 
+                                meshinfo->name);
+                    return NULL; 
+                }
+            }
+        }
+        else
+        {
+            meshinfo->unstructured->cdata = (char **) malloc (sizeof(char *)*meshinfo->unstructured->ncsets);
+            int i = 0;
+            for (i=0; i<meshinfo->unstructured->ncsets; i++)
+            {
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->unstructured->ncsets < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else
+                {
+                    adios_error (err_mesh_unstructured_invalid_ctypes,
+                                "Unstructured mesh %s has more than 10 cell types!\n",
+                                meshinfo->name);
+                    return NULL; 
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                char * cdata_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/cdata")+i_digits+1 );
+                strcpy (cdata_var, "/adios_schema/");
+                strcat (cdata_var, meshinfo->name);
+                strcat (cdata_var, "/cdata");
+                strcat (cdata_var, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, cdata_var, &attr_type, &attr_size, &data);
+                free (cdata_var);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_unstructured_missing_cdata,
+                                "Unstructured mesh %s cdata%d is not provided!\n", 
+                                meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    char * cdata_mix_tmp = strdup((char *)data);
+                    varid = common_read_find_var (fp, cdata_mix_tmp, 1);
+                    if (varid >= 0)
+                        meshinfo->unstructured->cdata[i] = strdup(fp->var_namelist[varid]);
+                    else
+                    {
+                        adios_error (err_mesh_unstructured_invalid_cdata,
+                                    "Unstructured mesh %s var for cdata%d is not correct.\n", 
+                                    meshinfo->name, i);
+                        return NULL; 
+                    }
+                }
+            }
+        }// end of cdata
+
+        // start processing ctypes
+//        if (meshinfo->unstructured->uniform_cell)        //uniform cells
+        if (meshinfo->unstructured->ncsets == 1)
+        {
+            meshinfo->unstructured->ctypes = (enum ADIOS_CELL_TYPE *) malloc (sizeof(enum ADIOS_CELL_TYPE));
+            char * type_cells = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ctype")+1 );
+            strcpy (type_cells, "/adios_schema/");
+            strcat (type_cells, meshinfo->name);
+            strcat (type_cells, "/ctype");
+            data = NULL;
+            read_fail = common_read_get_attr_mesh (fp, type_cells, &attr_type, &attr_size, &data);
+            free (type_cells);
+            if (read_fail)
+            {
+                adios_error (err_mesh_unstructured_missing_ctype,
+                            "Unstructured mesh %s cells type is required.\n", 
+                            meshinfo->name);
+                return NULL; 
+            } 
+            else
+            {
+                if (!strcmp((char *)data, "line"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_LINE;
+                else if (!strcmp((char *)data, "triangle"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_TRI;
+                else if (!strcmp((char *)data, "quad"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_QUAD;
+                else if (!strcmp((char *)data, "hex"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_HEX;
+                else if (!strcmp((char *)data, "prism"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_PRI;
+                else if (!strcmp((char *)data, "tet"))
+                    meshinfo->unstructured->ctypes[i] = ADIOS_CELL_TET;
+                else if (!strcmp((char *)data, "pyr"))
+                    meshinfo->unstructured->ctypes[0] = ADIOS_CELL_PYR;
+                else
+                {
+                    adios_error (err_mesh_unstructured_invalid_ctype,
+                                "Unstructured mesh %s type %s of for ctype%d is invalid. " 
+                                "we use line, triangle, quad, hex, prism, tet or tet for cell types. "
+                                "please choose to use one of them. ",
+                                 meshinfo->name, (char *)data, i);
+                    return NULL;
+                }
+            }
+//printf ("%d, cell type is %d\n", __LINE__, meshinfo->unstructured->ctypes[0]);
+        }
+        else
+        {
+            meshinfo->unstructured->ctypes = (enum ADIOS_CELL_TYPE *) malloc (sizeof(enum ADIOS_CELL_TYPE)*meshinfo->unstructured->ncsets);
+            int i = 0;
+            for (i=0; i<meshinfo->unstructured->ncsets; i++)
+            {
+                char * i_buffer;
+                int i_digits;
+                if (meshinfo->unstructured->ncsets < 10)
+                    i_buffer = (char *) malloc (sizeof(char)+1);
+                else
+                {
+                    adios_error (err_mesh_unstructured_invalid_ctypes,
+                                "Unstructured mesh %s has more than 10 cell types!\n",
+                                meshinfo->name);
+                    return NULL; 
+                }
+                i_digits = sprintf (i_buffer, "%d", i);
+                char * ctype_mix_var = malloc (strlen("/adios_schema/")+strlen(meshinfo->name)+strlen("/ctype")+i_digits+1 );
+                strcpy (ctype_mix_var, "/adios_schema/");
+                strcat (ctype_mix_var, meshinfo->name);
+                strcat (ctype_mix_var, "/ctype");
+                strcat (ctype_mix_var, i_buffer);
+                free (i_buffer);
+                data = NULL;
+                read_fail = common_read_get_attr_mesh (fp, ctype_mix_var, &attr_type, &attr_size, &data);
+                free (ctype_mix_var);
+                if (read_fail)
+                {
+                    adios_error (err_mesh_unstructured_missing_ctype,
+                                "Unstructured mesh %s ctype%d is not provided!\n", 
+                                meshinfo->name, i);
+                    return NULL; 
+                }
+                else
+                {
+                    if (!strcmp((char *)data, "line"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_LINE;
+                    else if (!strcmp((char *)data, "triangle"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_TRI;
+                    else if (!strcmp((char *)data, "quad"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_QUAD;
+                    else if (!strcmp((char *)data, "hex"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_HEX;
+                    else if (!strcmp((char *)data, "prism")) 
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_PRI;
+                    else if (!strcmp((char *)data, "tet"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_TET;
+                    else if (!strcmp((char *)data, "pyr"))
+                        meshinfo->unstructured->ctypes[i] = ADIOS_CELL_PYR;
+                    else
+                    {
+                        adios_error (err_mesh_unstructured_invalid_ctype,
+                                    "Unstructured mesh %s type %s of for ctype%d is invalid. "
+                                    "we use line, triangle, quad, hex, prism, tet or tet for cell types. "
+                                    "please choose to use one of them. ", 
+                                    meshinfo->name, (char *)data, i);
+                        return NULL;
+                        
+                    }
+                }
+            }
+        }
+    }  // end of unstructured mesh
+             
+//    fp->attr_namelist[i]
+//    common_read_get_attr_mesh (f, f->attr_namelist[i], &attr_type, &attr_size, &data);    
+
+    return meshinfo;
+}
+
+void common_read_free_meshinfo (ADIOS_MESH * meshinfo)
+{
+    if(meshinfo)
+    {
+        int i = 0;
+        switch (meshinfo->type) {
+            case ADIOS_MESH_UNIFORM:
+                {
+                    MESH_UNIFORM *bp = meshinfo->uniform;
+                    if (bp->dimensions)
+                        free (bp->dimensions);
+                    if (bp->origins)
+                        free (bp->origins);
+                    if (bp->spacings) 
+                        free (bp->spacings);
+                    if (bp->maximums)
+                        free (bp->maximums);
+                    free (meshinfo->uniform);
+                    break;
+                }
+            case ADIOS_MESH_RECTILINEAR:
+                {
+                    MESH_RECTILINEAR *bp = meshinfo->rectilinear;
+                    if (bp->dimensions)
+                        free (bp->dimensions);
+                    for (i = 0; i < meshinfo->rectilinear->num_dimensions; i++)
+                    {
+                        if (bp->coordinates[i])
+                            free (bp->coordinates[i]);
+                    }
+                    free (meshinfo->rectilinear);
+                    break;
+                }
+            case ADIOS_MESH_STRUCTURED:
+                {
+                    MESH_STRUCTURED *bp = meshinfo->structured;
+                    if (bp->dimensions)
+                        free (bp->dimensions);
+                    for (i = 0; i < meshinfo->structured->num_dimensions; i++)
+                    {
+                        if (bp->points[i])
+                            free (bp->points[i]);
+                    }
+                    free (meshinfo->unstructured);
+                    break;
+                }
+            case ADIOS_MESH_UNSTRUCTURED:
+                {
+                    MESH_UNSTRUCTURED *bp = meshinfo->unstructured;
+                    if (bp->ccounts)
+                        free (bp->ccounts);
+                    if (bp->ctypes)
+                        free (bp->ctypes);
+                    for (i = 0; i < meshinfo->unstructured->ncsets; i++)
+                    {
+                        if (bp->cdata[i])
+                            free (bp->cdata[i]);
+//                        if (bp->ctypes[i])
+//                            free (bp->ctypes[i]);
+
+                    }
+                    for (i = 0; i < meshinfo->unstructured->nvar_points; i++)
+                    {
+                        if (bp->points[i])
+                            free (bp->points[i]);
+                    }
+                    free (meshinfo->unstructured);
+                    break;
+                }
+            default:
+                break;
+        }
+        free (meshinfo);
+    }
+}
 
 int common_read_schedule_read (const ADIOS_FILE      * fp,
                                const ADIOS_SELECTION * sel,
                                const char            * varname,
                                int                     from_steps,
                                int                     nsteps,
+                               const char            * param, // NCSU ALACRITY-ADIOS
                                void                  * data)
 
 {
@@ -521,11 +2899,11 @@ int common_read_schedule_read (const ADIOS_FILE      * fp,
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
-        int varid = common_read_find_name (fp->nvars, fp->var_namelist, varname, 0);
+        int varid = common_read_find_var (fp, varname,0);
         if (varid >= 0) {
-            retval = common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, data);
+            retval = common_read_schedule_read_byid (fp, sel, varid, from_steps, nsteps, param /* NCSU ALACRITY-ADIOS */, data);
         } else {
-            retval = adios_errno; // adios_errno was set in common_read_find_name
+            retval = adios_errno; // adios_errno was set in common_read_find_var
         }
     } else {
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_schedule_read()\n");
@@ -534,23 +2912,78 @@ int common_read_schedule_read (const ADIOS_FILE      * fp,
     return retval;
 }
 
-
+// NCSU ALACRITY-ADIOS - Modified to delegate to transform method when called
+//   on a transformed variable
 int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
         const ADIOS_SELECTION * sel,
         int                     varid,
         int                     from_steps,
         int                     nsteps,
+        const char            * param, // NCSU ALACRITY-ADIOS
         void                  * data)
 
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_schedule_read");
+#endif
     struct common_read_internals_struct * internals;
     int retval;
     
     adios_errno = err_no_error;
     if (fp) {
         if (varid >=0 && varid < fp->nvars) {
+            // NCSU ALACRITY-ADIOS - If the variable is transformed, intercept
+            //   the read scheduling and schedule our own reads
+            ADIOS_VARINFO *raw_varinfo = common_read_inq_var_raw_byid(fp, varid);        // Get the *raw* varinfo
+            ADIOS_TRANSINFO *transinfo = common_read_inq_transinfo(fp, raw_varinfo);    // Get the transform info (i.e. original var info)
+            //assert(vi);
+            //assert(ti);
+
+            // If this variable is transformed, delegate to the transform
+            // method to generate subrequests
+            // Else, do the normal thing
+            if (transinfo && transinfo->transform_type != adios_transform_none) {
+                adios_transform_raw_read_request *subreq;
+                adios_transform_pg_read_request *pg_reqgroup;
+                adios_transform_read_request *new_reqgroup;
+
+                internals = (struct common_read_internals_struct *) fp->internal_data;
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_generate_read_requests");
+#endif
+                // Generate the read request group and append it to the list
+                new_reqgroup = adios_transform_generate_read_reqgroup(raw_varinfo, transinfo, fp, sel, from_steps, nsteps, param, data);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_generate_read_requests");
+#endif
+
+                // Proceed to register the read request and schedule all of its grandchild raw
+                // read requests ONLY IF a non-NULL reqgroup was returned (i.e., the user's
+                // selection intersected at least one PG).
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_submit_read_requests");
+#endif
+                if (new_reqgroup) {
+                    adios_transform_read_request_append(&internals->transform_reqgroups, new_reqgroup);
+
+                    // Now schedule all of the new subrequests
+                    retval = 0;
+                    for (pg_reqgroup = new_reqgroup->pg_reqgroups; pg_reqgroup; pg_reqgroup = pg_reqgroup->next) {
+                        for (subreq = pg_reqgroup->subreqs; subreq; subreq = subreq->next) {
+                            retval |= internals->read_hooks[internals->method].adios_schedule_read_byid_fn(
+                                            fp, subreq->raw_sel, varid+internals->group_varid_offset, pg_reqgroup->timestep, 1, subreq->data);
+                        }
+                    }
+                }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_submit_read_requests");
+#endif
+            } else {
+                // Old functionality
             internals = (struct common_read_internals_struct *) fp->internal_data;
             retval = internals->read_hooks[internals->method].adios_schedule_read_byid_fn (fp, sel, varid+internals->group_varid_offset, from_steps, nsteps, data);
+            }
         } else {
             adios_error (err_invalid_varid, 
                          "Variable ID %d is not valid in adios_schedule_read_byid(). "
@@ -561,12 +2994,20 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_schedule_read_byid()\n");
         retval = err_invalid_file_pointer;
     }
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_schedule_read");
+#endif
     return retval;
 }
 
-
+// NCSU ALACRITY-ADIOS - Modified to delegate to transform method to combine
+//  read subrequests to answer original requests
 int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
 {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_perform_reads");
+#endif
     struct common_read_internals_struct * internals;
     int retval;
     
@@ -574,14 +3015,31 @@ int common_read_perform_reads (const ADIOS_FILE *fp, int blocking)
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
         retval = internals->read_hooks[internals->method].adios_perform_reads_fn (fp, blocking);
+
+        // NCSU ALACRITY-ADIOS - If this was a blocking call, consider all read
+        //   request groups completed, and reassemble via the transform method.
+        //   Otherwise, do nothing.
+        if (blocking) {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_perform_reads_transform");
+#endif
+            adios_transform_process_all_reads(&internals->transform_reqgroups);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_perform_reads_transform");
+#endif
+        } else {
+            // Do nothing; reads will be performed by check_reads
+        }
     } else {
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_perform_reads()\n");
         retval = err_invalid_file_pointer;
     }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_perform_reads");
+#endif
     return retval;
 }
 
-
 int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
 {
     struct common_read_internals_struct * internals;
@@ -590,7 +3048,17 @@ int common_read_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
+
+        // NCSU ALACRITY-ADIOS - Handle those VARCHUNKs that correspond to
+        //   subrequests; don't return until we get a completed one
+        do {
+            // Read some chunk
         retval = internals->read_hooks[internals->method].adios_check_reads_fn (fp, chunk);
+            if (!*chunk) break; // If no more chunks are available, stop now
+
+            // Process the chunk through a transform method, if necessary
+            adios_transform_process_read_chunk(internals->transform_reqgroups, chunk);
+        } while (!*chunk); // Keep reading until we have a chunk to return
     } else {
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_check_reads()\n");
         retval = err_invalid_file_pointer;
@@ -628,11 +3096,11 @@ int common_read_get_attr (const ADIOS_FILE * fp,
     adios_errno = err_no_error;
     if (fp) {
         internals = (struct common_read_internals_struct *) fp->internal_data;
-        int attrid = common_read_find_name (fp->nattrs, fp->attr_namelist, attrname, 1);
+        int attrid = common_read_find_attr (fp->nattrs, fp->attr_namelist, attrname, 0);
         if (attrid > -1) {
             retval = common_read_get_attr_byid (fp, attrid, type, size, data);
         } else {
-            retval = adios_errno; // adios_errno was set in common_read_find_name
+            retval = adios_errno; // adios_errno was set in common_read_find_attr
         }
     } else {
         adios_error (err_invalid_file_pointer, "Null pointer passed as file to adios_read_get_attr()\n");
@@ -889,6 +3357,9 @@ ADIOS_SELECTION * common_read_selection_writeblock (int index)
     if (sel) {
         sel->type = ADIOS_SELECTION_WRITEBLOCK;
         sel->u.block.index = index;
+        // NCSU ALACRITY-ADIOS: Set the writeblock selection to be a full-PG selection by default
+        sel->u.block.is_absolute_index = 0;
+        sel->u.block.is_sub_pg_selection = 0;
     } else {
         adios_error(err_no_memory, "Cannot allocate memory for writeblock selection\n");
     }
diff --git a/src/core/common_read.h b/src/core/common_read.h
index 40d6127..9acf2e9 100644
--- a/src/core/common_read.h
+++ b/src/core/common_read.h
@@ -13,6 +13,7 @@
 
 #include "public/adios_types.h"
 #include "public/adios_read_v2.h"  /* C API's struct's are used here */
+#include "core/transforms/adios_transforms_transinfo.h" // NCSU ALACRITY-ADIOS
 
 #include <stdint.h>
 
@@ -39,16 +40,23 @@ void common_read_release_step (ADIOS_FILE *fp);
 
 ADIOS_VARINFO * common_read_inq_var (const ADIOS_FILE  *fp, const char * varname);
 ADIOS_VARINFO * common_read_inq_var_byid (const ADIOS_FILE  *fp, int varid);
+ADIOS_VARINFO * common_read_inq_var_raw_byid (const ADIOS_FILE  *fp, int varid);
+ADIOS_TRANSINFO * common_read_inq_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi);
 int common_read_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
                              int per_step_stat, int per_block_stat);
+int common_read_inq_var_blockinfo_raw (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
 int common_read_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
 void common_read_free_varinfo (ADIOS_VARINFO *vp);
+void common_read_free_transinfo(const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti); // NCSU ALACRITY-ADIOS
+
+ADIOS_MESH * common_read_inq_mesh_byid(ADIOS_FILE *fp, int meshid);
 
 int common_read_schedule_read (const ADIOS_FILE      * fp,
                                const ADIOS_SELECTION * sel,
                                const char            * varname,
                                int                     from_steps,
                                int                     nsteps,
+                               const char            * param,
                                void                  * data);
 
 int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
@@ -56,6 +64,7 @@ int common_read_schedule_read_byid (const ADIOS_FILE      * fp,
                                     int                     varid,
                                     int                     from_steps,
                                     int                     nsteps,
+                                    const char            * param,
                                     void                  * data);
 
 int common_read_perform_reads (const ADIOS_FILE *fp, int blocking);
diff --git a/src/core/ds_metadata.h b/src/core/ds_metadata.h
index 36951a1..1f92601 100644
--- a/src/core/ds_metadata.h
+++ b/src/core/ds_metadata.h
@@ -34,11 +34,10 @@ void ds_pack_file_info (int time, int nvars, int nattrs, int group_index_len, ch
 //                                  /* OUT */ struct adios_read_dart_data_struct * ds)
 
 void ds_pack_group_info (struct adios_file_struct *fd
-        ,struct adios_method_struct * method
-        ,struct adios_index_var_struct_v1 *vars_root
-        ,struct adios_index_attribute_struct_v1 * attrs_root
-        ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
-        );
+                        ,struct adios_method_struct * method
+                        ,struct adios_index_struct_v1 *index
+                        ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
+                        );
 
 //ADIOS_GROUP * ds_unpack_group_info (char * buf, struct adios_read_dart_group_struct * group);
 
@@ -49,8 +48,7 @@ void dimes_pack_file_info (int time, int nvars, int nattrs, int group_index_len,
 
 void dimes_pack_group_info (struct adios_file_struct *fd
         ,struct adios_method_struct * method
-        ,struct adios_index_var_struct_v1 *vars_root
-        ,struct adios_index_attribute_struct_v1 * attrs_root
+        ,struct adios_index_struct_v1 *index
         ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
         );
 
diff --git a/src/core/flexpath.h b/src/core/flexpath.h
index 9990572..8637802 100644
--- a/src/core/flexpath.h
+++ b/src/core/flexpath.h
@@ -1,9 +1,11 @@
 #ifndef _FLEXPATH_H
-#define FLEXPATH_H
+#define _FLEXPATH_H
 
 
 #include "core/adios_logger.h"
 
+#define CONTACT_LENGTH 1024
+
 #define READER_CONTACT_FILE "reader_info.txt"
 #define WRITER_CONTACT_FILE "writer_info.txt"
 #define READER_READY_FILE "reader_ready.txt"
@@ -13,8 +15,11 @@
 #define FP_DIM_ATTR_NAME "fp_dim"
 #define FP_NDIMS_ATTR_NAME "fp_ndims"
 
-#define OPEN_MSG 1
 #define CLOSE_MSG 0
+#define OPEN_MSG 1
+#define ACK_MSG 2
+#define INIT_MSG 3
+#define EOS_MSG 4
 
 #define perr(...) if(getenv("FP_DEBUG")) fprintf(stderr, __VA_ARGS__);
 
@@ -51,8 +56,18 @@
 
 #define CONTACT_STR_LEN 50
 
-typedef enum { FORMAT=0, DATA, EVGROUP } Flush_type;
+typedef enum {FORMAT, DATA, EVGROUP, STEP } Flush_type;
+
+typedef struct _update_step_msg{
+    int step;
+    int finalized;
+    int condition;
+}update_step_msg;
 
+typedef struct _drop_evgroup{
+    int step;
+    int condition;
+}drop_evgroup_msg;
 /*
  * Contains the offset information for a variable for all writers.
  * offsets_per_rank is == ndims.
@@ -60,8 +75,9 @@ typedef enum { FORMAT=0, DATA, EVGROUP } Flush_type;
 typedef struct _offset_struct{
     int offsets_per_rank;
     int total_offsets;
-    int * local_dimensions;
-    int * local_offsets;
+    uint64_t *local_dimensions;
+    uint64_t *local_offsets;
+    uint64_t *global_dimensions;
 } offset_struct;
 
 typedef struct _var {
@@ -73,13 +89,15 @@ typedef struct _var {
 typedef struct _evgroup {    
     int condition;
     int num_vars;
+    int step;
+    int process_id;
     global_var* vars;
 } evgroup, *evgroup_ptr;
 
 typedef struct _op_msg
 {
     int process_id;
-    char * file_name;
+    char *file_name;
     int type; //4 = end_of_stream, 3 = init, 2 = ack, 1 = open, 0 = close,
     int step;
     int condition;
@@ -87,30 +105,39 @@ typedef struct _op_msg
  
 typedef struct flush_msg_ {
     Flush_type type;
-    int rank;
+    int process_id;
     int condition;
+    int id;
 } Flush_msg, *Flush_msg_ptr;
- 
-typedef struct format_msg_ {
-    int id_len;
-    int rep_id_len;
-    char* format_id;
-    char* rep_id;
-    int condition;
-} Format_msg, *Format_msg_ptr;
 
 typedef struct var_msg_ {
     char* var_name;
-    int rank;
+    int process_id;
     int condition;
 } Var_msg, *Var_msg_ptr;
 
+static FMField update_step_msg_field_list[]=
+{
+    {"step", "integer", sizeof(int), FMOffset(update_step_msg*, step)},
+    {"finalized", "integer", sizeof(int), FMOffset(update_step_msg*, finalized)},
+    {"condition", "integer", sizeof(int), FMOffset(update_step_msg*, condition)},
+    {NULL, NULL, 0, 0}
+};
+
+static FMField drop_evgroup_msg_field_list[]=
+{
+    {"step", "integer", sizeof(int), FMOffset(drop_evgroup_msg*, step)},
+    {"condition", "integer", sizeof(int), FMOffset(drop_evgroup_msg*, condition)},
+    {NULL, NULL, 0, 0}
+};
+
 static FMField offset_struct_field_list[]=
 {
     {"offsets_per_rank", "integer", sizeof(int), FMOffset(offset_struct*, offsets_per_rank)},
     {"total_offsets", "integer", sizeof(int), FMOffset(offset_struct*, total_offsets)},
-    {"local_dimensions", "integer[total_offsets]", sizeof(int), FMOffset(offset_struct*, local_dimensions)},
-    {"local_offsets", "integer[total_offsets]", sizeof(int), FMOffset(offset_struct*, local_offsets)},
+    {"local_dimensions", "integer[total_offsets]", sizeof(uint64_t), FMOffset(offset_struct*, local_dimensions)},
+    {"local_offsets", "integer[total_offsets]", sizeof(uint64_t), FMOffset(offset_struct*, local_offsets)},
+    {"global_dimensions", "integer[offsets_per_rank]", sizeof(uint64_t), FMOffset(offset_struct*, global_dimensions)},
     {NULL, NULL, 0, 0}
 };
 
@@ -126,6 +153,8 @@ static FMField evgroup_field_list[]=
 {
     {"condition", "integer", sizeof(int), FMOffset(evgroup_ptr, condition)},
     {"num_vars", "integer", sizeof(int), FMOffset(evgroup_ptr, num_vars)},
+    {"step", "integer", sizeof(int), FMOffset(evgroup_ptr, step)},
+    {"process_id", "integer", sizeof(int), FMOffset(evgroup_ptr, process_id)},
     {"vars", "global_var[num_vars]", sizeof(global_var), FMOffset(evgroup_ptr, vars)},
     {NULL, NULL, 0, 0}
 };
@@ -133,25 +162,16 @@ static FMField evgroup_field_list[]=
 static FMField flush_field_list[] =
 {   
     {"type", "integer", sizeof(Flush_type), FMOffset(Flush_msg_ptr, type)},
-    {"rank", "integer", sizeof(int), FMOffset(Flush_msg_ptr, rank)},
+    {"process_id", "integer", sizeof(int), FMOffset(Flush_msg_ptr, process_id)},
     {"condition", "integer", sizeof(int), FMOffset(Flush_msg_ptr, condition)},
-    {NULL, NULL, 0, 0}
-};
-
-static FMField format_field_list[] =
-{   
-    {"id_len", "integer", sizeof(int), FMOffset(Format_msg_ptr, id_len)},
-    {"rep_id_len", "integer", sizeof(int), FMOffset(Format_msg_ptr, rep_id_len)},
-    {"format_id", "char[id_len]", sizeof(char), FMOffset(Format_msg_ptr, format_id)},
-    {"rep_id", "char[rep_id_len]", sizeof(char), FMOffset(Format_msg_ptr, rep_id)},
-    {"condition", "integer", sizeof(int), FMOffset(Format_msg_ptr, condition)},
+    {"id", "integer", sizeof(int), FMOffset(Flush_msg_ptr, id)},
     {NULL, NULL, 0, 0}
 };
 
 static FMField var_field_list[] =
 {
     {"var_name", "string", sizeof(char*), FMOffset(Var_msg_ptr, var_name)},
-    {"rank", "integer", sizeof(int), FMOffset(Var_msg_ptr, rank)},
+    {"process_id", "integer", sizeof(int), FMOffset(Var_msg_ptr, process_id)},
     {NULL, NULL, 0, 0}
 };
 
@@ -166,6 +186,18 @@ static FMField op_file_field_list[] =
     {NULL, NULL, 0, 0}
 };
 
+static FMStructDescRec update_step_msg_format_list[]=
+{
+    {"update_step_msg", update_step_msg_field_list, sizeof(update_step_msg), NULL},
+    {NULL, NULL, 0, 0}
+};
+
+static FMStructDescRec drop_evgroup_msg_format_list[]=
+{
+    {"drop_evgroup_msg", drop_evgroup_msg_field_list, sizeof(drop_evgroup_msg), NULL},
+    {NULL, NULL, 0, 0}
+};
+
 static FMStructDescRec offset_struct_format_list[] =
 {
     {"offset_struct", offset_struct_field_list, sizeof(offset_struct), NULL},
@@ -187,12 +219,6 @@ static FMStructDescRec flush_format_list[] =
     {NULL,NULL,0,NULL}
 };
  
-static FMStructDescRec format_format_list[] =
-{   
-    {"formatMsg", format_field_list, sizeof(Format_msg), NULL},
-    {NULL,NULL,0,NULL}
-};
- 
 static FMStructDescRec var_format_list[] =
 {
     {"varMsg", var_field_list, sizeof(Var_msg), NULL},
diff --git a/src/core/globals.c b/src/core/globals.c
index 6321588..3a54055 100644
--- a/src/core/globals.c
+++ b/src/core/globals.c
@@ -183,7 +183,9 @@ char *get_full_path_name(char *name, char *path)
         fprintf(stderr, "cannot allocate memory. %s:%d\n", __FILE__,__LINE__);
         return NULL;
     }
-    if (!strcmp (path, "/")) {
+    if (!path || !path[0]) { // null or empty string
+        sprintf (full_pathname, "%s\0", name);
+    else if (!strcmp (path, "/")) {
         sprintf (full_pathname, "/%s\0", name);
     }
     else {
diff --git a/src/core/mpidummy.c b/src/core/mpidummy.c
index e32d27e..0fdacd5 100644
--- a/src/core/mpidummy.c
+++ b/src/core/mpidummy.c
@@ -156,8 +156,8 @@ int MPI_Error_string(int errorcode, char *string, int *resultlen)
 
 double MPI_Wtime()
 {
-	// Implementation not tested
-	struct timeval tv;
-	gettimeofday (&tv, NULL);
-	return (double)(tv.tv_sec) + (double)(tv.tv_usec) / 1000000;	
+    // Implementation not tested
+    struct timeval tv;
+    gettimeofday (&tv, NULL);
+    return (double)(tv.tv_sec) + (double)(tv.tv_usec) / 1000000;    
 }
diff --git a/src/core/qhashtbl.c b/src/core/qhashtbl.c
new file mode 100644
index 0000000..36cd149
--- /dev/null
+++ b/src/core/qhashtbl.c
@@ -0,0 +1,657 @@
+/******************************************************************************
+ * qLibc - http://www.qdecoder.org
+ *
+ * Copyright (c) 2010-2012 Seungyoung Kim.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ ******************************************************************************/
+
+/**
+ * @file qhashtbl.c Hash-table container implementation.
+ *
+ * qhashtbl implements a hashtable, which maps keys to values. Key is a unique
+ * string and value is any non-null object. The creator qHashtbl() has one
+ * parameters that affect its performance: initial hash range. The hash range
+ * is the number of slots(pointers) in the hash table. in the case of a hash
+ * collision, a single slots stores multiple elements using linked-list
+ * structure, which must be searched sequentially. So lower range than the
+ * number of elements decreases the space overhead but increases the number of
+ * hash collisions and consequently it increases the time cost to look up an
+ * element.
+ *
+ * @code
+ *  [Internal Structure Example for 10-slot hash table]
+ *
+ *  RANGE    NAMED-OBJECT-LIST
+ *  =====    =================
+ *  [ 0 ] -> [hash=320,key3=value] -> [hash=210,key5=value] -> [hash=110,...]
+ *  [ 1 ] -> [hash=1,key1=value]
+ *  [ 2 ]
+ *  [ 3 ] -> [hash=873,key4=value]
+ *  [ 4 ] -> [hash=2674,key11=value] -> [hash=214,key5=value]
+ *  [ 5 ] -> [hash=8545,key10=value]
+ *  [ 6 ] -> [hash=9226,key9=value]
+ *  [ 7 ]
+ *  [ 8 ] -> [hash=8,key6=value] -> [hash=88,key8=value]
+ *  [ 9 ] -> [hash=12439,key7=value]
+ * @endcode
+ *
+ * @code
+ *  // create a hash-table with 10 hash-index range.
+ *  // Please beaware, the hash-index range 10 does not mean the number of
+ *  // objects which can be stored. You can put as many as you want.
+ *  qhashtbl_t *tbl = qHashtbl(10);
+ *
+ *  // put objects into table.
+ *  tbl->put(tbl, "sample1", "binary", 6);
+ *  tbl->putstr(tbl, "sample2", "string");
+ *  tbl->putint(tbl, "sample3", 1);
+ *
+ *  // debug print out
+ *  tbl->debug(tbl, stdout, true);
+ *
+ *  // get objects
+ *  void *sample1 = tbl->get(tbl, "sample1", &size, true);
+ *  char *sample2 = tbl->getstr(tbl, "sample2", false);
+ *  int  sample3  = tbl->getint(tbl, "sample3");
+ *
+ *  // sample1 is memalloced
+ *  if(sample1 != NULL) free(sample1);
+ *
+ *  // release table
+ *  tbl->free(tbl);
+ * @endcode
+ *
+ * @note
+ *  Use "--enable-threadsafe" configure script option to use under
+ *  multi-threaded environments.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include "qhashtbl.h"
+#include "core/adios_logger.h"
+
+
+// member methods
+static bool put2(qhashtbl_t *tbl, const char *path, const char *name, const void *data);
+static bool put(qhashtbl_t *tbl, const char *path, const void *data);
+static void *get(qhashtbl_t *tbl, const char *fullpath);
+static void *get2(qhashtbl_t *tbl, const char *path, const char *name);
+static bool remove_(qhashtbl_t *tbl, const char *fullpath);
+static int size(qhashtbl_t *tbl);
+static void clear(qhashtbl_t *tbl);
+static void debug(qhashtbl_t *tbl, FILE *out, bool detailed);
+static void free_(qhashtbl_t *tbl);
+
+uint32_t qhashmurmur3_32(const void *data, size_t nbytes);
+
+/**
+ * Initialize hash table.
+ *
+ * @param range     hash range.
+ *
+ * @return a pointer of malloced qhashtbl_t, otherwise returns false
+ * @retval errno will be set in error condition.
+ *  - EINVAL : Invalid argument.
+ *  - ENOMEM : Memory allocation failure.
+ *
+ * @code
+ *  // create a hash-table with hash-index range 1000 (does not mean maximum
+ *  // number of objects).
+ *  qhashtbl_t *tbl = qhashtbl(1000);
+ * @endcode
+ */
+qhashtbl_t *qhashtbl(int range)
+{
+    if (range == 0) {
+        errno = EINVAL;
+        return NULL;
+    }
+
+    qhashtbl_t *tbl = (qhashtbl_t *)malloc(sizeof(qhashtbl_t));
+    if (tbl == NULL) {
+        errno = ENOMEM;
+        return NULL;
+    }
+    memset((void *)tbl, 0, sizeof(qhashtbl_t));
+
+    // allocate table space
+    tbl->slots = (qhnobj_t **)malloc(sizeof(qhnobj_t *) * range);
+    if (tbl->slots == NULL) {
+        errno = ENOMEM;
+        free_(tbl);
+        return NULL;
+    }
+    memset((void *)tbl->slots, 0, sizeof(qhnobj_t *) * range);
+
+    // assign methods
+    tbl->put2       = put2;
+    tbl->put        = put;
+    tbl->get        = get;
+    tbl->get2       = get2;
+    tbl->remove     = remove_;
+    tbl->size       = size;
+    tbl->clear      = clear;
+    tbl->debug      = debug;
+    tbl->free       = free_;
+
+    // now table can be used
+    tbl->range = range;
+    tbl->num = 0;
+
+    return tbl;
+}
+
+/**
+ * qhashtbl->put(): Put a object into this table.
+ *
+ * @param tbl       qhashtbl_t container pointer.
+ * @param path      key is path+/+name
+ * @param name      part of key
+ * @param data      data object
+ *
+ * @return true if successful, otherwise returns false
+ * @retval errno will be set in error condition.
+ *  - EINVAL : Invalid argument.
+ *  - ENOMEM : Memory allocation failure.
+ */
+static void genkey(const char *path, const char *name, int *keylen, char **key)
+{
+    // create key
+    if (!path || !strcmp (path, "")) {
+        *keylen = strlen (name);
+        *key = malloc (*keylen+1);
+        sprintf (*key, "%s", name);
+    } else if (!strcmp (path, "/")) {
+        *keylen = strlen (name) + 1;
+        *key = malloc (*keylen+1);
+        sprintf (*key, "/%s", name);
+    } else {
+        *keylen = strlen (name) + strlen (path) + 1;
+        *key = malloc (*keylen+1);
+        sprintf (*key, "%s/%s", path, name);
+    }
+}
+
+static bool put(qhashtbl_t *tbl, const char *fullpath, const void *data)
+{
+    if (!fullpath)
+        return false;
+
+    int keylen = strlen(fullpath);
+    char *key = strdup (fullpath);
+
+    // get hash integer
+    uint32_t hash = qhashmurmur3_32(key, keylen);
+    int idx = hash % tbl->range;
+
+    //log_error ("qhastbl:put: key=[%s], keylen=%d hash=%d, idx=%d, d=%x\n", key, keylen, hash, idx, data);
+
+    // find existence key
+    qhnobj_t *obj;
+    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, key)) {
+            break;
+        }
+    }
+
+    // put into table
+    if (obj == NULL) {
+        // insert
+        obj = (qhnobj_t *)malloc(sizeof(qhnobj_t));
+        if (obj == NULL) {
+            free(key);
+            errno = ENOMEM;
+            return false;
+        }
+        memset((void *)obj, 0, sizeof(qhnobj_t));
+
+        if (tbl->slots[idx] != NULL) {
+            // insert at the beginning
+            obj->next = tbl->slots[idx];
+        }
+        tbl->slots[idx] = obj;
+
+        // increase counter
+        tbl->num++;
+
+        // set data
+        obj->hash  = hash;
+        obj->key   = key;
+        obj->value = (void *)data;
+
+    } else {
+        /* Do not do anything.
+         * Keep the first definition in place, because consider this example
+         * if we would replace the object here:
+         *  def NX
+         *  def A[NX] --> A's dimension is the first variable NX (a pointer to that)
+         *  def NX    --> hashtable stores this variable reference
+         *  def B[NX]
+         *  write NX  --> value is stored in the NX variable found in the hash table
+         *  write A   --> dimension found (valid first pointer) but value is not found
+         *                (stored in the second reference)
+         *  At this point, A's dimension variable is first NX, but the value of
+         *  write NX goes to the variable found here in the hash table.
+         */
+        free(key);
+    }
+
+    return true;
+}
+
+static bool put2(qhashtbl_t *tbl, const char *path, const char *name, const void *data)
+{
+    int keylen;
+    char *key;
+    genkey (path, name, &keylen, &key);
+
+    // get hash integer
+    uint32_t hash = qhashmurmur3_32(key, keylen);
+    int idx = hash % tbl->range;
+
+    //log_error ("qhastbl:put: key=[%s], keylen=%d hash=%d, idx=%d, d=%x\n", key, keylen, hash, idx, data);
+
+    // find existence key
+    qhnobj_t *obj;
+    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, key)) {
+            break;
+        }
+    }
+
+    // put into table
+    if (obj == NULL) {
+        // insert
+        obj = (qhnobj_t *)malloc(sizeof(qhnobj_t));
+        if (obj == NULL) {
+            free(key);
+            errno = ENOMEM;
+            return false;
+        }
+        memset((void *)obj, 0, sizeof(qhnobj_t));
+
+        if (tbl->slots[idx] != NULL) {
+            // insert at the beginning
+            obj->next = tbl->slots[idx];
+        }
+        tbl->slots[idx] = obj;
+
+        // increase counter
+        tbl->num++;
+
+        // set data
+        obj->hash  = hash;
+        obj->key   = key;
+        obj->value = (void *)data;
+
+    } else {
+        /* Do not do anything.
+         * Keep the first definition in place, because consider this example
+         * if we would replace the object here:
+         *  def NX
+         *  def A[NX] --> A's dimension is the first variable NX (a pointer to that)
+         *  def NX    --> hashtable stores this variable reference
+         *  def B[NX]
+         *  write NX  --> value is stored in the NX variable found in the hash table
+         *  write A   --> dimension found (valid first pointer) but value is not found
+         *                (stored in the second reference)
+         *  At this point, A's dimension variable is first NX, but the value of
+         *  write NX goes to the variable found here in the hash table.
+         */
+        free(key);
+    }
+
+    return true;
+}
+
+
+/**
+ * qhashtbl->get(): Get a object from this table.
+ *
+ * @param tbl       qhashtbl_t container pointer.
+ * @param name      key name.
+ * @param size      if not NULL, oject size will be stored.
+ * @param newmem    whether or not to allocate memory for the data.
+ *
+ * @return a pointer of data if the key is found, otherwise returns NULL.
+ * @retval errno will be set in error condition.
+ *  - ENOENT : No such key found.
+ *  - EINVAL : Invalid argument.
+ *  - ENOMEM : Memory allocation failure.
+ *
+ * @code
+ *  qhashtbl_t *tbl = qHashtbl(1000);
+ *  (...codes...)
+ *
+ *  // with newmem flag unset
+ *  int size;
+ *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, false);
+ *
+ *  // with newmem flag set
+ *  int size;
+ *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, true);
+ *  if(obj != NULL) free(obj);
+ * @endcode
+ *
+ */
+static void *get(qhashtbl_t *tbl, const char *fullpath)
+{
+    // get hash integer
+    uint32_t hash = qhashmurmur3_32(fullpath, strlen(fullpath));
+    int idx = hash % tbl->range;
+
+    //log_error ("qhastbl:get: key=[%s], keylen=%d, hash=%d, idx=%d\n", fullpath, strlen(fullpath), hash, idx);
+
+    // find key
+    qhnobj_t *obj;
+    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, fullpath)) {
+            break;
+        }
+    }
+
+    void *data = NULL;
+    if (obj != NULL) {
+        data = obj->value;
+    }
+
+    if (data == NULL) errno = ENOENT;
+    //log_error ("qhastbl:get: data=%x\n", data);
+    return data;
+}
+
+/**
+ * qhashtbl->get2(): Get a object from this table.
+ *
+ * @param tbl       qhashtbl_t container pointer.
+ * @param name      key name.
+ * @param size      if not NULL, oject size will be stored.
+ * @param newmem    whether or not to allocate memory for the data.
+ *
+ * @return a pointer of data if the key is found, otherwise returns NULL.
+ * @retval errno will be set in error condition.
+ *  - ENOENT : No such key found.
+ *  - EINVAL : Invalid argument.
+ *  - ENOMEM : Memory allocation failure.
+ *
+ * @code
+ *  qhashtbl_t *tbl = qHashtbl(1000);
+ *  (...codes...)
+ *
+ *  // with newmem flag unset
+ *  int size;
+ *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, false);
+ *
+ *  // with newmem flag set
+ *  int size;
+ *  struct myobj *obj = (struct myobj*)tbl->get(tbl, "key_name", &size, true);
+ *  if(obj != NULL) free(obj);
+ * @endcode
+ *
+ */
+static void *get2(qhashtbl_t *tbl, const char *path, const char *name)
+{
+    int keylen;
+    char *key;
+    genkey (path, name, &keylen, &key);
+
+    // get hash integer
+    uint32_t hash = qhashmurmur3_32(key, keylen);
+    int idx = hash % tbl->range;
+
+    //log_error ("qhastbl:get: key=[%s], keylen=%d, hash=%d, idx=%d\n", key, keylen, hash, idx);
+
+    // find key
+    qhnobj_t *obj;
+    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, key)) {
+            break;
+        }
+    }
+
+    void *data = NULL;
+    if (obj != NULL) {
+        data = obj->value;
+    }
+
+    if (data == NULL) errno = ENOENT;
+    //log_error ("qhastbl:get: data=%x\n", data);
+    return data;
+}
+
+
+/**
+ * qhashtbl->remove(): Remove an object from this table.
+ *
+ * @param tbl   qhashtbl_t container pointer.
+ * @param name  key name
+ *
+ * @return true if successful, otherwise(not found) returns false
+ * @retval errno will be set in error condition.
+ *  - ENOENT : No next element.
+ *  - EINVAL : Invalid argument.
+ */
+static bool remove_(qhashtbl_t *tbl, const char *fullpath)
+{
+    int keylen = strlen (fullpath);
+    char *key = fullpath;
+
+    // get hash integer
+    uint32_t hash = qhashmurmur3_32(key, keylen);
+    int idx = hash % tbl->range;
+
+    //log_error ("qhastbl:remove: key=%s, hash=%d, idx=%d\n", key, hash, idx);
+
+    // find key
+    bool found = false;
+    qhnobj_t *prev = NULL;
+    qhnobj_t *obj;
+    for (obj = tbl->slots[idx]; obj != NULL; obj = obj->next) {
+        if (obj->hash == hash && !strcmp(obj->key, key)) {
+            // adjust link
+            if (prev == NULL) tbl->slots[idx] = obj->next;
+            else prev->next = obj->next;
+
+            // remove
+            free(obj->key);
+            free(obj);
+
+            found = true;
+            tbl->num--;
+            break;
+        }
+
+        prev = obj;
+    }
+
+    if (found == false) errno = ENOENT;
+
+    return found;
+}
+
+/**
+ * qhashtbl->size(): Returns the number of keys in this hashtable.
+ *
+ * @param tbl   qhashtbl_t container pointer.
+ *
+ * @return number of elements stored
+ */
+static int size(qhashtbl_t *tbl)
+{
+    return tbl->num;
+}
+
+/**
+ * qhashtbl->clear(): Clears this hashtable so that it contains no keys.
+ *
+ * @param tbl   qhashtbl_t container pointer.
+ */
+void clear(qhashtbl_t *tbl)
+{
+    int idx;
+    for (idx = 0; idx < tbl->range && tbl->num > 0; idx++) {
+        if (tbl->slots[idx] == NULL) continue;
+        qhnobj_t *obj = tbl->slots[idx];
+        tbl->slots[idx] = NULL;
+        while (obj != NULL) {
+            qhnobj_t *next = obj->next;
+            free(obj->key);
+            free(obj);
+            obj = next;
+            tbl->num--;
+        }
+    }
+}
+
+/**
+ * qhashtbl->debug(): Print hash table for debugging purpose
+ *
+ * @param tbl   qhashtbl_t container pointer.
+ * @param out   output stream
+ *
+ */
+void debug(qhashtbl_t *tbl, FILE *out, bool detailed)
+{
+    if (out == NULL) {
+        out = stdout;
+    }
+    int len, lenmin=1000000, lenmax=0;
+
+    qhnobj_t obj;
+    int idx;
+    for (idx = 0; idx < tbl->range && tbl->num > 0; idx++) {
+        len = 0;
+        if (detailed) fprintf(out, "[%d]:", idx);
+        qhnobj_t *obj = tbl->slots[idx];
+        while (obj != NULL) {
+            qhnobj_t *next = obj->next;
+            if (detailed) fprintf(out, "(%s,%p)" , obj->key, obj->value);
+            obj = next;
+            len++;
+        }
+        if (detailed) fprintf(out,"\n");
+        if (len < lenmin) lenmin = len;
+        if (len > lenmax) lenmax = len;
+    }
+    fprintf(out, "Hash table size = %d\n", tbl->range);
+    fprintf(out, "Number of elements = %d\n", tbl->num);
+    fprintf(out, "Shortest collision list size = %d\n", lenmin);
+    fprintf(out, "Longest  collision list size = %d\n", lenmax);
+    fflush(out);
+}
+
+
+/**
+ * qhashtbl->free(): De-allocate hash table
+ *
+ * @param tbl   qhashtbl_t container pointer.
+ */
+void free_(qhashtbl_t *tbl)
+{
+    clear(tbl);
+    if (tbl->slots != NULL) free(tbl->slots);
+    free(tbl);
+}
+
+
+/**
+ * Get 32-bit Murmur3 hash.
+ *
+ * @param data      source data
+ * @param nbytes    size of data
+ *
+ * @return 32-bit unsigned hash value.
+ *
+ * @code
+ *  uint32_t hashval = qhashmurmur3_32((void*)"hello", 5);
+ * @endcode
+ *
+ * @code
+ *  MurmurHash3 was created by Austin Appleby  in 2008. The cannonical
+ *  implementations are in C++ and placed in the public.
+ *
+ *    https://sites.google.com/site/murmurhash/
+ *
+ *  Seungyoung Kim has ported it's cannonical implementation to C language
+ *  in 2012 and published it as a part of qLibc component.
+ * @endcode
+ */
+uint32_t qhashmurmur3_32(const void *data, size_t nbytes)
+{
+    if (data == NULL || nbytes == 0) return 0;
+
+    const uint32_t c1 = 0xcc9e2d51;
+    const uint32_t c2 = 0x1b873593;
+
+    const int nblocks = nbytes / 4;
+    const uint32_t *blocks = (const uint32_t *)(data);
+    const uint8_t *tail = (const uint8_t *)(data + (nblocks * 4));
+
+    uint32_t h = 0;
+
+    int i;
+    uint32_t k;
+    for (i = 0; i < nblocks; i++) {
+        k = blocks[i];
+
+        k *= c1;
+        k = (k << 15) | (k >> (32 - 15));
+        k *= c2;
+
+        h ^= k;
+        h = (h << 13) | (h >> (32 - 13));
+        h = (h * 5) + 0xe6546b64;
+    }
+
+    k = 0;
+    switch (nbytes & 3) {
+        case 3:
+            k ^= tail[2] << 16;
+        case 2:
+            k ^= tail[1] << 8;
+        case 1:
+            k ^= tail[0];
+            k *= c1;
+            k = (k << 13) | (k >> (32 - 15));
+            k *= c2;
+            h ^= k;
+    };
+
+    h ^= nbytes;
+
+    h ^= h >> 16;
+    h *= 0x85ebca6b;
+    h ^= h >> 13;
+    h *= 0xc2b2ae35;
+    h ^= h >> 16;
+
+    return h;
+}
diff --git a/src/core/qhashtbl.h b/src/core/qhashtbl.h
new file mode 100644
index 0000000..a7a0be8
--- /dev/null
+++ b/src/core/qhashtbl.h
@@ -0,0 +1,80 @@
+/******************************************************************************
+ * qLibc - http://www.qdecoder.org
+ *
+ * Copyright (c) 2010-2012 Seungyoung Kim.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ ******************************************************************************/
+/*
+  Modified/simplified by ADIOS team for the purpose of variable/attribute store
+*/
+#ifndef __HASHTBL_H_
+#define __HASHTBL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+
+typedef struct qhnobj_s qhnobj_t;  
+typedef struct qhashtbl_s qhashtbl_t;
+
+struct qhnobj_s {
+    uint32_t hash;     /*!< 32bit-hash value of object name */
+    char *key;         /*!< object key */
+    void *value;       /*!< object value */
+    qhnobj_t *next;    /*!< for chaining next collision object */
+};
+
+struct qhashtbl_s {
+    /* capsulated member functions */
+    bool  (*put)    (qhashtbl_t *tbl, const char *fullpath, const void *data);
+    bool  (*put2)   (qhashtbl_t *tbl, const char *path,  const char *name, const void *data);
+    void *(*get)    (qhashtbl_t *tbl, const char *fullpath);
+    void *(*get2)   (qhashtbl_t *tbl, const char *path,  const char *name);
+    bool  (*remove) (qhashtbl_t *tbl, const char *fullpath);
+
+    int   (*size)   (qhashtbl_t *tbl);
+    void  (*clear)  (qhashtbl_t *tbl);
+    void  (*debug)  (qhashtbl_t *tbl, FILE *out, bool detailed);
+
+    void  (*free)   (qhashtbl_t *tbl);
+
+    /* private variables - do not access directly */
+    int num;         /*!< number of objects in this table */
+    int range;       /*!< hash range, vertical number of slots */
+    qhnobj_t **slots;   /*!< slot pointer container */
+};
+
+qhashtbl_t* qhashtbl(int range);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/src/core/transforms/adios_patchdata.c b/src/core/transforms/adios_patchdata.c
new file mode 100644
index 0000000..aee7f70
--- /dev/null
+++ b/src/core/transforms/adios_patchdata.c
@@ -0,0 +1,342 @@
+/*
+ * adios_patchdata.c
+ *
+ * Provides a main function, adios_patch_data, which copies all relevant data
+ * from one buffer/selection to another buffer/selection. It supports various
+ * combinations of source and destination selection types. In order to
+ * minimize implementation, though, it classifies the current selection types
+ * as follows:
+ *
+ * > Global geometric:
+ *   > Bounding box
+ *   > Points
+ * > Local PG
+ *   > Writeblock
+ * > Other
+ *   > Auto
+ *
+ * Patching is only supported between two selections within the same class.
+ *
+ *  Created on: Jan 15, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <assert.h>
+
+#include "public/adios_error.h"
+#include "public/adios_selection.h"
+#include "adios_subvolume.h"
+#include "adios_selection_util.h"
+#include "adios_patchdata.h"
+
+#define PATCH_UNIMPL(dsttype,srctype) \
+    adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, \
+                        "Patching of data from '%s' selection to '%s' selection not currently supported", \
+                        srctype, dsttype);
+
+// One-to-one patch functions
+inline static uint64_t adios_patch_data_bb_to_bb(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                                 void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb,
+                                                 enum ADIOS_DATATYPES datum_type,
+                                                 enum ADIOS_FLAG swap_endianness) {
+
+    const int ndim = dst_bb->ndim;
+    const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *inter_bb;
+    uint64_t *inter_off_relative_to_dst;
+    uint64_t *inter_off_relative_to_src;
+    uint64_t volume;
+
+    // Intersect the two bounding boxes
+    const ADIOS_SELECTION *inter_sel = adios_selection_intersect_bb_bb(dst_bb, src_bb);
+
+    // If there is no intersection, stop now, nothing to do
+    if (!inter_sel)
+        return 0;
+
+    // (this is guaranteed by the selection intersection code; this is just to check for bugs)
+    assert(inter_sel->type == ADIOS_SELECTION_BOUNDINGBOX);
+    inter_bb = &inter_sel->u.bb;
+
+    // Compute the offset of the intersection bounding box within each of
+    // the source and destination bounding boxes
+    assert(dst_bb->ndim == src_bb->ndim);
+    inter_off_relative_to_dst = malloc(ndim * sizeof(uint64_t));
+    inter_off_relative_to_src = malloc(ndim * sizeof(uint64_t));
+    vector_sub(ndim, inter_off_relative_to_dst, inter_bb->start, dst_bb->start);
+    vector_sub(ndim, inter_off_relative_to_src, inter_bb->start, src_bb->start);
+
+    // Perform a subvolume memcpy
+    copy_subvolume_ragged_offset(
+        dst, src, dst_bb->ndim, inter_bb->count,
+        dst_bb->count, inter_off_relative_to_dst, dst_ragged_offset,
+        src_bb->count, inter_off_relative_to_src, src_ragged_offset,
+        datum_type, swap_endianness);
+
+    // Compute the number of elements copied
+    volume = compute_volume(ndim, inter_bb->count);
+
+    // Cleanup
+    free(inter_off_relative_to_dst);
+    free(inter_off_relative_to_src);
+    common_read_selection_delete(inter_sel);
+
+    return volume;
+}
+
+// Whenever we are patching between a point selection and bounding box, we
+// will always iterate over the point selection, check each points for containment
+// within the bounding box, and compute byte offsets for the point within the point list
+// and bounding box, regardless of whether the point selection is on the source or
+// destination buffer. Therefore, we include a helper function with a boolean flag
+// to switch the copy direction, and just branch for a few lines during the copy
+// operation. This simplifies the code a lot, and reduces the LoC in this file (although
+// this comment makes up for a good bit of that savings).
+inline static uint64_t adios_patch_data_bb_pts_helper(void *dst, uint64_t dst_ragged_offset, void *src, uint64_t src_ragged_offset,
+                                                      const ADIOS_SELECTION_POINTS_STRUCT *pts,
+                                                      const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb,
+                                                      _Bool isDestPoints, enum ADIOS_DATATYPES datum_type,
+                                                      enum ADIOS_FLAG swap_endianness) {
+    const int ndim = pts->ndim;
+    uint64_t i;
+    int j;
+    uint64_t pts_copied = 0;
+    uint64_t byte_offset_in_bb_buffer, byte_offset_in_pt_buffer;
+    const uint64_t *cur_pt;
+    uint64_t *bb_byte_strides = malloc(sizeof(uint64_t) * ndim);
+    uint64_t *pt_relative_to_bb = malloc(sizeof(uint64_t) * ndim);
+
+    // Compute the strides into the source bounding box array
+    int typelen = adios_get_type_size(datum_type, NULL);
+    uint64_t bb_volume = typelen;
+    for (j = ndim - 1; j >= 0; j--) {
+        bb_byte_strides[j] = bb_volume;
+        bb_volume *= bb->count[j];
+    }
+
+    uint64_t dst_byte_ragged_offset = dst_ragged_offset * typelen;
+    uint64_t src_byte_ragged_offset = src_ragged_offset * typelen;
+
+    // Check that the selection dimensions are compatible
+    assert(pts->ndim == bb->ndim);
+
+    // Check each point; if it's in the bounding box, perform a copy
+    for (i = 0; i < pts->npoints; i++) {
+        cur_pt = &pts->points[i * ndim];
+
+        for (j = 0; j < ndim; j++) {
+            // If the point's coordinate in some dimension is outside the bounding box
+            if (cur_pt[j] < bb->start[j] ||
+                cur_pt[j] >= bb->start[j] + bb->count[j]) {
+                break;
+            }
+        }
+
+        // If the point is within the bounding box
+        if (j == ndim) {
+            vector_sub(ndim, pt_relative_to_bb, cur_pt, bb->start);
+
+            byte_offset_in_bb_buffer = 0;
+            for (j = 0; j < ndim; j++)
+                byte_offset_in_bb_buffer += pt_relative_to_bb[j] * bb_byte_strides[j];
+
+            byte_offset_in_pt_buffer = i * typelen;
+
+            if (isDestPoints) {
+                assert(byte_offset_in_pt_buffer >= dst_byte_ragged_offset);
+                assert(byte_offset_in_bb_buffer >= src_byte_ragged_offset);
+                memcpy((char*)dst + byte_offset_in_pt_buffer - dst_byte_ragged_offset, (char*)src + byte_offset_in_bb_buffer - src_byte_ragged_offset, typelen);
+            } else {
+                assert(byte_offset_in_bb_buffer >= dst_byte_ragged_offset);
+                assert(byte_offset_in_pt_buffer >= src_byte_ragged_offset);
+                memcpy((char*)dst + byte_offset_in_bb_buffer - dst_byte_ragged_offset, (char*)src + byte_offset_in_pt_buffer - src_byte_ragged_offset, typelen);
+            }
+            pts_copied++;
+        }
+    }
+
+    free(bb_byte_strides);
+    free(pt_relative_to_bb);
+
+    return pts_copied;
+}
+
+inline static uint64_t adios_patch_data_pts_to_bb(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                                  void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_POINTS_STRUCT *src_pts,
+                                                  enum ADIOS_DATATYPES datum_type,
+                                                  enum ADIOS_FLAG swap_endianness) {
+    return adios_patch_data_bb_pts_helper(dst, dst_ragged_offset, src, src_ragged_offset, src_pts, dst_bb, false, datum_type, swap_endianness);
+}
+
+inline static uint64_t adios_patch_data_bb_to_pts(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_POINTS_STRUCT *dst_pts,
+                                                  void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb,
+                                                  enum ADIOS_DATATYPES datum_type,
+                                                  enum ADIOS_FLAG swap_endianness) {
+    return adios_patch_data_bb_pts_helper(dst, dst_ragged_offset, src, src_ragged_offset, dst_pts, src_bb, true, datum_type, swap_endianness);
+}
+
+inline static uint64_t adios_patch_data_pts_to_pts(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_POINTS_STRUCT *dst_pts,
+                                                   void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_POINTS_STRUCT *src_pts,
+                                                   enum ADIOS_DATATYPES datum_type,
+                                                   enum ADIOS_FLAG swap_endianness) {
+    PATCH_UNIMPL("points","points");
+    return 0;
+}
+
+inline static uint64_t adios_patch_data_wb_to_wb(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_WRITEBLOCK_STRUCT *dst_wb,
+                                                 void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_WRITEBLOCK_STRUCT *src_wb,
+                                                 enum ADIOS_DATATYPES datum_type,
+                                                 enum ADIOS_FLAG swap_endianness) {
+    PATCH_UNIMPL("writeblock","writeblock");
+    return 0;
+}
+
+inline static uint64_t adios_patch_data_auto_to_auto(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_AUTO_STRUCT *dst_auto,
+                                                     void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION_AUTO_STRUCT *src_auto,
+                                                     enum ADIOS_DATATYPES datum_type,
+                                                     enum ADIOS_FLAG swap_endianness) {
+    PATCH_UNIMPL("auto","auto");
+    return 0;
+}
+
+
+// One-to-any patch functions
+
+inline static uint64_t adios_patch_data_to_bb(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb,
+                                              void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                              enum ADIOS_DATATYPES datum_type,
+                                              enum ADIOS_FLAG swap_endianness) {
+    switch (src_sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb = &src_sel->u.bb;
+        return adios_patch_data_bb_to_bb(dst, dst_ragged_offset, dst_bb, src, src_ragged_offset, src_bb, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *src_pts = &src_sel->u.points;
+        return adios_patch_data_pts_to_bb(dst, dst_ragged_offset, dst_bb, src, src_ragged_offset, src_pts, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Incompatible selection types %d, %d were used while patching decoded "
+                                                                      "transformed data into the user buffer (this is an error in the current "
+                                                                      "transform plugin)", src_sel->type, ADIOS_SELECTION_BOUNDINGBOX);
+        return 0;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", src_sel->type);
+        return 0;
+    }
+
+}
+
+inline static uint64_t adios_patch_data_to_pts(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_POINTS_STRUCT *dst_pts,
+                                               void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                               enum ADIOS_DATATYPES datum_type,
+                                               enum ADIOS_FLAG swap_endianness) {
+    switch (src_sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *src_bb = &src_sel->u.bb;
+        return adios_patch_data_bb_to_pts(dst, dst_ragged_offset, dst_pts, src, src_ragged_offset, src_bb, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *src_pts = &src_sel->u.points;
+        return adios_patch_data_pts_to_pts(dst, dst_ragged_offset, dst_pts, src, src_ragged_offset, src_pts, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Incompatible selection types %d, %d were used while patching decoded "
+                                                                      "transformed data into the user buffer (this is an error in the current "
+                                                                      "transform plugin)", src_sel->type, ADIOS_SELECTION_POINTS);
+        return 0;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", src_sel->type);
+        return 0;
+    }
+
+}
+
+inline static uint64_t adios_patch_data_to_wb(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_WRITEBLOCK_STRUCT *dst_wb,
+                                              void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                              enum ADIOS_DATATYPES datum_type,
+                                              enum ADIOS_FLAG swap_endianness) {
+    switch (src_sel->type) {
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *src_wb = &src_sel->u.block;
+        return adios_patch_data_wb_to_wb(dst, dst_ragged_offset, dst_wb, src, src_ragged_offset, src_wb, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    case ADIOS_SELECTION_POINTS:
+    case ADIOS_SELECTION_AUTO:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Incompatible selection types %d, %d were used while patching decoded "
+                                                                      "transformed data into the user buffer (this is an error in the current "
+                                                                      "transform plugin)", src_sel->type, ADIOS_SELECTION_WRITEBLOCK);
+        return 0;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", src_sel->type);
+        return 0;
+    }
+}
+
+inline static uint64_t adios_patch_data_to_auto(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION_AUTO_STRUCT *dst_auto,
+                                                void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                                                enum ADIOS_DATATYPES datum_type,
+                                                enum ADIOS_FLAG swap_endianness) {
+    switch (src_sel->type) {
+    case ADIOS_SELECTION_AUTO:
+    {
+        const ADIOS_SELECTION_AUTO_STRUCT *src_auto = &src_sel->u.autosel;
+        return adios_patch_data_auto_to_auto(dst, dst_ragged_offset, dst_auto, src, src_ragged_offset, src_auto, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    case ADIOS_SELECTION_POINTS:
+    case ADIOS_SELECTION_WRITEBLOCK:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Incompatible selection types %d, %d were used while patching decoded "
+                                                                      "transformed data into the user buffer (this is an error in the current "
+                                                                      "transform plugin)", src_sel->type, ADIOS_SELECTION_AUTO);
+        return 0;
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", src_sel->type);
+        return 0;
+    }
+}
+
+//
+// Any-on-any patch function
+//
+
+uint64_t adios_patch_data(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION *dst_sel,
+                          void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                          enum ADIOS_DATATYPES datum_type,
+                          enum ADIOS_FLAG swap_endianness) {
+    switch (dst_sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *dst_bb = &dst_sel->u.bb;
+        return adios_patch_data_to_bb(dst, dst_ragged_offset, dst_bb, src, src_ragged_offset, src_sel, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *dst_pts = &dst_sel->u.points;
+        return adios_patch_data_to_pts(dst, dst_ragged_offset, dst_pts, src, src_ragged_offset, src_sel, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *dst_wb = &dst_sel->u.block;
+        return adios_patch_data_to_wb(dst, dst_ragged_offset, dst_wb, src, src_ragged_offset, src_sel, datum_type, swap_endianness);
+    }
+    case ADIOS_SELECTION_AUTO:
+    {
+        const ADIOS_SELECTION_AUTO_STRUCT *dst_auto = &dst_sel->u.autosel;
+        return adios_patch_data_to_auto(dst, dst_ragged_offset, dst_auto, src, src_ragged_offset, src_sel, datum_type, swap_endianness);
+    }
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unknown selection type %d", dst_sel->type);
+        return 0;
+    }
+}
diff --git a/src/core/transforms/adios_patchdata.h b/src/core/transforms/adios_patchdata.h
new file mode 100644
index 0000000..2e4276d
--- /dev/null
+++ b/src/core/transforms/adios_patchdata.h
@@ -0,0 +1,24 @@
+/*
+ * adios_patchdata.h
+ *
+ *  Created on: Jan 15, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_PATCHDATA_H_
+#define ADIOS_PATCHDATA_H_
+
+#include <public/adios_types.h>
+#include <public/adios_selection.h>
+
+/*
+ * Copies data from a source buffer to a destination buffer, where the buffers each contain
+ * data to fill given ADIOS_SELECTIONs. The data to be copied is the intersection of the source
+ * and destination buffers, as defined by their selections.
+ */
+uint64_t adios_patch_data(void *dst, uint64_t dst_ragged_offset, const ADIOS_SELECTION *dst_sel,
+                          void *src, uint64_t src_ragged_offset, const ADIOS_SELECTION *src_sel,
+                          enum ADIOS_DATATYPES datum_type,
+                          enum ADIOS_FLAG swap_endianness);
+
+#endif /* ADIOS_PATCHDATA_H_ */
diff --git a/src/core/transforms/adios_transforms_common.c b/src/core/transforms/adios_transforms_common.c
new file mode 100644
index 0000000..f362f61
--- /dev/null
+++ b/src/core/transforms/adios_transforms_common.c
@@ -0,0 +1,348 @@
+/*
+ * All variable transformation code (excepting that for integration into
+ * existing ADIOS code) resides in this file.
+ *
+ * - Definition of variable transformation -
+ * A variable transformation takes a single variable (as defined in XML, or
+ * via the noxml interface) and transforms the format of the actual data from
+ * a "flat form" (where the data elements are simply linearized in some fashion
+ * and stored) to a "transformed form" (where the data has been rearranged
+ * and/or translated into another form, from which the original data cannot be
+ * retrieved without transform-specific code/algorithms).
+ *
+ * - Implementation -
+ *
+ * The implementation has gone through a few revisions, each progressively
+ * better integrated into ADIOS with less "hacking" (hopefully).
+ *
+ * -----------------------
+ * - Implementation v0.1 -
+ * -----------------------
+ * This first implementation relies on intercepting variable declarations,
+ * inquiries, reads and writes to translate between raw and transformed
+ * data and metadata. These translations take place primarily via hooks
+ * in common_adios_* functions.
+ *
+ * In this version, transformed variables are converted into 1D byte arrays,
+ * with the original dimension/type metadata discarded. This circumvents the
+ * need for low-level ADIOS changes, since after this conversion it is a
+ * normal ADIOS variable.
+ *
+ * This conversion requires the addition of a new auxiliary variable to hold
+ * the byte array length (dimension). This variable is visible to the user
+ * through, for example, bpdump or bpls.
+ *
+ * The transformation is marked with the new "transform_type" characteristic,
+ * which signals what, if any, transformation is applied.
+ *
+ * Limitations:
+ * > Requires an extra variable for dimension
+ * > Writing this extra variable requires access to common_adios_write, which
+ *   is not part of the internal library, which causes linker errors; the only
+ *   solutions are to copy the code (bad), or link more libraries with the
+ *   utility programs (also bad)
+ * > Causes two issues with adios_group_size:
+ *   1) group size for the payload of the dimension variable (i.e. 8 bytes) is
+ *      not automatically included, must be added to the group_size calculation
+ *   2) expanded group size for the payload of size-increasing transforms is
+ *      not accounted for unless the user does so explicitly
+ * > Original metadata is discarded, so the user only sees a byte array
+ * > No way to read back the original data, since this metadata is lost
+ *
+ * -----------------------
+ * - Implementation 0.2 -
+ * -----------------------
+ * Next, we remove the auxiliary dimension variable by using explicit dimension
+ * lengths. This has the same effect as putting a literal number into the
+ * "dimensions" field in the XML, but it is possible to change it across time
+ * steps, which is not possible in the static XML file.
+ *
+ * Benefits:
+ * > Eliminates the extra dimension variable and linkage problems
+ * > Eliminates group size problem 1)
+ * > Significantly reduces code length
+ *
+ * Limitations:
+ * > Still discards original metadata and precludes meaningful reads
+ * > Still has group size problem 2)
+ *
+ * -----------------------
+ * - Implementation 1.0 -
+ * -----------------------
+ * Next, we add another characteristic, "pretransform_metadata," to hold the
+ * original type and dimensions of the variable before transformation. This
+ * allows modification of the read API to use this original metadata where
+ * appropriate to operate on the variable correctly.
+ *
+ * Additionally, in order to support timesteps, we add an additional time
+ * index dimension variable to the transformed 1D byte array (making it a
+ * 2D variable).
+ *
+ * Benefits:
+ * > Maintains original metadata and allows reads
+ *
+ * Limitations:
+ * > Requires additional metadata
+ * > Still has group size problem 2)
+ *
+ * ------------------------------------
+ * - Implementation 2.0 (future work) -
+ * ------------------------------------
+ * A more elegant solution would be to retain the original variable
+ * metadata in place, calling it "logical metadata", and instead separate
+ * out the "physical" metadata to store the length/format of the stored
+ * data. This is more complex, as it involves breaking the implicit
+ * assumption throughout the ADIOS codebase that these two metadata
+ * types are one and the same. For example, currently the length of a
+ * variable buffer (i.e. "physical metadata") is assumed to be
+ * sizeof(type)*dim1*...dimN bytes (i.e. derived from the "logical metadata").
+ * It is unclear whether the elegance of this approach is worth the
+ * effort, and whether it would, in fact, have any tangible benefit
+ * over the previously described API-level translation.
+ *
+ * One potential advantage is a reduction in total metadata space requirement.
+ * Implementation 1.X requires an entire new dimension/type block, which
+ * requires something like 30 bytes/var. This method would probably only
+ * require only 8 bytes per var (the length in bytes of the stored buffer).
+ *
+ * Benefits:
+ * > Reduces metadata from implementations 1.X
+ *
+ * Limitations:
+ * > Harder/riskier to code
+ * > Still has group size problem 2)
+ *
+ * ----------------------------
+ * - The "group size" problem -
+ * ----------------------------
+ * The basic issue is that some transformations may increase the storage
+ * footprint of a variable (indexing, for instance), but the user does not
+ * account for this when calling adios_group_size. Unfortunately, it cannot
+ * be automatically adjusted for in adios_group_size, because we only receive
+ * the aggregate group size, and at this point dimension variables have not
+ * been filled in, so we cannot calculate the expected size of each variable
+ * as a basis to compute an estimated transformed storage footprint.
+ *
+ * The temporary stop-gap measure will be to find the most "expansive"
+ * transform method used on any variable, and apply that expansion ratio
+ * to the entire group size as a worst-case bound. This is not a terrible bound
+ * for the transform methods currently considered (compression, which actually
+ * reduces storage, and NCSU indexing, which increases storage by 30% maximum).
+ * However, later transformation methods may increase storage further, thus
+ * deteriorating the quality of this bound. Also, this method is rather ugly,
+ * so devising a better approach would be desirable.
+ *
+ *  Created on: Jun 22, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include "public/adios.h"
+#include "core/adios_bp_v1.h"
+#include "adios_internals.h"
+#include "adios_endianness.h"
+#include "adios_logger.h"
+#include "core/common_adios.h"
+
+#include "adios_transforms_common.h"
+#include "adios_transforms_hooks.h"
+
+#include <assert.h>
+#include <stdint.h>
+
+
+// Returns true for big endian, false for little endian
+int get_system_endianness() {
+    uint16_t word = 0x1234;
+    return *(uint8_t*)(&word) == 0x12; // Returns 1 (big endian) iff the high byte comes first
+}
+
+////////////////////////////////////////
+// Variable introspection
+////////////////////////////////////////
+
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_var(struct adios_var_struct *var)
+{
+    if (var->transform_type != adios_transform_none)
+        return var->pre_transform_type;
+    else
+        return var->type;
+}
+
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_var_header(struct adios_var_header_struct_v1 *var_header)
+{
+    if (var_header->characteristics.transform.transform_type != adios_transform_none)
+        return var_header->characteristics.transform.pre_transform_type;
+    else
+        return var_header->type;
+}
+
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_index(struct adios_index_var_struct_v1 *var) {
+    if (var->characteristics[0].transform.transform_type != adios_transform_none)
+        return var->characteristics[0].transform.pre_transform_type;
+    else
+        return var->type;
+}
+
+int adios_transform_get_var_original_ndims_characteristic(struct adios_index_characteristic_struct_v1 *ch) {
+    if (ch->transform.transform_type != adios_transform_none)
+        return ch->transform.pre_transform_dimensions.count;
+    else
+        return ch->dims.count;
+}
+
+struct adios_index_characteristic_dims_struct_v1 * adios_transform_get_var_original_dims_characteristic(struct adios_index_characteristic_struct_v1 *ch) {
+    if (ch->transform.transform_type != adios_transform_none)
+        return &ch->transform.pre_transform_dimensions;
+    else
+        return &ch->dims;
+}
+
+int adios_transform_get_var_original_ndims_index(struct adios_index_var_struct_v1 *var) {
+    return adios_transform_get_var_original_ndims_characteristic(&var->characteristics[0]);
+}
+
+int adios_transform_is_var_transformed(const struct adios_index_var_struct_v1 *var) {
+    assert(var);
+    if (var->characteristics_count < 1)
+        return 0;
+
+    return var->characteristics[0].transform.transform_type != adios_transform_none;
+}
+
+uint64_t adios_transform_get_var_transformed_size(const struct adios_index_var_struct_v1 *var, int time_index) {
+    struct adios_index_characteristic_dims_struct_v1 *dims;
+    int dim;
+    uint64_t size = 1;
+
+    int is_global;
+    uint64_t *ldims, *gdims, *offsets;
+
+    assert(var);
+    assert(adios_transform_is_var_transformed(var));
+    assert(time_index < var->characteristics_count);
+
+    dims = &var->characteristics[time_index].dims;
+    ldims = malloc(sizeof(uint64_t) * dims->count);
+    gdims = malloc(sizeof(uint64_t) * dims->count);
+    offsets = malloc(sizeof(uint64_t) * dims->count);
+    is_global = bp_get_dimension_generic_notime(dims, ldims, gdims, offsets, 0);
+    free(gdims);
+    free(offsets);
+
+    // var is non-null and is transformed, so it should be a 1D byte array.
+    for (dim = 0; dim < dims->count; dim++) {
+        size *= ldims[dim];
+    }
+    free(ldims);
+
+    return size;
+}
+
+//////////////////////////////////////////////////
+// Transform characteristic management functions
+//////////////////////////////////////////////////
+
+// Init
+int adios_transform_init_transform_characteristic(struct adios_index_characteristic_transform_struct *transform) {
+    transform->transform_type = adios_transform_none;
+    transform->pre_transform_dimensions.count = 0;
+    transform->pre_transform_dimensions.dims = 0;
+    transform->pre_transform_type = adios_unknown;
+    transform->transform_metadata_len = 0;
+    transform->transform_metadata = 0;
+    return 1;
+}
+
+// Utility functions
+// TODO: These are defined local bp_utils.c. Maybe should put them in a header?
+#define BUFREAD8(b,var)  var = (uint8_t) *(b->buff + b->offset); \
+                         b->offset += 1;
+#define BUFREAD16(b,var) var = *(uint16_t *) (b->buff + b->offset); \
+                         if (b->change_endianness == adios_flag_yes) \
+                             swap_16(var); \
+                         b->offset += 2;
+#define BUFREAD64(b,var) var = *(uint64_t *) (b->buff + b->offset); \
+                         if (b->change_endianness == adios_flag_yes) \
+                             swap_64(var); \
+                         b->offset += 8;
+#define BUFREAD(b,dst,len) memcpy((dst), (b->buff + b->offset), (len)); \
+                           b->offset += (len);
+
+static enum ADIOS_TRANSFORM_TYPE deserialize_transform_type(struct adios_bp_buffer_struct_v1 *b) {
+    // Read the length of the transform UID
+    uint8_t transform_uid_len;
+    BUFREAD8(b, transform_uid_len);
+
+    // Read the transform UID itself (e.g., "zlib" or "ncsu-isobar")
+    char *transform_uid = calloc(1, transform_uid_len + 1);
+    BUFREAD(b, transform_uid, transform_uid_len);
+
+    enum ADIOS_TRANSFORM_TYPE transform_type = adios_transform_find_type_by_uid(transform_uid);
+    return transform_type;
+}
+
+// Deserialize
+int adios_transform_deserialize_transform_characteristic(struct adios_index_characteristic_transform_struct *transform, struct adios_bp_buffer_struct_v1 *b) {
+    // The adios_characterstic_transform flag has already been read
+
+    uint8_t i;
+    uint16_t len, meta_len;
+
+    //BUFREAD8(b, transform->transform_type);
+    transform->transform_type = deserialize_transform_type(b);
+
+    BUFREAD8(b, transform->pre_transform_type);
+    BUFREAD8(b, transform->pre_transform_dimensions.count);
+
+    BUFREAD16(b, len);
+    transform->pre_transform_dimensions.dims = (uint64_t*)malloc(len);
+
+    // Make sure length and count match up
+    assert(len == 3 * 8 * transform->pre_transform_dimensions.count);
+
+    // Read each set of 3 dimension components (dim, global dim, local offset)
+    for (i = 0; i < 3 * transform->pre_transform_dimensions.count; i++) {
+        BUFREAD64(b, transform->pre_transform_dimensions.dims[i]);
+    }
+
+    BUFREAD16(b, meta_len);
+
+    if (meta_len) {
+        transform->transform_metadata_len = meta_len;
+        transform->transform_metadata = malloc(meta_len);
+        assert(transform->transform_metadata);
+
+        BUFREAD(b, transform->transform_metadata, meta_len);
+    } else {
+        transform->transform_metadata = 0;
+    }
+
+    return is_transform_type_valid(transform->transform_type);
+}
+
+// Clear
+int adios_transform_clear_transform_characteristic(struct adios_index_characteristic_transform_struct *transform) {
+    transform->transform_type = adios_transform_none;
+
+    transform->pre_transform_type = 0;
+
+    if (transform->pre_transform_dimensions.dims)
+        free(transform->pre_transform_dimensions.dims);
+    transform->pre_transform_dimensions.dims = 0;
+
+    transform->transform_metadata_len = 0;
+    if (transform->transform_metadata)
+        free(transform->transform_metadata);
+    transform->transform_metadata = 0;
+
+    return 1; // Return success
+}
+
+int adios_transform_swap_transform_characteristics(struct adios_index_characteristic_transform_struct *trans1,
+                                                   struct adios_index_characteristic_transform_struct *trans2) {
+    struct adios_index_characteristic_transform_struct tmp;
+    tmp = *trans1;
+    *trans1 = *trans2;
+    *trans2 = tmp;
+    return 1;
+}
diff --git a/src/core/transforms/adios_transforms_common.h b/src/core/transforms/adios_transforms_common.h
new file mode 100644
index 0000000..fcd79cb
--- /dev/null
+++ b/src/core/transforms/adios_transforms_common.h
@@ -0,0 +1,64 @@
+/*
+ * Contains functionality that is common to both reading and writing for
+ * handling variable transforms in ADIOS.
+ *
+ *  Created on: Jun 22, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORM_H
+#define ADIOS_TRANSFORM_H
+
+#include <stdint.h>
+#include "adios_bp_v1.h"
+#include "core/transforms/adios_transforms_hooks.h" // Includes the hooks header to load and access the ADIOS_TRANSFORM_TYPE enum
+//#include "adios_internals.h"
+
+int get_system_endianness();
+
+/////////////////////////////////////
+// Variable introspection
+/////////////////////////////////////
+
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_var(struct adios_var_struct *var);
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_var_header(struct adios_var_header_struct_v1 *var_header);
+enum ADIOS_DATATYPES adios_transform_get_var_original_type_index(struct adios_index_var_struct_v1 *var);
+int adios_transform_get_var_original_ndims_characteristic(struct adios_index_characteristic_struct_v1 *ch);
+
+struct adios_index_characteristic_dims_struct_v1 * adios_transform_get_var_original_dims_characteristic(struct adios_index_characteristic_struct_v1 *ch);
+int adios_transform_get_var_original_ndims_index(struct adios_index_var_struct_v1 *var);
+
+/*
+ * Returns whether the given variable is transformed
+ * @param var the variable to check
+ * @return whether the variable is transformed
+ */
+int adios_transform_is_var_transformed(const struct adios_index_var_struct_v1 *var);
+
+/*
+ * Returns the number of bytes in the transformed form of the variable.
+ * Precondition: var has been transformed, and has a transform_type other than
+ * adios_transform_none and adios_transform_unknown.
+ *
+ * @param var the variable
+ * @return the number of bytes in the transformed form of 'var'
+ */
+uint64_t adios_transform_get_var_transformed_size(const struct adios_index_var_struct_v1 *var, int time_index);
+
+//////////////////////////////////////////////////
+// Transform characteristic management functions
+//////////////////////////////////////////////////
+
+// Init
+int adios_transform_init_transform_characteristic(struct adios_index_characteristic_transform_struct *transform);
+
+// Deserialize (this is needed because bp_utils.c uses this)
+int adios_transform_deserialize_transform_characteristic(struct adios_index_characteristic_transform_struct *transform, struct adios_bp_buffer_struct_v1 *b);
+
+// Clear (i.e. free/wipe)
+int adios_transform_clear_transform_characteristic(struct adios_index_characteristic_transform_struct *transform);
+
+// Swap
+int adios_transform_swap_transform_characteristics(struct adios_index_characteristic_transform_struct *c1, struct adios_index_characteristic_transform_struct *c2);
+
+#endif /* ADIOS_TRANSFORM_H */
diff --git a/src/core/transforms/adios_transforms_datablock.c b/src/core/transforms/adios_transforms_datablock.c
new file mode 100644
index 0000000..10790a9
--- /dev/null
+++ b/src/core/transforms/adios_transforms_datablock.c
@@ -0,0 +1,85 @@
+/*
+ * adios_transforms_datablock.c
+ *
+ *  Created on: Dec 11, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <assert.h>
+
+#include "public/adios_error.h"
+#include "public/adios_types.h"
+
+#include "transforms/adios_transforms_common.h"
+#include "transforms/adios_transforms_read.h"
+#include "transforms/adios_transforms_util.h"
+#include "transforms/adios_transforms_datablock.h"
+
+// Datablock management
+
+adios_datablock * adios_datablock_new(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        void *data) {
+
+    assert(bounds);
+    assert(data);
+    return adios_datablock_new_ragged_offset(elem_type, timestep, bounds, 0, data);
+}
+
+/*
+ * Note: only valid for bounding box selections (since there are no ragged
+ * arrays for point selections, and no other selection types are supported
+ * right now).
+ */
+adios_datablock * adios_datablock_new_ragged(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        const uint64_t *ragged_offsets, void *data) {
+
+    assert(bounds);
+    assert(data);
+    assert(bounds->type == ADIOS_SELECTION_BOUNDINGBOX);
+
+    const uint64_t ragged_offset = ragged_offsets ?
+            compute_linear_offset_in_volume(bounds->u.bb.ndim, ragged_offsets, bounds->u.bb.count) :
+            0;
+
+    return adios_datablock_new_ragged_offset(elem_type, timestep, bounds, ragged_offset, data);
+}
+
+adios_datablock * adios_datablock_new_ragged_offset(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        uint64_t ragged_offset, void *data) {
+
+    assert(bounds);
+    assert(data);
+
+    adios_datablock *datablock = malloc(sizeof(adios_datablock));
+
+    datablock->elem_type = elem_type;
+    datablock->bounds = copy_selection(bounds);
+    datablock->timestep = timestep;
+    datablock->ragged_offset = ragged_offset;
+    datablock->data = data;
+
+    return datablock;
+}
+
+#define MYFREE(p) {if (p) free(p); (p)=NULL;}
+void adios_datablock_free(adios_datablock **datablock_ptr, int free_data) {
+    adios_datablock *datablock = *datablock_ptr;
+    if (datablock) {
+        if (datablock->bounds)
+            common_read_selection_delete(datablock->bounds);
+        if (free_data)
+            MYFREE(datablock->data);
+    }
+    MYFREE(*datablock_ptr);
+}
+#undef MYFREE
diff --git a/src/core/transforms/adios_transforms_datablock.h b/src/core/transforms/adios_transforms_datablock.h
new file mode 100644
index 0000000..7419603
--- /dev/null
+++ b/src/core/transforms/adios_transforms_datablock.h
@@ -0,0 +1,50 @@
+/*
+ * adios_transforms_datablock.h
+ *
+ * An ADIOS transform datablock represents a chunk of data that is retrieved by a transform plugin during reading.
+ * This block may include exactly the data that was requested, or it may contain more (the excess will be trimmed).
+ * For instance, suppose a 10x10 block of a PG was requested, but the transform method can only retrieve data
+ * in 16x16 blocks. Instead of reading a 16x16 block and performing the trimming within the transform plugin,
+ * the plugin may simply read the 16x16 block and return it immediately, leaving the trimming to the framework.
+ *
+ *  Created on: Dec 11, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_DATABLOCK_H_
+#define ADIOS_TRANSFORMS_DATABLOCK_H_
+
+#include "public/adios_types.h"
+
+typedef struct {
+    int timestep;                  // timestep of this datablock
+    const ADIOS_SELECTION *bounds; // (global) selection describing the data contained in this datablock
+    uint64_t ragged_offset;        // Ragged array offset of the data buffer in this datablock
+                                   // (only applicable for bounding-box-type selections)
+
+    enum ADIOS_DATATYPES elem_type;// Datatype of the elements in this datablock
+    void *data;                    // Pointer to the data buffer of this datablock
+} adios_datablock;
+
+// Datablock management
+adios_datablock * adios_datablock_new(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        void *data);
+
+adios_datablock * adios_datablock_new_ragged(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        const uint64_t *ragged_offsets, void *data);
+
+adios_datablock * adios_datablock_new_ragged_offset(
+        enum ADIOS_DATATYPES elem_type,
+        int timestep,
+        const ADIOS_SELECTION *bounds,
+        uint64_t ragged_offset, void *data);
+
+void adios_datablock_free(adios_datablock **datablock, int free_data);
+
+#endif /* ADIOS_TRANSFORMS_DATABLOCK_H_ */
diff --git a/src/core/transforms/adios_transforms_hooks.c b/src/core/transforms/adios_transforms_hooks.c
new file mode 100644
index 0000000..14c2c77
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks.c
@@ -0,0 +1,152 @@
+/*
+ * adios_transforms_hooks.c
+ *
+ * Includes functions common to both read and write interaction with transform plugins.
+ * Primarily, maintains a basic info table for each transform method, including:
+ *   type: the integer ID of the transform method (i.e., enum ADIOS_TRANSFORM_TYPE)
+ *   uid: the short string unique ID (UID) identifying each transform method for
+ *         portability between systems, etc.
+ *   description: a human-readable description of the transform method
+ *
+ *  Created on: Feb 14, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#include <assert.h>
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_hooks.h"
+#include "core/transforms/plugindetect/plugin_info_types.h"
+
+//
+// Build plugin info and aliases tables
+//
+
+// Defines ADIOS_TRANSFORM_INFOS and ADIOS_TRANSFORM_ALIASES
+#include "core/transforms/plugindetect/detect_plugin_infos.h"
+
+//
+// General plugin info inspection
+//
+
+static adios_transform_plugin_info_t * find_plugin_info(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    int i;
+    for (i = 0; i < num_adios_transform_types; i++)
+        if (ADIOS_TRANSFORM_METHOD_INFOS[i].type == transform_type)
+            return &ADIOS_TRANSFORM_METHOD_INFOS[i];
+    return NULL;
+}
+
+static adios_transform_plugin_xml_aliases_t * find_plugin_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    int i;
+    for (i = 0; i < num_adios_transform_types; i++)
+        if (ADIOS_TRANSFORM_METHOD_ALIASES[i].type == transform_type)
+            return &ADIOS_TRANSFORM_METHOD_ALIASES[i];
+    return NULL;
+}
+
+const char * adios_transform_plugin_uid(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    adios_transform_plugin_info_t *info = find_plugin_info(transform_type);
+    if (info) return info->uid;
+    else      return NULL;
+}
+
+const char * adios_transform_plugin_desc(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    adios_transform_plugin_info_t *info = find_plugin_info(transform_type);
+    if (info) return info->description;
+    else      return NULL;
+}
+
+int adios_transform_plugin_num_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
+    if (aliases) return aliases->xmlAliasCount;
+    else         return NULL;
+}
+
+const char ** adios_transform_plugin_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
+    if (aliases) return aliases->xmlAliases;
+    else         return NULL;
+}
+
+const char * adios_transform_plugin_primary_xml_alias(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    adios_transform_plugin_xml_aliases_t *aliases = find_plugin_xml_aliases(transform_type);
+    if (aliases && aliases->xmlAliasCount > 0)
+        return aliases->xmlAliases[0];
+    else
+        return NULL;
+}
+
+////////////////////////////////////////
+// Transform UID -> ID
+////////////////////////////////////////
+
+/*
+ * @param uid the UID (unique identifier) of a transform type
+ * @return the ADIOS_TRANSFORM_TYPE corresponding to the given UID, based on
+ *         the current configuration of ADIOS, or adios_transform_unknown if
+ *         no transform type has been registered with that UID.
+ */
+enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_uid(const char *uid) {
+    int i;
+    for (i = adios_transform_none; i < num_adios_transform_types; i++) {
+        const adios_transform_plugin_info_t *info = &ADIOS_TRANSFORM_METHOD_INFOS[i];
+        if (strcmp(uid, info->uid) == 0) {
+            return info->type;
+        }
+    }
+    return adios_transform_unknown;
+}
+
+////////////////////////////////////////
+// Transform XML alias<->id conversion
+////////////////////////////////////////
+
+/*
+ * @param xml_alias the name of a transform type as specified in the ADIOS XML
+ * @return the ADIOS_TRANSFORM_TYPE corresponding to that alias, or
+ *         adios_transform_unknown if it does not match any registered
+ *         transform type
+ */
+enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_xml_alias(const char *xml_alias) {
+    int i, j;
+    for (i = adios_transform_none; i < num_adios_transform_types; i++) {
+        const adios_transform_plugin_xml_aliases_t *aliasesForType = &ADIOS_TRANSFORM_METHOD_ALIASES[i];
+        for (j = 0; j < aliasesForType->xmlAliasCount; j++) {
+            if (strcasecmp(xml_alias, aliasesForType->xmlAliases[j]) == 0)
+                return aliasesForType->type;
+        }
+    }
+    return adios_transform_unknown;
+}
+
+/*
+ * @param transform_type a transform type
+ * @return a name that can be used to refer to that transform type within
+ *         the ADIOS XML file, or "" if transform_type is not valid.
+ */
+const char * adios_transform_xml_alias_by_type(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    int i;
+    for (i = adios_transform_none; i < num_adios_transform_types; i++) {
+        const adios_transform_plugin_xml_aliases_t *aliasesForType = &ADIOS_TRANSFORM_METHOD_ALIASES[i];
+        if (transform_type == aliasesForType->type) {
+            if (aliasesForType->xmlAliasCount == 0)
+                return "";
+            else
+                return aliasesForType->xmlAliases[0];
+        }
+    }
+    return "";
+}
+
+/////////////////////////////////////////
+// Other transform inspection functions
+/////////////////////////////////////////
+
+/*
+ * @return non-zero if transform_type is a valid transform type (including "none"), else
+ *         return zero (when transform_type is out of range, or is equal to adios_transform_unknown).
+ */
+int is_transform_type_valid(enum ADIOS_TRANSFORM_TYPE transform_type) {
+    return transform_type >= adios_transform_none &&
+           transform_type < num_adios_transform_types;
+}
diff --git a/src/core/transforms/adios_transforms_hooks.h b/src/core/transforms/adios_transforms_hooks.h
new file mode 100644
index 0000000..09be53d
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks.h
@@ -0,0 +1,47 @@
+/*
+ * adios_transforms_hooks.h
+ *
+ *  Created on: Feb 14, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_HOOKS_H_
+#define ADIOS_TRANSFORMS_HOOKS_H_
+
+// Build the ADIOS_TRANSFORM_TYPE enum
+#include "core/transforms/plugindetect/detect_plugin_types.h"
+
+// Transform info functions
+
+const char * adios_transform_plugin_uid(enum ADIOS_TRANSFORM_TYPE transform_type);
+const char * adios_transform_plugin_desc(enum ADIOS_TRANSFORM_TYPE transform_type);
+int adios_transform_plugin_num_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type);
+const char ** adios_transform_plugin_xml_aliases(enum ADIOS_TRANSFORM_TYPE transform_type);
+const char * adios_transform_plugin_primary_xml_alias(enum ADIOS_TRANSFORM_TYPE transform_type);
+
+// Transform UID -> ID
+
+enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_uid(const char *uid);
+
+// Transform XML alias <-> ID conversion
+
+/*
+ * @param xml_alias the name of a transform type as specified in the ADIOS XML
+ * @return the ADIOS_TRANSFORM_TYPE corresponding to that alias, or
+ *         adios_transform_unknown if it does not match any registered
+ *         transform type
+ */
+enum ADIOS_TRANSFORM_TYPE adios_transform_find_type_by_xml_alias(const char *xml_alias);
+
+/*
+ * @param transform_type a transform type
+ * @return a name that can be used to refer to that transform type within
+ *         the ADIOS XML file, or "" if transform_type is not valid.
+ */
+const char * adios_transform_xml_alias_by_type(enum ADIOS_TRANSFORM_TYPE transform_type);
+
+// Other inspection functions
+
+int is_transform_type_valid(enum ADIOS_TRANSFORM_TYPE transform_type);
+
+#endif /* ADIOS_TRANSFORMS_HOOKS_H_ */
diff --git a/src/core/transforms/adios_transforms_hooks_read.c b/src/core/transforms/adios_transforms_hooks_read.c
new file mode 100644
index 0000000..23682b2
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks_read.c
@@ -0,0 +1,85 @@
+/*
+ * adios_transforms_hooks_read.c
+ *
+ *  Created on: Jul 24, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include "util.h"
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/adios_subvolume.h"
+
+/*
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(none);
+DECLARE_TRANSFORM_READ_METHOD(identity);
+DECLARE_TRANSFORM_READ_METHOD(zlib);
+DECLARE_TRANSFORM_READ_METHOD(bzip2);
+DECLARE_TRANSFORM_READ_METHOD(szip);
+DECLARE_TRANSFORM_READ_METHOD(isobar);
+DECLARE_TRANSFORM_READ_METHOD(aplod);
+DECLARE_TRANSFORM_READ_METHOD(alacrity);
+*/
+
+// PLUGIN DETECT - Generate read-side function declarations for all plugins
+#include "core/transforms/plugindetect/detect_plugin_read_hook_decls.h"
+
+// Transform read method registry
+adios_transform_read_method TRANSFORM_READ_METHODS[num_adios_transform_types];
+
+void adios_transform_read_init() {
+    static int adios_transforms_initialized = 0;
+    if (adios_transforms_initialized)
+        return;
+
+    /*
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, none, adios_transform_none);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, identity, adios_transform_identity);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, zlib, adios_transform_zlib);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, bzip2, adios_transform_bzip2);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, szip, adios_transform_szip);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, isobar, adios_transform_isobar);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, aplod, adios_transform_aplod);
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, alacrity, adios_transform_alacrity);
+    */
+
+    // PLUGIN DETECT - Register read-side functions from all plugins in the table
+    // NOTE: Input macro "TRANSFORM_READ_METHODS" specifies the table to register into, but this
+    //       is already the name of our table, so no further action is needed
+    #include "core/transforms/plugindetect/detect_plugin_read_hook_reg.h"
+
+    adios_transforms_initialized = 1;
+}
+
+adios_datablock * adios_transform_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                       adios_transform_pg_read_request *pg_reqgroup,
+                                                       adios_transform_raw_read_request *completed_subreq) {
+    enum ADIOS_TRANSFORM_TYPE transform_type = reqgroup->transinfo->transform_type;
+    assert(is_transform_type_valid(transform_type));
+    return TRANSFORM_READ_METHODS[transform_type].transform_subrequest_completed(reqgroup, pg_reqgroup, completed_subreq);
+}
+
+adios_datablock * adios_transform_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                        adios_transform_pg_read_request *completed_pg_reqgroup) {
+
+    enum ADIOS_TRANSFORM_TYPE transform_type = reqgroup->transinfo->transform_type;
+    assert(is_transform_type_valid(transform_type));
+    return TRANSFORM_READ_METHODS[transform_type].transform_pg_reqgroup_completed(reqgroup, completed_pg_reqgroup);
+}
+
+adios_datablock * adios_transform_read_reqgroup_completed(adios_transform_read_request *completed_reqgroup) {
+    enum ADIOS_TRANSFORM_TYPE transform_type = completed_reqgroup->transinfo->transform_type;
+    assert(is_transform_type_valid(transform_type));
+    return TRANSFORM_READ_METHODS[transform_type].transform_reqgroup_completed(completed_reqgroup);
+}
+
+int adios_transform_generate_read_subrequests(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup) {
+    enum ADIOS_TRANSFORM_TYPE transform_type = reqgroup->transinfo->transform_type;
+    assert(is_transform_type_valid(transform_type));
+    return TRANSFORM_READ_METHODS[transform_type].transform_generate_read_subrequests(reqgroup, pg_reqgroup);
+}
+
+
diff --git a/src/core/transforms/adios_transforms_hooks_read.h b/src/core/transforms/adios_transforms_hooks_read.h
new file mode 100644
index 0000000..2abf363
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks_read.h
@@ -0,0 +1,127 @@
+/*
+ * adios_transforms_hooks_read.h
+ *
+ *  Created on: Jul 25, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_HOOKS_READ_H_
+#define ADIOS_TRANSFORMS_HOOKS_READ_H_
+
+#include <stdint.h>
+#include "adios_bp_v1.h"
+#include "adios_subvolume.h"
+#include "public/adios_read.h"
+#include "public/adios_selection.h"
+#include "public/adios_error.h"
+
+#include "transforms/adios_transforms_common.h"
+#include "transforms/adios_transforms_read.h"
+#include "transforms/adios_transforms_reqgroup.h"
+#include "transforms/adios_transforms_datablock.h"
+#include "transforms/adios_transforms_transinfo.h"
+
+// Initialize the transform system for adios read-only libraries
+void adios_transform_read_init();
+
+int adios_transform_generate_read_subrequests(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup);
+
+adios_datablock * adios_transform_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                       adios_transform_pg_read_request *pg_reqgroup,
+                                                       adios_transform_raw_read_request *completed_subreq);
+
+adios_datablock * adios_transform_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                        adios_transform_pg_read_request *completed_pg_reqgroup);
+
+adios_datablock * adios_transform_read_reqgroup_completed(adios_transform_read_request *completed_reqgroup);
+
+////////////////////////////////////////////////
+// Transform read method registry/registration
+////////////////////////////////////////////////
+
+// Transform read method registry entry
+typedef struct {
+    int (*transform_generate_read_subrequests)(
+            adios_transform_read_request *reqgroup,
+            adios_transform_pg_read_request *pg_reqgroup);
+
+    adios_datablock * (*transform_subrequest_completed)(
+            adios_transform_read_request *reqgroup,
+            adios_transform_pg_read_request *pg_reqgroup,
+            adios_transform_raw_read_request *completed_subreq);
+
+    adios_datablock * (*transform_pg_reqgroup_completed)(
+            adios_transform_read_request *reqgroup,
+            adios_transform_pg_read_request *completed_pg_reqgroup);
+
+    adios_datablock * (*transform_reqgroup_completed)(
+            adios_transform_read_request *completed_reqgroup);
+} adios_transform_read_method;
+
+//
+// Every transform plugin has a set of functions that must go through three stages:
+// * Declaration: as with a C header
+// * Definition: the functions must be defined with bodies (or defined as
+//   unimplemented using the DECLARE_TRANSFORM_READ_METHOD_UNIMPL utility macro)
+// * Registration: loading pointers to the functions into a callback table
+//
+
+// Transform method function declarations
+#define DECLARE_TRANSFORM_READ_METHOD(tmethod)                            \
+    int adios_transform_##tmethod##_generate_read_subrequests(            \
+            adios_transform_read_request *reqgroup,                       \
+            adios_transform_pg_read_request *pg_reqgroup);                \
+   adios_datablock * adios_transform_##tmethod##_subrequest_completed(    \
+            adios_transform_read_request *reqgroup,                       \
+            adios_transform_pg_read_request *pg_reqgroup,                 \
+            adios_transform_raw_read_request *completed_subreq);          \
+   adios_datablock * adios_transform_##tmethod##_pg_reqgroup_completed(   \
+            adios_transform_read_request *reqgroup,                       \
+            adios_transform_pg_read_request *completed_pg_reqgroup);      \
+   adios_datablock * adios_transform_##tmethod##_reqgroup_completed(      \
+            adios_transform_read_request *completed_reqgroup);
+
+// Transform method function registration
+#define TRANSFORM_READ_METHOD_HOOK_LIST(tmethod) \
+    adios_transform_##tmethod##_generate_read_subrequests, \
+    adios_transform_##tmethod##_subrequest_completed, \
+    adios_transform_##tmethod##_pg_reqgroup_completed, \
+    adios_transform_##tmethod##_reqgroup_completed \
+
+#define REGISTER_TRANSFORM_READ_METHOD_HOOKS(ttable, tmethod, method_type) \
+    ttable[method_type] = (adios_transform_read_method){ TRANSFORM_READ_METHOD_HOOK_LIST(tmethod) };
+
+// Transform method function helper definitions for unimplemented methods
+#define UNIMPL_TRANSFORM_READ_FN(tmethod, func) \
+    adios_error(err_operation_not_supported,                                \
+                "Transform method %s is not supported for read in this "    \
+                "configuration of ADIOS (function missing: %s)\n",            \
+                #tmethod, func);
+
+#define DECLARE_TRANSFORM_READ_METHOD_UNIMPL(tmethod)                     \
+    int adios_transform_##tmethod##_generate_read_subrequests(            \
+            adios_transform_read_request *reqgroup,                    \
+            adios_transform_pg_read_request *pg_reqgroup) {                    \
+        UNIMPL_TRANSFORM_READ_FN(tmethod, __FUNCTION__);                \
+        return adios_errno;                                                \
+    }                                                                    \
+    adios_datablock * adios_transform_##tmethod##_subrequest_completed(    \
+            adios_transform_read_request *reqgroup,                    \
+            adios_transform_pg_read_request *pg_reqgroup,                    \
+            adios_transform_raw_read_request *completed_subreq) {        \
+        UNIMPL_TRANSFORM_READ_FN(tmethod, __FUNCTION__);                \
+        return NULL;                                                    \
+    }                                                                    \
+    adios_datablock * adios_transform_##tmethod##_pg_reqgroup_completed(    \
+            adios_transform_read_request *reqgroup,                    \
+            adios_transform_pg_read_request *completed_pg_reqgroup) {        \
+        UNIMPL_TRANSFORM_READ_FN(tmethod, __FUNCTION__);                \
+        return NULL;                                                    \
+    }                                                                    \
+    adios_datablock * adios_transform_##tmethod##_reqgroup_completed(    \
+            adios_transform_read_request *completed_reqgroup) {        \
+        UNIMPL_TRANSFORM_READ_FN(tmethod, __FUNCTION__);                \
+        return NULL;                                                    \
+    }
+
+#endif /* ADIOS_TRANSFORMS_HOOKS_READ_H_ */
diff --git a/src/core/transforms/adios_transforms_hooks_write.c b/src/core/transforms/adios_transforms_hooks_write.c
new file mode 100644
index 0000000..3df91ee
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks_write.c
@@ -0,0 +1,71 @@
+
+#include <stdint.h>
+#include <assert.h>
+
+#include "adios_logger.h"
+#include "adios_internals.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "public/adios_selection.h"
+
+/*
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(none);
+DECLARE_TRANSFORM_WRITE_METHOD(identity);
+DECLARE_TRANSFORM_WRITE_METHOD(zlib);
+DECLARE_TRANSFORM_WRITE_METHOD(bzip2);
+DECLARE_TRANSFORM_WRITE_METHOD(szip);
+DECLARE_TRANSFORM_WRITE_METHOD(isobar);
+DECLARE_TRANSFORM_WRITE_METHOD(aplod);
+DECLARE_TRANSFORM_WRITE_METHOD(alacrity);
+*/
+
+// PLUGIN DETECT - Generate write-side function declarations for all plugins
+#include "core/transforms/plugindetect/detect_plugin_write_hook_decls.h"
+
+// Transform write method registry
+adios_transform_write_method TRANSFORM_WRITE_METHODS[num_adios_transform_types];
+
+void adios_transform_init() {
+    static int adios_transforms_initialized = 0;
+    if (adios_transforms_initialized)
+        return;
+
+    /*
+    REGISTER_TRANSFORM_WRITE_METHOD(none, adios_transform_none);
+    REGISTER_TRANSFORM_WRITE_METHOD(identity, adios_transform_identity);
+    REGISTER_TRANSFORM_WRITE_METHOD(zlib, adios_transform_zlib);
+    REGISTER_TRANSFORM_WRITE_METHOD(bzip2, adios_transform_bzip2);
+    REGISTER_TRANSFORM_WRITE_METHOD(szip, adios_transform_szip);
+    REGISTER_TRANSFORM_WRITE_METHOD(isobar, adios_transform_isobar);
+    REGISTER_TRANSFORM_WRITE_METHOD(aplod, adios_transform_aplod);
+    REGISTER_TRANSFORM_WRITE_METHOD(alacrity, adios_transform_alacrity);
+    */
+
+    // PLUGIN DETECT - Register write-side functions from all plugins in the table
+    // NOTE: Input macro "TRANSFORM_WRITE_METHODS" specifies the table to register into, but this
+    //       is already the name of our table, so no further action is needed
+    #include "core/transforms/plugindetect/detect_plugin_write_hook_reg.h"
+
+    adios_transforms_initialized = 1;
+}
+
+// Delegate functions
+
+uint16_t adios_transform_get_metadata_size(struct adios_transform_spec *transform_spec) {
+    assert(transform_spec->transform_type >= adios_transform_none && transform_spec->transform_type < num_adios_transform_types);
+    return TRANSFORM_WRITE_METHODS[transform_spec->transform_type].transform_get_metadata_size(transform_spec);
+}
+
+uint64_t adios_transform_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE transform_type, uint64_t orig_size, int num_vars) {
+    assert(transform_type >= adios_transform_none && transform_type < num_adios_transform_types);
+    return TRANSFORM_WRITE_METHODS[transform_type].transform_calc_vars_transformed_size(transform_type, orig_size, num_vars);
+}
+
+int adios_transform_apply(
+        struct adios_file_struct *fd, struct adios_var_struct *var,
+        uint64_t *transformed_len, int use_shared_buffer, int *wrote_to_shared_buffer) {
+
+    assert(var->transform_type >= adios_transform_none && var->transform_type < num_adios_transform_types);
+    return TRANSFORM_WRITE_METHODS[var->transform_type].transform_apply(fd, var, transformed_len, use_shared_buffer, wrote_to_shared_buffer);
+}
diff --git a/src/core/transforms/adios_transforms_hooks_write.h b/src/core/transforms/adios_transforms_hooks_write.h
new file mode 100644
index 0000000..392bb92
--- /dev/null
+++ b/src/core/transforms/adios_transforms_hooks_write.h
@@ -0,0 +1,97 @@
+/*
+ * adios_transforms_hooks_write.h
+ *
+ *  Created on: Jul 25, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_HOOKS_WRITE_H_
+#define ADIOS_TRANSFORMS_HOOKS_WRITE_H_
+
+#include <stdint.h>
+#include "adios_bp_v1.h"
+#include "adios_internals.h"
+#include "adios_transforms_common.h"
+#include "public/adios_error.h"
+
+// Initialize the transform system for adios read/write libraries
+void adios_transform_init();
+
+// Delegation functions
+uint16_t adios_transform_get_metadata_size(struct adios_transform_spec *transform_spec);
+uint64_t adios_transform_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE transform_type, uint64_t orig_size, int num_vars);
+int adios_transform_apply(
+        struct adios_file_struct *fd, struct adios_var_struct *var,
+        uint64_t *transformed_len, int use_shared_buffer, int *wrote_to_shared_buffer);
+
+/////////////////////////////////////////////////
+// Transform write method registry/registration
+/////////////////////////////////////////////////
+
+// Transform write method registry entry
+typedef struct {
+    uint16_t (*transform_get_metadata_size)(struct adios_transform_spec *transform_spec);
+
+    uint64_t (*transform_calc_vars_transformed_size)(
+                enum ADIOS_TRANSFORM_TYPE type,
+                uint64_t orig_size, int num_vars);
+
+    int (*transform_apply)(
+            struct adios_file_struct *fd, struct adios_var_struct *var,
+            uint64_t *transformed_len, int use_shared_buffer, int *wrote_to_shared_buffer);
+} adios_transform_write_method;
+
+//
+// Every transform plugin has a set of functions that must go through three stages:
+// * Declaration: as with a C header
+// * Definition: the functions must be defined with bodies (or defined as
+//   unimplemented using the DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL utility macro)
+// * Registration: loading pointers to the functions into a callback table
+//
+
+// Transform method function declarations
+#define DECLARE_TRANSFORM_WRITE_METHOD(tmethod) \
+    uint16_t adios_transform_##tmethod##_get_metadata_size(struct adios_transform_spec *transform_spec); \
+    uint64_t adios_transform_##tmethod##_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type,      \
+                                                                    uint64_t orig_size, int num_vars);   \
+    int adios_transform_##tmethod##_apply(struct adios_file_struct *fd, struct adios_var_struct *var,    \
+                                          uint64_t *transformed_len,                                     \
+                                          int use_shared_buffer, int *wrote_to_shared_buffer);
+
+// Transform method function registration
+#define TRANSFORM_WRITE_METHOD_HOOK_LIST(tmethod) \
+    adios_transform_##tmethod##_get_metadata_size, \
+    adios_transform_##tmethod##_calc_vars_transformed_size, \
+    adios_transform_##tmethod##_apply
+
+#define REGISTER_TRANSFORM_WRITE_METHOD_HOOKS(ttable, tmethod, method_type) \
+    ttable[method_type] = (adios_transform_write_method){ TRANSFORM_WRITE_METHOD_HOOK_LIST(tmethod) };
+
+// Transform method function helper definitions for unimplemented methods
+#define UNIMPL_TRANSFORM_WRITE_FN(tmethod, func) \
+    adios_error(err_operation_not_supported,                                \
+                "Transform method %s is not supported for write in this "   \
+                "configuration of ADIOS (function missing: %s)\n",          \
+                #tmethod, func);
+
+// Note: this is actually a "definition" in the language-semantic sense, but this detail is
+//  irrelevant to users, so we name it similarly to DECLARE_TRANSFORM_WRITE_METHOD
+#define DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(tmethod)                                       \
+        uint16_t adios_transform_##tmethod##_get_metadata_size(struct adios_transform_spec *transform_spec) { \
+            UNIMPL_TRANSFORM_WRITE_FN(tmethod, __FUNCTION__);                                \
+            return 0;                                                                        \
+        }                                                                                    \
+        uint64_t adios_transform_##tmethod##_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type,     \
+                                                                        uint64_t orig_size, int num_vars) { \
+            UNIMPL_TRANSFORM_WRITE_FN(tmethod, __FUNCTION__);                                \
+            return 0;                                                                        \
+        }                                                                                    \
+        int adios_transform_##tmethod##_apply(struct adios_file_struct *fd,                  \
+                                              struct adios_var_struct *var,                  \
+                                              uint64_t *transformed_len,                     \
+                                              int use_shared_buffer, int *wrote_to_shared_buffer) {  \
+            UNIMPL_TRANSFORM_WRITE_FN(tmethod, __FUNCTION__);                                \
+            return 0;                                                                        \
+        }
+
+#endif /* ADIOS_TRANSFORMS_HOOKS_WRITE_H_ */
diff --git a/src/core/transforms/adios_transforms_read.c b/src/core/transforms/adios_transforms_read.c
new file mode 100644
index 0000000..b1b1b8d
--- /dev/null
+++ b/src/core/transforms/adios_transforms_read.c
@@ -0,0 +1,598 @@
+#include <assert.h>
+
+#include "adios_bp_v1.h"
+#include "adios_internals.h"
+#include "public/adios_selection.h"
+#include "public/adios_error.h"
+#include "public/adios_types.h"
+#include "public/adios_read_v2.h"
+#include "util.h"
+
+#include "adios_selection_util.h"
+
+#include "transforms/adios_transforms_reqgroup.h"
+#include "transforms/adios_transforms_common.h"
+#include "transforms/adios_transforms_datablock.h"
+#include "transforms/adios_transforms_hooks_read.h"
+#include "transforms/adios_transforms_read.h"
+#include "transforms/adios_transforms_util.h"
+
+#define MYFREE(p) {free(p); (p)=NULL;}
+
+// Read request inspection
+enum ADIOS_TRANSFORM_REQGROUP_RESULT_MODE adios_transform_read_request_get_mode(const adios_transform_read_request *req) {
+    return req->orig_data != NULL ? FULL_RESULT_MODE : PARTIAL_RESULT_MODE;
+}
+
+// BLOCKINFO inspection
+uint64_t adios_transform_get_transformed_var_size_from_blockinfo(int raw_ndim, const ADIOS_VARBLOCK *raw_block) {
+    assert(raw_ndim == 1); // Any time dimension should have been stripped from BLOCKINFO
+
+    // Since we swtiched to 1D local byte arrays, the first (and only) dimension contains what we want
+    return raw_block->count[0];
+}
+
+//
+// Read request management (rest of the file)
+//
+
+static uint64_t compute_selection_size_in_bytes(const ADIOS_SELECTION *sel,
+                                                enum ADIOS_DATATYPES datum_type,
+                                                int timestep,
+                                                const ADIOS_VARINFO *raw_varinfo,
+                                                const ADIOS_TRANSINFO *transinfo) {
+    int typesize = adios_get_type_size(datum_type, NULL);
+    int i;
+    switch (sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &sel->u.bb;
+        const int ndim = bb->ndim;
+
+        uint64_t size = typesize;
+        for (i = 0; i < ndim; i++)
+            size *= bb->count[i];
+
+        return size;
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *pts = &sel->u.points;
+        return pts->ndim * pts->npoints * typesize;
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb = &sel->u.block;
+
+        if (wb->is_sub_pg_selection) {
+            return wb->nelements * typesize;
+        } else {
+            const ADIOS_VARBLOCK *theblock;
+            uint64_t size = typesize;
+            int absolute_idx;
+
+            if (wb->is_absolute_index) {
+                absolute_idx = wb->index;
+            } else {
+                int timestep_start_idx = 0;
+                for (i = 0; i < timestep; i++)
+                    timestep_start_idx += raw_varinfo->nblocks[i];
+
+                absolute_idx = timestep_start_idx + wb->index;
+            }
+
+            theblock = &transinfo->orig_blockinfo[absolute_idx];
+            for (i = 0; i < transinfo->orig_ndim; i++)
+                size *= theblock->count[i];
+
+            return size;
+        }
+    }
+    case ADIOS_SELECTION_AUTO:
+    default:
+        adios_error_at_line(err_invalid_argument, __FILE__, __LINE__, "Unsupported selection type %d in data transform read layer", sel->type);
+        return 0;
+    }
+}
+
+/*
+ * Determines the block indices corresponding to a start and end timestep.
+ * Both the input start/end timesteps and the output start/end blockidx are lower bound inclusive, upper bound exclusive: [start, end)
+ */
+static void compute_blockidx_range(const ADIOS_VARINFO *raw_varinfo, int from_steps, int to_steps, int *start_blockidx, int *end_blockidx) {
+    int blockidx;
+
+    // Find the block index for the start and end timestep
+    int curblocks = 0;
+    for (blockidx = 0; blockidx < raw_varinfo->nsteps; blockidx++) {
+        // Find the start block
+        if (blockidx == from_steps) {
+            *start_blockidx = curblocks;
+        }
+        curblocks += raw_varinfo->nblocks[blockidx];
+        // Find the end block, then stop
+        if (blockidx == to_steps - 1) {
+            *end_blockidx = curblocks;
+            break;
+        }
+    }
+}
+
+inline static const ADIOS_SELECTION * create_pg_bounds(int ndim, ADIOS_VARBLOCK *orig_vb) {
+    // Commented out for performance
+    //const uint64_t *new_start = (uint64_t*)bufdup(orig_vb->start, sizeof(uint64_t), ndim);
+    //const uint64_t *new_count = (uint64_t*)bufdup(orig_vb->count, sizeof(uint64_t), ndim);
+
+    //return common_read_selection_boundingbox(ndim, new_start, new_count);
+    return common_read_selection_boundingbox(ndim, orig_vb->start, orig_vb->count);
+}
+
+adios_transform_read_request * adios_transform_generate_read_reqgroup(const ADIOS_VARINFO *raw_varinfo, const ADIOS_TRANSINFO* transinfo, const ADIOS_FILE *fp,
+                                                                       const ADIOS_SELECTION *sel, int from_steps, int nsteps, const char *param, void *data) {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_generate_read_requests_init");
+#endif
+    // Declares
+    adios_transform_read_request *new_reqgroup;
+    int blockidx, timestep, timestep_blockidx;
+    int curblocks, start_blockidx, end_blockidx;
+    int intersects;
+    ADIOS_VARBLOCK *raw_vb, *orig_vb;
+
+    enum ADIOS_FLAG swap_endianness = (fp->endianness == get_system_endianness()) ? adios_flag_no : adios_flag_yes;
+    int to_steps = from_steps + nsteps;
+
+    // Precondition checking
+    assert(is_transform_type_valid(transinfo->transform_type));
+    assert(from_steps >= 0 && to_steps <= raw_varinfo->nsteps);
+
+    if (sel->type != ADIOS_SELECTION_BOUNDINGBOX &&
+        sel->type != ADIOS_SELECTION_POINTS) {
+        adios_error(err_operation_not_supported, "Only bounding box and point selections are currently supported during read on transformed variables.");
+    }
+
+    // Compute the blockidx range, given the timesteps
+    compute_blockidx_range(raw_varinfo, from_steps, to_steps, &start_blockidx, &end_blockidx);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_generate_read_requests_init");
+#endif
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_generate_read_requests_blockinfo");
+#endif
+    // Retrieve blockinfos, if they haven't been done retrieved
+    if (!raw_varinfo->blockinfo)
+        common_read_inq_var_blockinfo_raw(fp, raw_varinfo);
+    if (!transinfo->orig_blockinfo)
+        common_read_inq_trans_blockinfo(fp, raw_varinfo, transinfo);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_generate_read_requests_blockinfo");
+#endif
+
+    // Allocate a new, empty request group
+    new_reqgroup = adios_transform_read_request_new(fp, raw_varinfo, transinfo, sel, from_steps, nsteps, param, data, swap_endianness);
+
+    // Assemble read requests for each varblock
+    blockidx = start_blockidx;
+    timestep = from_steps;
+    timestep_blockidx = 0;
+    while (blockidx != end_blockidx) { //for (blockidx = startblock_idx; blockidx != endblock_idx; blockidx++) {
+        const ADIOS_SELECTION *pg_bounds_sel;
+        ADIOS_SELECTION *pg_intersection_sel;
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_generate_read_requests_createbounds");
+#endif
+        raw_vb = &raw_varinfo->blockinfo[blockidx];
+        orig_vb = &transinfo->orig_blockinfo[blockidx];
+
+        pg_bounds_sel = create_pg_bounds(transinfo->orig_ndim, orig_vb);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_generate_read_requests_createbounds");
+#endif
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_generate_read_requests_intersect");
+#endif
+        // Find the intersection, if any
+        pg_intersection_sel = adios_selection_intersect(pg_bounds_sel, sel);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_generate_read_requests_intersect");
+#endif
+
+        if (pg_intersection_sel) {
+            // Make a PG read request group, and fill it with some subrequests, and link it into the read reqgroup
+            adios_transform_pg_read_request *new_pg_reqgroup;
+            new_pg_reqgroup = adios_transform_pg_read_request_new(timestep, timestep_blockidx,
+                                                                  blockidx,
+                                                                  transinfo->orig_ndim, raw_varinfo->ndim,
+                                                                  orig_vb, raw_vb,
+                                                                  pg_intersection_sel,
+                                                                  pg_bounds_sel);
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_plugin_generate_read_requests");
+#endif
+            adios_transform_generate_read_subrequests(new_reqgroup, new_pg_reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_plugin_generate_read_requests");
+#endif
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_generate_read_requests_pgreq_append");
+#endif
+            adios_transform_pg_read_request_append(new_reqgroup, new_pg_reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_generate_read_requests_pgreq_append");
+#endif
+        } else {
+            // Cleanup
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_generate_read_requests_cleanup");
+#endif
+            common_read_selection_delete(pg_bounds_sel); // OK to delete, because this function only frees the outer struct, not the arrays within
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_generate_read_requests_cleanup");
+#endif
+        }
+
+        // Increment block indexes
+        blockidx++;
+        timestep_blockidx++;
+        if (timestep_blockidx == raw_varinfo->nblocks[timestep]) {
+            timestep_blockidx = 0;
+            timestep++;
+        }
+    }
+
+    // If this read request does not intersect any PGs, then clear the new read request and return NULL
+    if (new_reqgroup->num_pg_reqgroups == 0) {
+        adios_transform_read_request_free(&new_reqgroup);
+        new_reqgroup = NULL;
+    }
+
+    return new_reqgroup;
+}
+
+/*
+ * Called whenever a subreq has been served by the read layer. Marks
+ * all subreqs, pg_reqgroups and read_reqgroups as completed as necessary,
+ * calls the appropriate hooks in the transform method, and returns an
+ * adios_datablock if the transform method produces one.
+ */
+static adios_datablock * finish_subreq(
+        adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *pg_reqgroup,
+        adios_transform_raw_read_request *subreq) {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_plugin_handle_data");
+#endif
+    adios_datablock *result, *tmp_result;
+
+    // Mark the subrequest as complete
+    assert(!subreq->completed && !pg_reqgroup->completed && !reqgroup->completed);
+    adios_transform_raw_read_request_mark_complete(reqgroup, pg_reqgroup, subreq);
+
+    // Invoke all callbacks, depending on what completed, and
+    // get at most one ADIOS_VARCHUNK to return
+    result = adios_transform_subrequest_completed(reqgroup, pg_reqgroup, subreq);
+
+    if (pg_reqgroup->completed) {
+        tmp_result = adios_transform_pg_reqgroup_completed(reqgroup, pg_reqgroup);
+        if (tmp_result) {
+            assert(!result); // pg_reqgroup_completed returned a result, but subrequest_completed did as well
+            result = tmp_result;
+        }
+    }
+
+    if (reqgroup->completed) {
+        tmp_result = adios_transform_read_reqgroup_completed(reqgroup);
+        if (tmp_result) {
+            assert(!result); // read_reqgroup_completed returned a result, but subrequest_completed or pg_reqgroup_completed did as well
+            result = tmp_result;
+        }
+    }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_plugin_handle_data");
+#endif
+
+    return result;
+}
+
+/*
+ * Takes a datablock and applies its data to the user buffer for the given
+ * read request group, then frees the given datablock. Assumes there is, in
+ * fact, a user buffer (i.e., it is not NULL).
+ *
+ * Assumes that the datablock selection is of type bounding box.
+ *
+ * NOTE: also frees the data buffer within the datablock
+ *
+ * @return non-zero if some data in the datablock intersected the read
+ *         request's selection, and was applied; returns 0 otherwise.
+ */
+static int apply_datablock_to_result_and_free(adios_datablock *datablock,
+                                              adios_transform_read_request *reqgroup) {
+    assert(datablock); assert(reqgroup);
+    assert(reqgroup->orig_sel);
+    assert(reqgroup->orig_data);
+
+    if (datablock->bounds->type != ADIOS_SELECTION_BOUNDINGBOX) {
+        adios_error(err_operation_not_supported,
+                    "Only results of bounding box selection type are currently accepted "
+                    "from transform plugins (received selection type %d)",
+                    datablock->bounds->type);
+        assert(0);
+    }
+
+    const int timestep_within_request = datablock->timestep - reqgroup->from_steps;
+    void * const output_ptr = (char*)reqgroup->orig_data + timestep_within_request * reqgroup->orig_sel_timestep_size;
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_patch_data");
+#endif
+    uint64_t used_count =
+            adios_patch_data(output_ptr, (uint64_t)0, reqgroup->orig_sel,
+                             datablock->data, datablock->ragged_offset, datablock->bounds,
+                             datablock->elem_type, reqgroup->swap_endianness);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_patch_data");
+#endif
+
+    adios_datablock_free(&datablock, 1);
+    //return intersects;
+    return used_count != 0;
+}
+
+/*
+ * Takes a datablock containing data potentially applicable to the given read
+ * request group, identifies that data (if any), and returns it as an
+ * ADIOS_VARCHUNK. Additionally, free the datablock.
+ */
+static ADIOS_VARCHUNK * apply_datablock_to_chunk_and_free(adios_datablock *result, adios_transform_read_request *reqgroup) {
+    ADIOS_VARCHUNK *chunk;
+    uint64_t *inter_goffset;
+    uint64_t *inter_offset_within_result;
+    uint64_t *inter_dims;
+
+    uint64_t chunk_buffer_size;
+    ADIOS_SELECTION *inter_sel;
+
+    assert(result); assert(reqgroup);
+    assert(reqgroup->orig_sel);
+
+    inter_sel = adios_selection_intersect(result->bounds, reqgroup->orig_sel);
+
+    if (inter_sel) {
+        // TODO: This data copy code is somewhat inefficient, as it requires a second buffer,
+        //       whereas it may be possible to "compact" the buffer in-place, removing only
+        //       those values that are outside the selection. This would require another large
+        //       chunk of selection-type-pairwise-specific code, as in adios_patchdata.c and
+        //       adios_selection_util.c, so we use this approach to avoid that here. If it
+        //       ends up being slow, this can be fixed.
+
+        // Compute the number of bytes to allocate for this chunk
+        chunk_buffer_size = compute_selection_size_in_bytes(inter_sel, result->elem_type, result->timestep, reqgroup->raw_varinfo, reqgroup->transinfo);
+
+        chunk = malloc(sizeof(ADIOS_VARCHUNK));
+        chunk->data = malloc(chunk_buffer_size);
+        chunk->sel = inter_sel;
+
+        adios_patch_data(chunk->data, 0, chunk->sel,
+                         result->data, result->ragged_offset, result->bounds,
+                         result->elem_type, reqgroup->swap_endianness);
+
+        // Populate the chunk struct
+        chunk->varid = reqgroup->raw_varinfo->varid;
+        chunk->type = result->elem_type;
+
+        common_read_selection_delete(inter_sel);
+    }
+
+    adios_datablock_free(&result, 1); // 1 == free the datablock's buffer, as well
+    return chunk;
+}
+
+static ADIOS_VARCHUNK * extract_chunk_from_finished_read_reqgroup(adios_transform_read_request *reqgroup) {
+    assert(reqgroup);
+    assert(reqgroup->completed);
+
+    ADIOS_VARCHUNK *chunk = malloc(sizeof(ADIOS_VARCHUNK));
+    chunk->varid = reqgroup->raw_varinfo->varid;
+    chunk->type = reqgroup->transinfo->orig_type;
+
+    // Transfer ownership of orig_data
+    chunk->data = reqgroup->orig_data;
+    reqgroup->orig_data = NULL;
+
+    // Transfer ownership of orig_sel
+    chunk->sel = (ADIOS_SELECTION*)reqgroup->orig_sel; // Remove const
+    reqgroup->orig_sel = NULL;
+
+    return chunk;
+}
+
+// Take an ADIOS_VARCHUNK that was just read and process it with the transform
+// system. If it was part of a read request corresponding to a transformed
+// variable, consume it, and (optionally) replace it with a detransformed chunk.
+// Otherwise, do nothing, allowing the calling function to manage it as usual.
+void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups_head, ADIOS_VARCHUNK ** chunk) {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_handle_data");
+#endif
+    adios_transform_read_request *reqgroup;
+    adios_transform_pg_read_request *pg_reqgroup;
+    adios_transform_raw_read_request *subreq;
+    adios_datablock *result, *tmp_result;
+
+    // Find the subrequest that matches the VARCHUNK that was just read (if any)
+    int found = adios_transform_read_request_list_match_chunk(*reqgroups_head, *chunk, 1, &reqgroup, &pg_reqgroup, &subreq);
+
+    // If no subrequest matches the VARCHUNK, it must correspond to a non-transformed variable.
+    // In this case, return immediately and let it be processed as-is.
+    if (!found)
+        return;
+
+    // Otherwise, this VARCHUNK corresponds to a subrequest.
+    // Therefore, consume it, and perhaps replace it with a detransformed chunk.
+
+    // Consume the chunk, as it will be passed to a transform method and should
+    // not be processed by the caller.
+    // (NOTE: Freeing this does not free the memory it points to)
+    common_read_free_chunk(*chunk);
+    *chunk = NULL;
+
+    // Next, free any buffers held by the last-returned VARCHUNK, as they are now invalidated
+    // by the user's call to check_reads (which in turn is the caller of this function)
+    if (reqgroup->lent_varchunk && reqgroup->lent_varchunk->data)
+        free(reqgroup->lent_varchunk->data);
+
+    // Next, update the subreq that corresponds to this VARCHUNK as completed, retrieving any
+    // produced result
+    result = finish_subreq(reqgroup, pg_reqgroup, subreq);
+
+    // Now, if a new adios_datablock is now available as a result of the above completed subreq,
+    // apply it as a result for the user in a way appropriate to the current result mode
+    if (result) {
+        // Then, return data as appropriate depending on the return mode of this read operation
+        //   PARTIAL: no user-allocated buffer is given for the full result, so results must be
+        //            returned one VARCHUNK at a time.
+        //   FULL: the user has supplied a buffer for full results, so patch relevant data from
+        //         the returned VARCHUNK into this buffer.
+        enum ADIOS_TRANSFORM_REQGROUP_RESULT_MODE result_mode = adios_transform_read_request_get_mode(reqgroup);
+        switch (result_mode) {
+        case PARTIAL_RESULT_MODE:
+            // Apply this VARCHUNK
+            *chunk = apply_datablock_to_chunk_and_free(result, reqgroup);
+
+            reqgroup->lent_varchunk = *chunk;
+            break;
+        case FULL_RESULT_MODE:
+            apply_datablock_to_result_and_free(result, reqgroup);
+
+            // If the whole variable is now ready, return it as a VARCHUNK
+            // Otherwise, return no chunk (NULL)
+            if (reqgroup->completed) {
+                *chunk = extract_chunk_from_finished_read_reqgroup(reqgroup);
+            } else {
+                assert(!*chunk); // No chunk to return, and *chunk is already NULL
+            }
+            break;
+        }
+    } else {
+        assert(!*chunk); // No chunk to return, and *chunk is already NULL
+    }
+
+    // Free the read request group if it was completed
+    if (reqgroup->completed) {
+        adios_transform_read_request_remove(reqgroups_head, reqgroup);
+        adios_transform_read_request_free(&reqgroup);
+    }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_handle_data");
+#endif
+}
+
+/*
+ * Process all read reqgroups, assuming they have been fully completed,
+ * producing all required results based on the raw data read.
+ * (This function is called after a blocking perform_reads completes)
+ */
+void adios_transform_process_all_reads(adios_transform_read_request **reqgroups_head) {
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_process_all_reads");
+#endif
+    // Mark all subrequests, PG request groups and read request groups
+    // as completed, calling callbacks as needed
+    adios_transform_read_request *reqgroup;
+    adios_transform_pg_read_request *pg_reqgroup;
+    adios_transform_raw_read_request *subreq;
+    adios_datablock *result;
+
+    // Complete each read reqgroup in turn
+    while ((reqgroup = adios_transform_read_request_pop(reqgroups_head)) != NULL) {
+        // Free leftover read request groups immediately, with no further processing
+        if (reqgroup->completed) {
+            adios_transform_read_request_free(&reqgroup);
+            continue;
+        }
+
+        // Complete every child PG reqgroup
+        for (pg_reqgroup = reqgroup->pg_reqgroups; pg_reqgroup; pg_reqgroup = pg_reqgroup->next) {
+            // Skip completed PG reqgroups
+            if (pg_reqgroup->completed) continue;
+
+            // Complete every child subreq
+            for (subreq = pg_reqgroup->subreqs; subreq; subreq = subreq->next) {
+                // Skip completed subreqs
+                if (subreq->completed) continue;
+
+                // Mark the subreq as completed
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_mark_subreq_complete");
+#endif
+                adios_transform_raw_read_request_mark_complete(reqgroup, pg_reqgroup, subreq);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_mark_subreq_complete");
+#endif
+                assert(subreq->completed);
+
+                // Make the required call to the transform method to apply the results
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_callback_subreq_completed");
+#endif
+                result = adios_transform_subrequest_completed(reqgroup, pg_reqgroup, subreq);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_callback_subreq_completed");
+#endif
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_apply_datablock_subreq");
+#endif
+                if (result) apply_datablock_to_result_and_free(result, reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_apply_datablock_subreq");
+#endif
+            }
+            assert(pg_reqgroup->completed);
+
+            // Make the required call to the transform method to apply the results
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_callback_pg_reqgroup_completed");
+#endif
+            result = adios_transform_pg_reqgroup_completed(reqgroup, pg_reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_callback_pg_reqgroup_completed");
+#endif
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_start ("adios_transform_apply_datablock_pg_reqgroup");
+#endif
+            if (result) apply_datablock_to_result_and_free(result, reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 2)
+    timer_stop ("adios_transform_apply_datablock_pg_reqgroup");
+#endif
+        }
+        assert(reqgroup->completed);
+
+        // Make the required call to the transform method to apply the results
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_callback_reqgroup_completed");
+#endif
+        result = adios_transform_read_reqgroup_completed(reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_callback_reqgroup_completed");
+#endif
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_start ("adios_transform_apply_datablock_reqgroup");
+#endif
+        if (result) apply_datablock_to_result_and_free(result, reqgroup);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_apply_datablock_reqgroup");
+#endif
+
+        // Now that the read reqgroup has been processed, free it (which also frees all children)
+        adios_transform_read_request_free(&reqgroup);
+    }
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 1)
+    timer_stop ("adios_transform_process_all_reads");
+#endif
+}
diff --git a/src/core/transforms/adios_transforms_read.h b/src/core/transforms/adios_transforms_read.h
new file mode 100644
index 0000000..b2ccb94
--- /dev/null
+++ b/src/core/transforms/adios_transforms_read.h
@@ -0,0 +1,79 @@
+/*
+ * Contains read-specific code for handling variable transforms in ADIOS
+ *
+ *  Created on: Jun 27, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_READ_H_
+#define ADIOS_TRANSFORMS_READ_H_
+
+#include "public/adios_error.h"
+#include "public/adios_types.h"
+#include "public/adios_read_v2.h"
+#include "adios_subvolume.h"
+#include "transforms/adios_transforms_common.h"
+#include "transforms/adios_transforms_reqgroup.h"
+
+//
+// Read request inspection
+//
+
+/*
+ * The possible modes in which a read request may be required to
+ * return results to the user.
+ */
+enum ADIOS_TRANSFORM_REQGROUP_RESULT_MODE {
+    // The user has supplied a data buffer that can contain the entire result, so populate it in place.
+    // Successful completion of the read implies this buffer is fully populated.
+    FULL_RESULT_MODE,
+
+    // The user has specified no data buffer, and requests the data to be returned in chunks. Return
+    // an ADIOS_VARCHUNK whenever possible, using as little memory as possible.
+    // TODO: there is no respect for the user's memory limit in this mode; currently, the transform
+    // read layer allocates as much memory as it needs, and there are not many out-of-memory checks.
+    PARTIAL_RESULT_MODE
+};
+
+/*
+ * Used by the transform read layer, this function returns how the given read request is expected
+ * to return its results to the user (i.e., one of the options from the above struct).
+ */
+enum ADIOS_TRANSFORM_REQGROUP_RESULT_MODE adios_transform_read_request_get_mode(const adios_transform_read_request *reqgroup);
+
+//
+// BLOCKINFO inspection
+//
+
+/*
+ * Examines the "raw" BLOCKINFO from some transformed PG, and returns the size (in bytes)
+ * of the transformed data contained within that PG.
+ */
+uint64_t adios_transform_get_transformed_var_size_from_blockinfo(int raw_ndim, const ADIOS_VARBLOCK *raw_block);
+
+//
+// Read request handling
+//
+
+/*
+ * Generates an adios_transform_read_request containing all byte-segment reads to be passed to
+ * the read transport layer. Internally, it delegates to the transform plugin read side to
+ * generate the actual byte segments. This function performs culling based on PG bounds, and
+ * passes user-selection-intersecting regions to the plugin when requesting byte-segment reads.
+ */
+adios_transform_read_request * adios_transform_generate_read_reqgroup(const ADIOS_VARINFO *vi, const ADIOS_TRANSINFO* ti, const ADIOS_FILE *fp,
+                                                                      const ADIOS_SELECTION *sel, int from_steps, int nsteps, const char *param, void *data);
+
+/*
+ * Processes a VARCHUNK just returned by the read layer against the given list of outstanding transform
+ * read requests.
+ */
+void adios_transform_process_read_chunk(adios_transform_read_request **reqgroups_head, ADIOS_VARCHUNK ** chunk);
+
+/*
+ * Processes all data after a blocking read that has serviced all read requests,
+ * completing all transform read requests.
+ */
+void adios_transform_process_all_reads(adios_transform_read_request **reqgroups_head);
+
+#endif /* ADIOS_TRANSFORMS_READ_H_ */
diff --git a/src/core/transforms/adios_transforms_reqgroup.c b/src/core/transforms/adios_transforms_reqgroup.c
new file mode 100644
index 0000000..a28ad69
--- /dev/null
+++ b/src/core/transforms/adios_transforms_reqgroup.c
@@ -0,0 +1,500 @@
+/*
+ * adios_transforms_reqgroup.c
+ *
+ * All node types from the transform read request tree are implemented here.
+ *
+ * Note on use of PREPEND rather than APPEND when adding read requests: the ultimate
+ * goal is to ensure all raw_read_requests are scheduled with the I/O transport layer
+ * according to the pre-order traversal of *how they were added* (not necessarily on
+ * actual tree). For instance, if pg_reqgroup A is added before pg_reqgroup B, then
+ * all raw_read_requests of A should be scheduled before those of B, and within these
+ * groups, in the same order they were appended.
+ *
+ * However, currently the Read BP transport method stores read requests in *reverse order*
+ * from how they are scheduled (internally, it does a list prepend). Thus, the simplest way
+ * to counteract this is to also use list prepends in the read request tree, causing a
+ * pre-order traversal to yield raw_read_requests in reverse order. When they are scheduled
+ * in this order, they will be re-reversed, thus finally ending up in the correct order.
+ *
+ * This problem could also be solved by maintaining list appends in the tree, and then
+ * reversing the list orders before scheduling, or simply iterating over the tree in
+ * post-order traversal (although this would require either reworking the singly-linked
+ * list structure, or using a fancy algorithm that reverses the list, then reverses it
+ * again during iteration). For now, this approach is the safest and most straightforward.
+ *
+ *
+ *  Created on: Jul 30, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include "core/transforms/adios_transforms_hooks_read.h"
+#include "core/transforms/adios_transforms_reqgroup.h"
+#include "core/common_read.h"
+#include "core/adios_subvolume.h"
+#include "public/adios_selection.h"
+
+// An adios_transform_read_request corresponds to a variable read request
+// An adios_transform_pg_read_request corresponds to the portion of a read request intersecting a PG
+// An adios_transform_raw_read_request corresponds to a single raw byte range read within a PG
+
+// adios_transform_raw_read_request owns ->sel and ->data (both will be free'd)
+// adios_transform_pg_read_request owns ->pg_selection and ->pg_intersection_to_global_copyspec (both will be free'd)
+// adios_transform_read_request owns ->orig_sel, ->varinfo and ->transinfo (all will be free'd)
+
+// Also, in all cases, ->transform_internal will be free'd if it is non-NULL
+// Thus, it is best to keep only a single level malloc in transform_internal (no pointers to other mallocs)
+// If this is not possible, you should free() malloced memory yourself as soon as it is no longer needed
+
+#define MYFREE(p) {if (p) free(p); (p)=NULL;}
+
+// Generic list manipulation
+// Assumes the list node struct has a ->next field
+
+#define LIST_APPEND(head, elem, elem_type) \
+    if (!(head)) {                         \
+        (head) = (elem);                   \
+    } else {                               \
+        elem_type *_cur = (head);          \
+        while (_cur->next)                 \
+            _cur = _cur->next;             \
+        _cur->next = (elem);               \
+    }                                      \
+
+#define LIST_PREPEND(head, elem, elem_type) \
+    if (!(head)) {                          \
+        (head) = (elem);                    \
+    } else {                                \
+        (elem)->next = (head);              \
+        (head) = elem;                      \
+    }                                       \
+
+#define LIST_REMOVE(head, elem, elem_type, removed) \
+    LIST_REMOVE_PRED(head, (_cur == (elem)), elem_type, removed)
+
+#define LIST_REMOVE_KEY(head, key, keyfield, elem_type, removed) \
+    LIST_REMOVE_PRED(head, (_cur->keyfield == (key)), elem_type, removed)
+
+#define LIST_REMOVE_PRED(head, pred, elem_type, removed)    \
+    if (!(head)) {                                    \
+        removed = 0;                                \
+    } else {                                        \
+        elem_type *_prev = NULL;                    \
+        elem_type *_cur = (head);                    \
+        while (_cur) {                                \
+            if (pred)                                \
+                break;                                \
+            _prev = _cur;                            \
+            _cur = _cur->next;                        \
+        }                                            \
+        if (!_cur) {                                \
+            removed = NULL;                            \
+        } else {                                    \
+            if (!_prev) {                            \
+                (head) = (head)->next;                \
+            } else {                                \
+                _prev->next = _cur->next;            \
+            }                                        \
+            _cur->next = NULL;                        \
+            removed = _cur;                            \
+        }                                            \
+    }
+
+// Utility functions
+
+static int common_adios_selection_equal(ADIOS_SELECTION *sel1, ADIOS_SELECTION *sel2) {
+    if (sel1->type != sel2->type)
+        return 0;
+
+    switch (sel1->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb1 = &sel1->u.bb;
+        ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb2 = &sel2->u.bb;
+        return (bb1->ndim == bb2->ndim) &&
+               memcmp(bb1->start, bb2->start, bb1->ndim * sizeof(uint64_t)) == 0 &&
+               memcmp(bb1->count, bb2->count, bb1->ndim * sizeof(uint64_t)) == 0;
+    }
+    case ADIOS_SELECTION_WRITEBLOCK:
+    {
+        ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb1 = &sel1->u.block;
+        ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb2 = &sel2->u.block;
+        return (wb1->index == wb2->index) &&
+               (wb1->is_absolute_index == wb2->is_absolute_index) &&
+               (wb1->is_sub_pg_selection == wb2->is_sub_pg_selection) &&
+               (!wb1->is_sub_pg_selection || (
+                    (wb1->element_offset == wb2->element_offset) &&
+                    (wb1->nelements == wb2->nelements)
+               ));
+    }
+    default:
+        adios_error(err_operation_not_supported, "Selection types other than bounding box not supported in %s\n", __FUNCTION__);
+        return 0;
+    }
+}
+
+//
+// adios_transform_read_subreq struct manipulation
+//
+
+adios_transform_raw_read_request * adios_transform_raw_read_request_new(ADIOS_SELECTION *sel, void *data) {
+    adios_transform_raw_read_request *new_subreq = malloc(sizeof(adios_transform_raw_read_request));
+    new_subreq->raw_sel = sel;
+    new_subreq->data = data;
+    new_subreq->completed = 0;
+    new_subreq->transform_internal = 0;
+    new_subreq->next = 0;
+    return new_subreq;
+}
+
+// Define to use the new writeblock-based raw read interface to the I/O transport layer
+// NOTE: Support for NOT using this option (i.e., non-WRITEBLOCK reads) is discontinued, and
+// disabling this option will certainly lead to errors!
+// TODO: Totally remove this option, leaving only the WRITEBLOCK method, once it has been tested
+// and confirmed working/viable
+#define RAW_READS_USE_WRITEBLOCK
+
+adios_transform_raw_read_request * adios_transform_raw_read_request_new_byte_segment(const adios_transform_pg_read_request *pg_reqgroup, uint64_t start, uint64_t count, void *data) {
+    ADIOS_SELECTION *sel;
+
+#ifdef RAW_READS_USE_WRITEBLOCK
+    ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb;
+
+    // NOTE: We use the absolute PG index, along with the is_absolute_index flag below
+    sel = common_read_selection_writeblock(pg_reqgroup->blockidx_in_timestep);
+
+    wb = &sel->u.block;
+    wb->is_absolute_index = 0;
+    wb->is_sub_pg_selection = 1;
+    wb->element_offset = start; // Assume element type of the raw variable is byte
+    wb->nelements = count;
+
+    // Catch any bugs that cause wrap-around early:
+    assert(start <= pg_reqgroup->raw_var_length);
+    assert(count <= pg_reqgroup->raw_var_length);
+    assert(start + count <= pg_reqgroup->raw_var_length);
+#else
+    const ADIOS_VARBLOCK *raw_varblock = pg_reqgroup->raw_varblock;
+    uint64_t *start_sel, *count_sel;
+
+    // TODO: Move this bounding box construction to a separate function?
+    start_sel = (uint64_t*)malloc(2 * sizeof(uint64_t));
+    count_sel = (uint64_t*)malloc(2 * sizeof(uint64_t));
+    // PG ID dim
+    start_sel[0] = raw_varblock->start[0]; // PG ID
+    count_sel[0] = 1;
+    // Buffer dim
+    start_sel[1] = start;
+    count_sel[1] = count;
+
+    // Transfer ownership of the our start/count vectors
+    sel = common_read_selection_boundingbox(2, start_sel, count_sel);
+    start_sel = count_sel = NULL;
+#endif
+
+    return adios_transform_raw_read_request_new(sel, data);
+}
+
+adios_transform_raw_read_request * adios_transform_raw_read_request_new_whole_pg(const adios_transform_pg_read_request *pg_reqgroup, void *data) {
+#ifdef RAW_READS_USE_WRITEBLOCK
+    // Use absolute time index, but not sub-PG read
+    ADIOS_SELECTION *sel = common_read_selection_writeblock(pg_reqgroup->blockidx_in_pg);
+    sel->u.block.is_absolute_index = 1;
+    return adios_transform_raw_read_request_new(sel, data);
+#else
+    // NEW: raw_varblock is always 1D, with that dimension being byte length
+    // OLD, NO LONGER APPLICABLE: raw_varblock has two dimensions: PG ID and byte offset. Thus, the length of this (raw) PG is the length of the 2nd dimension.
+    const ADIOS_VARBLOCK *raw_varblock = pg_reqgroup->raw_varblock;
+    return adios_transform_raw_read_request_new_byte_segment(pg_reqgroup, 0, raw_varblock->count[1], data);
+#endif
+}
+
+void adios_transform_raw_read_request_mark_complete(adios_transform_read_request *parent_reqgroup, adios_transform_pg_read_request *parent_pg_reqgroup,
+                                          adios_transform_raw_read_request *subreq) {
+    if (subreq->completed)
+        return;
+
+    subreq->completed = 1;
+    parent_pg_reqgroup->num_completed_subreqs++;
+
+    if (parent_pg_reqgroup->num_completed_subreqs == parent_pg_reqgroup->num_subreqs) {
+        parent_pg_reqgroup->completed = 1;
+        parent_reqgroup->num_completed_pg_reqgroups++;
+
+        if (parent_reqgroup->num_completed_pg_reqgroups == parent_reqgroup->num_pg_reqgroups) {
+            parent_reqgroup->completed = 1;
+        }
+    }
+}
+
+// NOTE: MUST have removed the subrequest from the PG request group BEFORE calling this
+void adios_transform_raw_read_request_free(adios_transform_raw_read_request **subreq_ptr) {
+    adios_transform_raw_read_request *subreq = *subreq_ptr;
+    assert(!subreq->next); // Not a perfect check, but will catch many requests that are still linked
+
+    // Free malloc'd resources
+    common_read_selection_delete(subreq->raw_sel);
+    MYFREE(subreq->data);
+    MYFREE(subreq->transform_internal);
+
+    // Clear all data to 0's for safety
+    memset(subreq, 0, sizeof(adios_transform_raw_read_request));
+
+    // Free the entire struct and the user's pointer to it
+    MYFREE(*subreq_ptr);
+}
+
+//
+// adios_transform_pg_reqgroup struct manipulation
+//
+
+adios_transform_pg_read_request * adios_transform_pg_read_request_new(
+        int timestep, int timestep_blockidx, int blockidx,
+        int orig_ndim, int raw_ndim,
+        const ADIOS_VARBLOCK *orig_varblock,
+        const ADIOS_VARBLOCK *raw_varblock,
+        const ADIOS_SELECTION *pg_intersection_sel,
+        const ADIOS_SELECTION *pg_bounds_sel) {
+
+    adios_transform_pg_read_request *new_pg_reqgroup;
+
+    assert(orig_varblock);
+    assert(blockidx >= 0);
+
+    new_pg_reqgroup = calloc(sizeof(adios_transform_pg_read_request), 1);
+    new_pg_reqgroup->timestep = timestep;
+    new_pg_reqgroup->blockidx_in_timestep = timestep_blockidx;
+    new_pg_reqgroup->blockidx_in_pg = blockidx;
+    new_pg_reqgroup->raw_var_length = adios_transform_get_transformed_var_size_from_blockinfo(raw_ndim, raw_varblock); //raw_varblock->count[0];
+    new_pg_reqgroup->raw_ndim = raw_ndim;
+    new_pg_reqgroup->orig_ndim = orig_ndim;
+    new_pg_reqgroup->raw_varblock = raw_varblock;
+    new_pg_reqgroup->orig_varblock = orig_varblock;
+    new_pg_reqgroup->pg_intersection_sel = pg_intersection_sel;
+    new_pg_reqgroup->pg_bounds_sel = pg_bounds_sel;
+    // Other fields are 0'd
+
+    return new_pg_reqgroup;
+}
+
+void adios_transform_raw_read_request_append(adios_transform_pg_read_request *pg_reqgroup, adios_transform_raw_read_request *subreq) {
+    LIST_PREPEND(pg_reqgroup->subreqs, subreq, adios_transform_raw_read_request);
+    pg_reqgroup->num_subreqs++;
+}
+
+int adios_transform_raw_read_request_remove(adios_transform_pg_read_request *pg_reqgroup, adios_transform_raw_read_request *subreq) {
+    adios_transform_raw_read_request *removed;
+    LIST_REMOVE(pg_reqgroup->subreqs, subreq, adios_transform_raw_read_request, removed);
+
+    if (removed) pg_reqgroup->num_subreqs--;
+    return removed != NULL;
+}
+
+adios_transform_raw_read_request * adios_transform_raw_read_request_pop(adios_transform_pg_read_request *pg_reqgroup) {
+    adios_transform_raw_read_request *to_remove = pg_reqgroup->subreqs;
+    if (adios_transform_raw_read_request_remove(pg_reqgroup, to_remove))
+        return to_remove;
+    else
+        return NULL;
+}
+
+void adios_transform_pg_read_request_free(adios_transform_pg_read_request **pg_reqgroup_ptr) {
+    adios_transform_pg_read_request *pg_reqgroup = *pg_reqgroup_ptr;
+    adios_transform_raw_read_request *removed_subreq;
+
+    assert(!pg_reqgroup->next);
+
+    // Free any remaining subrequests
+    while ((removed_subreq = adios_transform_raw_read_request_pop(pg_reqgroup)) != NULL) {
+        adios_transform_raw_read_request_free(&removed_subreq);
+    }
+
+    // Free malloc'd resources
+    if (pg_reqgroup->pg_intersection_sel)
+        common_read_selection_delete((ADIOS_SELECTION*)pg_reqgroup->pg_intersection_sel);
+    if (pg_reqgroup->pg_bounds_sel)
+        common_read_selection_delete((ADIOS_SELECTION*)pg_reqgroup->pg_bounds_sel);
+    MYFREE(pg_reqgroup->transform_internal);
+
+    // Clear all data to 0's for safety
+    memset(pg_reqgroup, 0, sizeof(adios_transform_pg_read_request));
+    // Free the entire struct and the user's pointer to it
+    MYFREE(*pg_reqgroup_ptr);
+}
+
+//
+// adios_transform_read_reqgroup struct manipulation
+//
+
+adios_transform_read_request * adios_transform_read_request_new(
+        const ADIOS_FILE *fp, const ADIOS_VARINFO *varinfo, const ADIOS_TRANSINFO *transinfo,
+        const ADIOS_SELECTION *sel, int from_steps, int nsteps,
+        const char *param,
+        void *data, enum ADIOS_FLAG swap_endianness) {
+
+    adios_transform_read_request *new_reqgroup;
+    assert(fp); assert(varinfo); assert(transinfo);
+    assert(nsteps > 0);
+
+    new_reqgroup = calloc(sizeof(adios_transform_read_request), 1);
+    new_reqgroup->fp = fp;
+    new_reqgroup->raw_varinfo = varinfo;
+    new_reqgroup->transinfo = transinfo;
+
+    new_reqgroup->from_steps = from_steps;
+    new_reqgroup->nsteps = nsteps;
+    new_reqgroup->orig_sel = copy_selection(sel);
+    new_reqgroup->read_param = param;
+    new_reqgroup->orig_data = data;
+    new_reqgroup->swap_endianness = swap_endianness;
+
+    new_reqgroup->orig_sel_timestep_size = compute_selection_size(sel) *
+                                           common_read_type_size(transinfo->orig_type, NULL);
+
+    // Other fields are 0'd
+
+    return new_reqgroup;
+}
+
+void adios_transform_pg_read_request_append(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup) {
+    LIST_PREPEND(reqgroup->pg_reqgroups, pg_reqgroup, adios_transform_pg_read_request);
+    reqgroup->num_pg_reqgroups++;
+}
+
+int adios_transform_pg_read_request_remove(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup) {
+    adios_transform_pg_read_request *removed;
+    LIST_REMOVE(reqgroup->pg_reqgroups, pg_reqgroup, adios_transform_pg_read_request, removed);
+
+    if (removed) reqgroup->num_pg_reqgroups--;
+    return removed != NULL;
+}
+
+adios_transform_pg_read_request * adios_transform_pg_read_request_pop(adios_transform_read_request *reqgroup) {
+    adios_transform_pg_read_request *to_remove = reqgroup->pg_reqgroups;
+    if (adios_transform_pg_read_request_remove(reqgroup, to_remove))
+        return to_remove;
+    else
+        return NULL;
+}
+
+void adios_transform_read_request_append(adios_transform_read_request **head, adios_transform_read_request *new_reqgroup) {
+    LIST_PREPEND(*head, new_reqgroup, adios_transform_read_request);
+}
+
+adios_transform_read_request * adios_transform_read_request_remove(adios_transform_read_request **head, adios_transform_read_request *reqgroup) {
+    adios_transform_read_request *removed;
+    LIST_REMOVE(*head, reqgroup, adios_transform_read_request, removed);
+    return removed;
+}
+
+adios_transform_read_request * adios_transform_read_request_pop(adios_transform_read_request **head) {
+    adios_transform_read_request *to_remove = *head;
+    if (adios_transform_read_request_remove(head, to_remove))
+        return to_remove;
+    else
+        return NULL;
+}
+
+void adios_transform_read_request_free(adios_transform_read_request **reqgroup_ptr) {
+    adios_transform_read_request *reqgroup = *reqgroup_ptr;
+    adios_transform_pg_read_request *removed_pg_reqgroup;
+
+    assert(!reqgroup->next);
+
+    // Free any remaining subrequests
+    while ((removed_pg_reqgroup = adios_transform_pg_read_request_pop(reqgroup)) != NULL) {
+        adios_transform_pg_read_request_free(&removed_pg_reqgroup);
+    }
+
+    // Free malloc'd resources
+
+    // Free any data buffer lent to the user, but don't free the VARCHUNK; that
+    // should have been done already by the user
+    if (reqgroup->lent_varchunk)
+        MYFREE(reqgroup->lent_varchunk->data);
+
+    common_read_selection_delete((ADIOS_SELECTION*)reqgroup->orig_sel); // Remove const
+    common_read_free_transinfo(reqgroup->raw_varinfo,
+                               (ADIOS_TRANSINFO*)reqgroup->transinfo); // Remove const
+    common_read_free_varinfo((ADIOS_VARINFO*)reqgroup->raw_varinfo); // Remove const
+    MYFREE(reqgroup->transform_internal);
+
+    // Clear all data to 0's for safety
+    memset(reqgroup, 0, sizeof(adios_transform_read_request));
+    // Free the entire struct and the user's pointer to it
+    MYFREE(*reqgroup_ptr);
+}
+
+//
+// Chunk matching code
+//
+
+static int adios_transform_pg_read_request_match_chunk(const adios_transform_pg_read_request *pg_reqgroup,
+                                                       const ADIOS_VARCHUNK *chunk, int skip_completed,
+                                                       adios_transform_raw_read_request **matching_subreq) {
+
+    adios_transform_raw_read_request *cur;
+
+    for (cur = pg_reqgroup->subreqs; cur; cur = cur->next) {
+        if (skip_completed && cur->completed)
+            continue;
+
+        if (common_adios_selection_equal(cur->raw_sel, chunk->sel))
+            break;
+    }
+
+    // cur will be NULL if none matched
+    *matching_subreq = cur;
+    return cur != NULL;
+}
+
+static int adios_transform_read_request_match_chunk(const adios_transform_read_request *reqgroup,
+                                                    const ADIOS_VARCHUNK *chunk, int skip_completed,
+                                                    adios_transform_pg_read_request **matching_pg_reqgroup,
+                                                    adios_transform_raw_read_request **matching_subreq) {
+
+    adios_transform_pg_read_request *cur;
+
+    if (reqgroup->raw_varinfo->varid != chunk->varid)
+        return 0;
+
+    int found = 0;
+    // Search all PG request groups
+    for (cur = reqgroup->pg_reqgroups; cur; cur = cur->next) {
+        // Skip completed PG reqgroups if required
+        if (skip_completed && cur->completed)
+            continue;
+
+        // Skip PG reqgroups that are for other timesteps
+        if (cur->timestep != chunk->from_steps)
+            continue;
+
+        // Delegate remaining search to the PG regroup
+        found = adios_transform_pg_read_request_match_chunk(cur, chunk, skip_completed, matching_subreq);
+        if (found)
+            break;
+    }
+
+    // cur will be NULL if nothing matched
+    *matching_pg_reqgroup = cur;
+    return found;
+}
+
+int adios_transform_read_request_list_match_chunk(const adios_transform_read_request *reqgroup_head,
+                                                  const ADIOS_VARCHUNK *chunk, int skip_completed,
+                                                  adios_transform_read_request **matching_reqgroup,
+                                                  adios_transform_pg_read_request **matching_pg_reqgroup,
+                                                  adios_transform_raw_read_request **matching_subreq) {
+    int found;
+    adios_transform_read_request *cur;
+    for (cur = reqgroup_head; cur; cur = cur->next) {
+        found = adios_transform_read_request_match_chunk(cur, chunk, skip_completed, matching_pg_reqgroup, matching_subreq);
+        if (found)
+            break;
+    }
+
+    *matching_reqgroup = cur;
+    return found;
+}
diff --git a/src/core/transforms/adios_transforms_reqgroup.h b/src/core/transforms/adios_transforms_reqgroup.h
new file mode 100644
index 0000000..cbf060a
--- /dev/null
+++ b/src/core/transforms/adios_transforms_reqgroup.h
@@ -0,0 +1,149 @@
+/*
+ * adios_transformed_reqgroup.h
+ *
+ *  Created on: Jul 30, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_REQGROUP_H_
+#define ADIOS_TRANSFORMS_REQGROUP_H_
+
+#include <stdint.h>
+#include "core/transforms/adios_transforms_common.h"
+#include "core/transforms/adios_transforms_transinfo.h"
+#include "public/adios_read.h"
+#include "public/adios_types.h"
+
+//
+// Read request-related structs:
+//
+// adios_transform_read_request
+//   adios_transform_pg_read_request
+//     adios_transform_raw_read_request
+//
+
+typedef struct _adios_transform_raw_read_request {
+    int             completed; // Whether this request has been completed
+
+    ADIOS_SELECTION *raw_sel; // The raw selection to pose to the read layer
+    void            *data;
+
+    void            *transform_internal; // Transform plugin private
+
+    // Linked list
+    struct _adios_transform_raw_read_request *next;
+} adios_transform_raw_read_request;
+
+typedef struct _adios_transform_pg_read_request {
+    int completed; // Whether this request has been completed
+
+    // PG information
+    int timestep;                        // The timestep to which this PG belongs
+    int blockidx_in_timestep;            // The block ID of this PG within the timestep
+    int blockidx_in_pg;                  // The block ID of this PG within the variable
+    uint64_t raw_var_length;             // Transformed variable data length, in bytes
+    int raw_ndim;                        // Number of dimensions in the raw (byte array) dimensions (should always be 1)
+    int orig_ndim;                       // Number of dimensions in the original (user-view) dimensions
+    const ADIOS_VARBLOCK *raw_varblock;  // Points into adios_transform_read_reqgroup->varinfo->blockinfo; do not free here
+    const ADIOS_VARBLOCK *orig_varblock; // Points into adios_transform_read_reqgroup->transinfo->orig_blockinfo; do not free here
+
+    // Various selections to aid in datablock construction
+    const ADIOS_SELECTION *pg_intersection_sel;
+    const ADIOS_SELECTION *pg_bounds_sel;
+
+    // Subrequests
+    int num_subreqs;
+    int num_completed_subreqs;
+    adios_transform_raw_read_request *subreqs;
+
+    void *transform_internal; // Transform plugin private
+
+    // Linked list
+    struct _adios_transform_pg_read_request *next;
+} adios_transform_pg_read_request;
+
+typedef struct _adios_transform_read_request {
+    int completed; // Whether this request has been completed
+
+    ADIOS_VARCHUNK *lent_varchunk;    // varchunk owned by the common read layer (the transform code,
+                                      // specifically), which was lent to the user as a VARCHUNK.
+
+    const ADIOS_FILE        *fp;
+
+    const ADIOS_VARINFO     *raw_varinfo;
+    const ADIOS_TRANSINFO   *transinfo;
+    enum ADIOS_FLAG         swap_endianness;
+
+    // Original selection info
+    int                     from_steps;
+    int                     nsteps;
+    const ADIOS_SELECTION   *orig_sel;  // Global space
+    const char              *read_param; // Special read parameter passed by user, to be interpreted by the transform method
+    void                    *orig_data; // User buffer supplied in schedule_reads (could be NULL)
+
+    // Number of bytes in data within the selection per timestep
+    uint64_t                orig_sel_timestep_size;
+
+    // Child PG read requests
+    int num_pg_reqgroups;
+    int num_completed_pg_reqgroups;
+    adios_transform_pg_read_request *pg_reqgroups;
+
+    void *transform_internal; // Transform plugin private
+
+    // Linked list
+    struct _adios_transform_read_request *next;
+} adios_transform_read_request;
+
+//
+// adios_transform_raw_read_request manipulation
+//
+adios_transform_raw_read_request * adios_transform_raw_read_request_new(ADIOS_SELECTION *sel, void *data);
+adios_transform_raw_read_request * adios_transform_raw_read_request_new_byte_segment(const adios_transform_pg_read_request *pg_reqgroup, uint64_t start, uint64_t count, void *data);
+adios_transform_raw_read_request * adios_transform_raw_read_request_new_whole_pg(const adios_transform_pg_read_request *pg_reqgroup, void *data);
+void adios_transform_raw_read_request_free(adios_transform_raw_read_request **subreq_ptr);
+
+void adios_transform_raw_read_request_mark_complete(adios_transform_read_request *regroup_parent,
+                                                    adios_transform_pg_read_request *parent_pg_reqgroup,
+                                                    adios_transform_raw_read_request *subreq);
+
+void adios_transform_raw_read_request_append(adios_transform_pg_read_request *pg_reqgroup, adios_transform_raw_read_request *subreq);
+int adios_transform_raw_read_request_remove(adios_transform_pg_read_request *pg_reqgroup, adios_transform_raw_read_request *subreq);
+adios_transform_raw_read_request * adios_transform_raw_read_request_pop(adios_transform_pg_read_request *pg_reqgroup);
+
+//
+// adios_transform_pg_read_request manipulation
+//
+adios_transform_pg_read_request * adios_transform_pg_read_request_new(int timestep, int timestep_blockidx, int blockidx,
+                                                                      int orig_ndim, int raw_ndim,
+                                                                      const ADIOS_VARBLOCK *orig_varblock,
+                                                                      const ADIOS_VARBLOCK *raw_varblock,
+                                                                      const ADIOS_SELECTION *pg_intersection_sel,
+                                                                      const ADIOS_SELECTION *pg_bounds_sel);
+void adios_transform_pg_read_request_free(adios_transform_pg_read_request **pg_reqgroup_ptr);
+
+void adios_transform_pg_read_request_append(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup);
+int adios_transform_pg_read_request_remove(adios_transform_read_request *reqgroup, adios_transform_pg_read_request *pg_reqgroup);
+adios_transform_pg_read_request * adios_transform_pg_read_request_pop(adios_transform_read_request *reqgroup);
+
+//
+// adios_transform_read_reqgroup manipulation
+//
+adios_transform_read_request * adios_transform_read_request_new(const ADIOS_FILE *fp, const ADIOS_VARINFO *varinfo,
+                                                                  const ADIOS_TRANSINFO *transinfo,
+                                                                  const ADIOS_SELECTION *sel, int from_steps, int nsteps,
+                                                                  const char *param,
+                                                                  void *data, enum ADIOS_FLAG swap_endianness);
+void adios_transform_read_request_free(adios_transform_read_request **reqgroup_ptr);
+
+void adios_transform_read_request_append(adios_transform_read_request **head, adios_transform_read_request *new_reqgroup);
+adios_transform_read_request * adios_transform_read_request_remove(adios_transform_read_request **head, adios_transform_read_request *reqgroup);
+adios_transform_read_request * adios_transform_read_request_pop(adios_transform_read_request **head);
+
+int adios_transform_read_request_list_match_chunk(const adios_transform_read_request *reqgroup_head,
+                                               const ADIOS_VARCHUNK *chunk, int skip_completed,
+                                                  adios_transform_read_request **matching_reqgroup,
+                                                  adios_transform_pg_read_request **matching_pg_reqgroup,
+                                                  adios_transform_raw_read_request **matching_subreq);
+
+#endif /* ADIOS_TRANSFORMS_REQGROUP_H_ */
diff --git a/src/core/transforms/adios_transforms_specparse.c b/src/core/transforms/adios_transforms_specparse.c
new file mode 100644
index 0000000..8f097cd
--- /dev/null
+++ b/src/core/transforms/adios_transforms_specparse.c
@@ -0,0 +1,157 @@
+/*
+ * adios_transforms_specparse.c
+ *
+ *  Created on: May 20, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include "core/transforms/adios_transforms_specparse.h"
+
+inline static char * strsplit(char *input, char split) {
+    char *pos = strchr(input, split);
+    if (!pos)
+        return NULL;
+
+    *pos = '\0';
+    return pos + 1;
+}
+
+inline static int strcount(char *input, char chr) {
+    int count = 0;
+    while ((input = strchr(input, chr))) {
+        count++;
+        input++;
+    }
+    return count;
+}
+
+// var is a pointer type
+#define MALLOC_ARRAY(var, count) ((var) = (__typeof__(var))malloc(sizeof(*var) * (count)))
+#define MALLOC_VAR(var) MALLOC_ARRAY(var, 1)
+#define CALLOC_ARRAY(var, count) ((var) = (__typeof__(var))calloc((count), sizeof(*var)))
+#define CALLOC_VAR(var) CALLOC_ARRAY(var, 1)
+
+struct adios_transform_spec * adios_transform_parse_spec(const char *spec_str) {
+    //struct adios_transform_spec *spec = (struct adios_transform_spec *)malloc(sizeof(struct adios_transform_spec));
+    struct adios_transform_spec *spec;
+    MALLOC_VAR(spec);
+
+    *spec = (struct adios_transform_spec){
+        .transform_type = adios_transform_none,
+        .transform_type_str = "",
+        .param_count = 0,
+        .params = NULL,
+        .backing_str = NULL,
+        .backing_str_len = 0,
+    };
+
+    // If the spec string is null/empty, stop now with a blank spec
+    if (!spec_str || strcmp(spec_str, "") == 0)
+        return spec;
+    assert(spec_str && strcmp(spec_str, "") != 0);
+
+    // Duplicate the spec string so we can chop it up
+    char *new_spec_str = strdup(spec_str);
+    spec->backing_str = new_spec_str;
+    spec->backing_str_len = strlen(new_spec_str);
+
+    // Mark the transform method string in the spec string (the beginning)
+    spec->transform_type_str = new_spec_str;
+
+    // Split off the parameters if present
+    char *param_list = strsplit(new_spec_str, ':');
+
+    // Parse the transform method string
+    spec->transform_type = adios_transform_find_type_by_xml_alias(spec->transform_type_str);
+
+    // If the transform type is unknown (error) or none, stop now and return
+    if (spec->transform_type == adios_transform_unknown ||
+        spec->transform_type == adios_transform_none)
+        return spec;
+    assert(spec->transform_type != adios_transform_unknown &&
+           spec->transform_type != adios_transform_none);
+
+    // If there is no parameter list, we are done
+    if (!param_list)
+        return spec;
+    assert(param_list);
+
+    spec->param_count = strcount(param_list, ',') + 1;
+    MALLOC_ARRAY(spec->params, spec->param_count);
+    //spec->params = (typeof(spec->params))malloc(sizeof(*spec->params));
+
+    struct adios_transform_spec_kv_pair *cur_kv = spec->params;
+    char *cur_param;
+    while (param_list) {
+        cur_param = param_list;
+        param_list = strsplit(param_list, ',');
+
+        cur_kv->key = cur_param;
+        cur_kv->value = strsplit(cur_param, '='); // NULL if no =
+
+        cur_kv++;
+    }
+
+    return spec;
+}
+
+struct adios_transform_spec * adios_transform_spec_copy(struct adios_transform_spec *src) {
+    struct adios_transform_spec *dst;
+    CALLOC_VAR(dst);
+
+    dst->transform_type = src->transform_type;
+
+    // Duplicate the backing string if needed, then rebase all strings pointing into it
+    if (src->backing_str) {
+        // Duplicate the backing string
+        dst->backing_str_len = src->backing_str_len;
+        dst->backing_str = (char *)malloc(dst->backing_str_len + 1);
+        memcpy(dst->backing_str, src->backing_str, src->backing_str_len + 1); // memcpy because it may have several \0's in it
+
+        // Rebase the transform type string
+        if (src->transform_type_str)
+            dst->transform_type_str = src->transform_type_str - src->backing_str + dst->backing_str;
+        else
+            dst->transform_type_str = NULL;
+
+        // Rebase all the parameters, if present
+        if (src->params) {
+            int i;
+            dst->param_count = src->param_count;
+            MALLOC_ARRAY(dst->params, dst->param_count);
+
+            for (i = 0; i < dst->param_count; i++) {
+                const struct adios_transform_spec_kv_pair *src_kv = &src->params[i];
+                struct adios_transform_spec_kv_pair *dst_kv = &dst->params[i];
+
+                if (src_kv->key)
+                    dst_kv->key = src_kv->key - src->backing_str + dst->backing_str;
+                else
+                    dst_kv->key = NULL;
+
+                if (src_kv->value)
+                    dst_kv->value = src_kv->value - src->backing_str + dst->backing_str;
+                else
+                    dst_kv->value = NULL;
+            }
+        } else {
+            dst->params = NULL;
+        }
+    } else {
+        dst->backing_str = NULL;
+    }
+
+    return dst;
+}
+
+#define FREE(x) {if(x)free(x);(x)=NULL;}
+void adios_transform_free_spec(struct adios_transform_spec **spec_ptr) {
+    struct adios_transform_spec *spec = *spec_ptr;
+    FREE(spec->params);
+    FREE(spec->backing_str);
+    FREE(*spec_ptr)
+}
+#undef FREE
diff --git a/src/core/transforms/adios_transforms_specparse.h b/src/core/transforms/adios_transforms_specparse.h
new file mode 100644
index 0000000..279555d
--- /dev/null
+++ b/src/core/transforms/adios_transforms_specparse.h
@@ -0,0 +1,50 @@
+/*
+ * adios_transforms_specparse.h
+ *
+ *  Created on: May 20, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_SPECPARSE_H_
+#define ADIOS_TRANSFORMS_SPECPARSE_H_
+
+#include "core/transforms/plugindetect/detect_plugin_types.h"
+
+struct adios_transform_spec_kv_pair{
+    const char *key;
+    const char *value;
+};
+
+struct adios_transform_spec {
+    enum ADIOS_TRANSFORM_TYPE transform_type;
+    const char *transform_type_str;
+
+    int param_count;
+    struct adios_transform_spec_kv_pair * params;
+
+    // Internal
+    int backing_str_len;
+    char *backing_str;
+};
+
+/*
+ * Parses the transform spec string (i.e. transform="zlib:5"), returning a struct
+ * describing the result
+ * @param transform_spec_str the transform spec string
+ * @return the parsed transform spec
+ */
+struct adios_transform_spec * adios_transform_parse_spec(const char *transform_spec_str);
+
+/*
+ * Copies a transform spec struct, creating a new, independent instance
+ * with the same contents.
+ */
+struct adios_transform_spec * adios_transform_spec_copy(struct adios_transform_spec *src);
+
+/*
+ * Frees an adios_transform_spec struct.
+ * @param spec the transform spec to free
+ */
+void adios_transform_free_spec(struct adios_transform_spec **spec);
+
+#endif /* ADIOS_TRANSFORMS_SPECPARSE_H_ */
diff --git a/src/core/transforms/adios_transforms_transinfo.h b/src/core/transforms/adios_transforms_transinfo.h
new file mode 100644
index 0000000..1ae9a7a
--- /dev/null
+++ b/src/core/transforms/adios_transforms_transinfo.h
@@ -0,0 +1,30 @@
+/*
+ *  Created on: Jul 23, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_TRANSINFO_H_
+#define ADIOS_TRANSFORMS_TRANSINFO_H_
+
+#include "adios_transforms_common.h"
+#include "public/adios_read.h"
+
+// NCSU ALACRITY-ADIOS - struct for original metadata
+typedef struct {
+    enum ADIOS_TRANSFORM_TYPE transform_type;
+
+    uint16_t transform_metadata_len;
+    void *transform_metadata;
+    int should_free_transform_metadata; // Used internally by read method and free
+
+    enum ADIOS_DATATYPES orig_type;
+
+    int orig_ndim;
+    uint64_t *orig_dims;
+
+    int orig_global;
+
+    ADIOS_VARBLOCK *orig_blockinfo;
+} ADIOS_TRANSINFO;
+
+#endif /* ADIOS_TRANSFORMS_TRANSINFO_H_ */
diff --git a/src/core/transforms/adios_transforms_util.c b/src/core/transforms/adios_transforms_util.c
new file mode 100644
index 0000000..c1a09bd
--- /dev/null
+++ b/src/core/transforms/adios_transforms_util.c
@@ -0,0 +1,69 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include "adios_transforms_common.h"
+#include "adios_transforms_util.h"
+#include "adios_internals.h"
+
+static int buffer_reserve(char ** buffer, uint64_t * buffer_size
+                         ,uint64_t * buffer_offset
+                         ,uint64_t size, uint64_t max_size
+                         )
+{
+    if (*buffer_offset + size > *buffer_size || *buffer == 0)
+    {
+        if (*buffer_offset + size + 1000 > max_size) {
+            fprintf (stderr, "Cannot allocate memory in buffer_write.  "
+                             "Requested: %llu, Maximum: %llu\n", *buffer_offset + size + 1000, max_size);
+            return 0;
+        }
+
+        char * b = realloc (*buffer, *buffer_offset + size + 1000);
+        if (b)
+        {
+            *buffer = b;
+            *buffer_size = (*buffer_offset + size + 1000);
+        }
+        else
+        {
+            fprintf (stderr, "Cannot allocate memory in buffer_write.  "
+                             "Requested: %llu\n", *buffer_offset + size + 1000);
+
+            return 0;
+        }
+    }
+    return 1;
+}
+
+static int buffer_write (char ** buffer, uint64_t * buffer_size
+                         ,uint64_t * buffer_offset
+                         ,const void * data, uint64_t size, uint64_t max_size
+                         )
+{
+    if (!buffer_reserve(buffer, buffer_size, buffer_offset, size, max_size))
+        return 0;
+
+    memcpy (*buffer + *buffer_offset, data, size);
+    *buffer_offset += size;
+    return 1;
+}
+
+
+int shared_buffer_write(struct adios_file_struct *fd, const void * data, uint64_t size) {
+    return buffer_write(&fd->buffer, &fd->buffer_size, &fd->offset, data, size, fd->write_size_bytes);
+}
+
+int shared_buffer_reserve(struct adios_file_struct *fd, uint64_t size) {
+    return buffer_reserve(&fd->buffer, &fd->buffer_size, &fd->offset, size, fd->write_size_bytes);
+}
+
+int shared_buffer_mark_written(struct adios_file_struct *fd, uint64_t size) {
+    if (fd->offset + size > fd->buffer_size)
+        return 0;
+
+    fd->offset += size;
+    return 1;
+}
diff --git a/src/core/transforms/adios_transforms_util.h b/src/core/transforms/adios_transforms_util.h
new file mode 100644
index 0000000..72e8cf4
--- /dev/null
+++ b/src/core/transforms/adios_transforms_util.h
@@ -0,0 +1,22 @@
+/*
+ * adios_transforms_util.h
+ *
+ *  Created on: Jul 13, 2012
+ *      Author: Drew
+ */
+
+#ifndef ADIOS_TRANSFORMS_UTIL_H_
+#define ADIOS_TRANSFORMS_UTIL_H_
+
+#include <stdint.h>
+#include "public/adios_types.h"
+#include "core/adios_internals.h"
+//#include "adios_internals.h"
+
+
+int shared_buffer_write(struct adios_file_struct *fd, const void * data, uint64_t size);
+int shared_buffer_reserve(struct adios_file_struct *fd, uint64_t size);
+int shared_buffer_mark_written(struct adios_file_struct *fd, uint64_t size);
+
+
+#endif /* ADIOS_TRANSFORMS_UTIL_H_ */
diff --git a/src/core/transforms/adios_transforms_write.c b/src/core/transforms/adios_transforms_write.c
new file mode 100644
index 0000000..438ca37
--- /dev/null
+++ b/src/core/transforms/adios_transforms_write.c
@@ -0,0 +1,774 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "adios_bp_v1.h"
+#include "common_adios.h"
+#include "adios_logger.h"
+#include "adios_internals.h"
+#include "public/adios_types.h"
+#include "util.h"
+
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_specparse.h"
+
+////////////////////////////////////////
+// adios_group_size support
+////////////////////////////////////////
+uint64_t adios_transform_worst_case_transformed_group_size(uint64_t group_size, struct adios_file_struct *fd)
+{
+    // New group size is always at least the original group size
+    uint64_t max_transformed_group_size = group_size;
+    int non_scalar_transformed_var_count = 0;
+
+    struct adios_var_struct *cur_var;
+    uint64_t transformed_group_size;
+    int transform_type;
+
+    // Table of what transform types have been seen so far.
+    // Allocated on stack; no dynamic memory to clean up.
+    int transform_type_seen[num_adios_transform_types];
+    memset(transform_type_seen, 0, num_adios_transform_types * sizeof(int));
+
+    // Identify all transform methods used, and count the number of non-scalar
+    // variables
+    for (cur_var = fd->group->vars; cur_var; cur_var = cur_var->next)
+    {
+        // Skip unknown/none transform types and scalar variables
+        if (cur_var->transform_type == adios_transform_none ||
+            !cur_var->dimensions)
+        {
+            continue;
+        }
+
+        transform_type_seen[cur_var->transform_type] = 1;
+        non_scalar_transformed_var_count++;
+    }
+
+    // For each transform type, get a worst-case group size estimate, and
+    // record the worst of the worst cases
+    for (transform_type = adios_transform_none + 1; transform_type < num_adios_transform_types; transform_type++) {
+        if (!transform_type_seen[transform_type])
+            continue;
+
+        transformed_group_size = adios_transform_calc_vars_transformed_size(transform_type, group_size, non_scalar_transformed_var_count);
+
+        if (transformed_group_size > max_transformed_group_size) {
+            max_transformed_group_size = transformed_group_size;
+        }
+    }
+
+    // Return the maximum worst case for the group size. Note that this is
+    // always at least group_size, since it is initialized to that value,
+    // and never decreases.
+    return max_transformed_group_size;
+}
+
+////////////////////////////////////////
+// Variable conversion to byte array (preparation for transform)
+////////////////////////////////////////
+
+static void init_dimension_item(struct adios_dimension_item_struct *dimitem) {
+    dimitem->rank = 0;
+    dimitem->var = NULL;
+    dimitem->attr = NULL;
+    dimitem->time_index = adios_flag_no;
+}
+
+static struct adios_dimension_struct * new_dimension() {
+    struct adios_dimension_struct *dim = (struct adios_dimension_struct *)malloc(sizeof(struct adios_dimension_struct));
+
+    init_dimension_item(&dim->dimension);
+    init_dimension_item(&dim->global_dimension);
+    init_dimension_item(&dim->local_offset);
+    dim->next = 0;
+    return dim;
+}
+
+// TODO: Delete this function when the new version is confirmed working (i.e., tests with FORTRAN writes and C reads, and vice versa, all work)
+static int find_time_dimension_old(struct adios_dimension_struct *dim, struct adios_dimension_struct **time_dim, enum ADIOS_FLAG fortran_order_flag) {
+    struct adios_dimension_struct *cur_dim;
+    int i;
+    for (i = 0, cur_dim = dim; cur_dim; cur_dim = cur_dim->next, i++ ) {
+        if (cur_dim->dimension.time_index == adios_flag_yes) {
+            if (time_dim) *time_dim = cur_dim;
+            return i;
+        }
+
+        // If we're at the last dimension, and we haven't found a time
+        // dimension yet, check whether the global array is zero; if so, we
+        // have a time dimension, and must infer the location based on whether
+        // this is FORTRAN or not
+        if (!cur_dim->next) {
+            if (cur_dim->global_dimension.var == NULL && cur_dim->global_dimension.rank == 0) {
+                if (fortran_order_flag == adios_flag_yes) {
+                    if (time_dim) *time_dim = cur_dim;
+                    return i;
+                } else if (fortran_order_flag == adios_flag_no) {
+                    if (time_dim) *time_dim = dim;
+                    return 0;
+                }
+            }
+        }
+    }
+
+    if (time_dim) *time_dim = 0;
+    return -1;
+}
+
+static int is_dimension_item_zero(struct adios_dimension_item_struct *dim_item) {
+    return dim_item->rank == 0 && dim_item->var == NULL && dim_item->attr == NULL;
+}
+
+static int is_time_dimension(struct adios_dimension_struct *dim) {
+    return dim->dimension.time_index == adios_flag_yes ||
+           dim->global_dimension.time_index == adios_flag_yes ||
+           dim->local_offset.time_index == adios_flag_yes;
+}
+
+static int has_time_dimension(struct adios_dimension_struct *dim, int fortran_dim_order) {
+    int has_time = 0;
+    struct adios_dimension_struct *first_dim = dim;
+    struct adios_dimension_struct *last_dim = NULL;
+    for (; dim != NULL; dim = dim->next) {
+        last_dim = dim; // This will hold the last non-NULL value of dim
+
+        // If this dimension is explicitly marked as time, then there is a time dimension
+        if (is_time_dimension(dim))
+            has_time = 1;
+    }
+
+    // If the last dimension has local dimension != 0 and global dimension == 0 (which we infer means there
+    // is one less global dim than local), and the dimension at the expected time dimension position (first for C,
+    // last for FORTRAN) has length 1, then we determine there is a time dimension.
+    // FIXME: This may be affected by the same bug as mentioned near the end of adios_read_bp_is_var_timed
+    //        in read_bp.c, in that this condition is ambiguous for 1D, non-timed, local arrays (if the comment
+    //        in read_bp.c is addressed in the future, remove this one as well).
+    const struct adios_dimension_struct *candidate_time_dim = (fortran_dim_order ? last_dim : first_dim);
+    if (!is_dimension_item_zero(&last_dim->dimension) &&
+        is_dimension_item_zero(&last_dim->global_dimension) &&
+        candidate_time_dim->dimension.rank == 1) {
+        has_time = 1;
+    }
+
+    return has_time;
+}
+
+// TODO: Delete this once the replacement is working correctly
+// If there is a time dimension the final dimensions will look like this:
+//   local:  t  l1 l2 l3 (or l1 l2 l3 t if fortran order)
+//   global: g1 g2 g3 0
+//   offset: o1 o2 o3 0
+static void adios_transform_attach_byte_array_dimensions_old(struct adios_group_struct *grp, struct adios_var_struct *var) {
+    int i, new_ndim, new_time_dim_pos;
+    uint64_t ldims[3];
+    uint64_t gdims[3];
+    uint64_t odims[3];
+
+    int orig_ndim = count_dimensions(var->pre_transform_dimensions);
+    int orig_time_dim_pos = find_time_dimension_old(var->pre_transform_dimensions, NULL, grp->adios_host_language_fortran);
+
+    assert(orig_time_dim_pos == -1 || orig_time_dim_pos == 0 || orig_time_dim_pos == orig_ndim - 1); // Time dimension is either first, last, or non-existant
+
+    ldims[0] = 1; // 1 PG ID in length
+    ldims[1] = 0; // unknown bytes in length
+    gdims[0] = UINT64_MAX >> 1; // Infinite max PGs
+    gdims[1] = UINT64_MAX >> 1; // Infinite max bytes
+    odims[0] = 0; // unknown PG ID
+    odims[1] = 0; // 0 byte offset
+    ldims[2] = gdims[2] = odims[2] = 0; // No 3rd dimension, yet
+
+    // If we are writing from a FORTRAN file, we need to reverse the raw dimensions, so that when
+    // it is read back it is properly swapped to C order
+    if (grp->adios_host_language_fortran == adios_flag_yes) {
+        int dummy = -1;
+        swap_order(2, ldims, &dummy);
+        swap_order(2, gdims, &dummy);
+        swap_order(2, odims, &dummy);
+    }
+
+    // Add the time dimension
+    if (orig_time_dim_pos == 0) {
+        ldims[2] = ldims[1];
+        ldims[1] = ldims[0];
+        ldims[0] = 1;
+        new_ndim = 3;
+        new_time_dim_pos = 0;
+    } else if (orig_time_dim_pos == orig_ndim - 1) {
+        ldims[2] = 1;
+        new_ndim = 3;
+        new_time_dim_pos = 2;
+    } else {
+        new_ndim = 2;
+        new_time_dim_pos = -1;
+    }
+
+    // Construct the dimension linked list
+    for (i = 0; i < new_ndim; i++) {
+        struct adios_dimension_struct *new_dim = new_dimension();
+        new_dim->dimension.time_index = (i == new_time_dim_pos) ? adios_flag_yes : adios_flag_no;
+        new_dim->dimension.rank = ldims[i];
+        new_dim->global_dimension.rank = gdims[i];
+        new_dim->local_offset.rank = odims[i];
+        adios_append_dimension(&var->dimensions, new_dim);
+    }
+}
+
+// Attaches to the given variable new metadata defining a 1D local array of bytes.
+static void adios_transform_attach_byte_array_dimensions(struct adios_group_struct *grp, struct adios_var_struct *var) {
+    int i;
+
+    const int fortran_dim_order = (grp->adios_host_language_fortran == adios_flag_yes);
+    const int orig_ndim = count_dimensions(var->pre_transform_dimensions);
+    const int orig_has_time = has_time_dimension(var->pre_transform_dimensions, fortran_dim_order);
+
+    //const int new_ndim = (orig_has_time ? 2 : 1); // 1D byte array, plus a time dimension if the original had one
+    //const int new_has_time = orig_has_time;
+    //const int new_time_dim_pos = (fortran_dim_order ? new_ndim - 1 : 0); // Place the time dimension last for FORTRAN order, first for C order
+    const int new_ndim = 1;
+    const int new_has_time = 0;
+    const int new_time_dim_pos = 0;
+
+    // Construct the dimension linked list
+    for (i = 0; i < new_ndim; i++) {
+        struct adios_dimension_struct *new_dim = new_dimension();
+
+        new_dim->dimension.time_index = (new_has_time && i == new_time_dim_pos) ? adios_flag_yes : adios_flag_no;
+
+        // Clear global dimension/local offset arrays to all 0 to indicate a local array
+        // For local dimensions, set the time dimension to 1, and the non-time dimension to 0 as a placeholder
+        new_dim->dimension.rank = (new_has_time && i == new_time_dim_pos) ? 1 : 0;
+        new_dim->global_dimension.rank = 0;
+        new_dim->local_offset.rank = 0;
+
+        adios_append_dimension(&var->dimensions, new_dim);
+    }
+}
+
+static void adios_transform_convert_var_to_byte_array(struct adios_group_struct *grp, struct adios_var_struct *var) {
+    // Save old metadata
+    var->pre_transform_type = var->type;
+    var->pre_transform_dimensions = var->dimensions;
+
+    // Convert the type to byte array and clear the dimensions (since they were
+    // moved and shouldn't be double-referenced)
+    var->type = adios_byte;
+    var->dimensions = 0;
+
+    // Attach the new dimension to the variable
+    adios_transform_attach_byte_array_dimensions(grp, var);
+}
+
+////////////////////////////////////////
+// Definition phase - set up transform parameters
+////////////////////////////////////////
+
+static int is_scalar(const struct adios_var_struct *var) {
+    return var->dimensions == NULL;
+}
+
+static int is_timed_scalar(const struct adios_var_struct *var) {
+    return var->dimensions &&                                          // Has first dimension
+           var->dimensions->next == NULL &&                            // Does not have second dimension
+           is_time_dimension(var->dimensions) &&                       // The first dimension is a time dimension
+           is_dimension_item_zero(&var->dimensions->global_dimension); // It's not a global array
+}
+
+/*
+ * Modifies the given variable's metadata to support the data transform specified by
+ * the given transform spec. Also handles error conditions, such as the variable
+ * being a scalar (which disallows any data transform).
+ */
+struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *orig_var_grp,
+                                                     struct adios_var_struct *orig_var,
+                                                     struct adios_transform_spec *transform_spec) {
+    // First detect error conditions that prevent the transform from being applied
+
+    // If the variable has a transform, but is a scalar: remove the transform, warn the user, and continue as usual
+    if (transform_spec->transform_type != adios_transform_none &&
+        (is_scalar(orig_var) || is_timed_scalar(orig_var))) {
+        log_warn("Data transforms not allowed on scalars, yet variable %s/%s is marked for transform \"%s\"; not applying data transform.\n",
+                 orig_var->path, orig_var->name, transform_spec->transform_type_str);
+
+        orig_var->transform_type = adios_transform_none;
+        orig_var->transform_spec = transform_spec;
+        orig_var->transform_spec->transform_type = adios_transform_none;
+        return orig_var;
+    }
+
+    // The variable has none of the above errors; apply the transform metadata
+
+    log_debug("Transforming variable %s/%s with type %d\n", orig_var->path, orig_var->name, transform_spec->transform_type);
+
+    // Set transform type and spec
+    orig_var->transform_type = transform_spec->transform_type;
+    orig_var->transform_spec = transform_spec;
+
+    // If there is no transform, nothing else to do
+    if (transform_spec->transform_type == adios_transform_none)
+        return orig_var;
+
+    // If we get here, transform_type is an actual transformation, so prepare
+    // the variable. This entails 1) adding a new dimension variable for
+    // the variable (it will become a 1D byte array), and 2) making the
+    // variable into a 1D byte array.
+
+    // Convert variable to 1D byte array
+    adios_transform_convert_var_to_byte_array(orig_var_grp, orig_var);
+    log_debug("Data Transforms layer: Converted variable %s into byte array internally\n", orig_var->name);
+
+    // Allocate the transform-specific metadata buffer
+    orig_var->transform_metadata_len = adios_transform_get_metadata_size(transform_spec);
+    if (orig_var->transform_metadata_len)
+        orig_var->transform_metadata = malloc(orig_var->transform_metadata_len);
+
+    // Return the modified variable
+    return orig_var;
+}
+
+////////////////////////////////////////
+// Write phase - transformed byte array dimension management
+////////////////////////////////////////
+
+// NCSU ALACRITY-ADIOS - Compute the pre-transform size of a variable, in bytes
+// Precondition: var is a non-scalar that has been transformed (transform_type != none)
+uint64_t adios_transform_get_pre_transform_var_size(struct adios_group_struct *group, struct adios_var_struct *var) {
+    assert(var->dimensions);
+    assert(var->type != adios_string);
+    assert(var->transform_type != adios_transform_none);
+    return adios_get_type_size(var->pre_transform_type, NULL) *
+           adios_get_dimension_space_size(var,
+                                          var->pre_transform_dimensions,
+                                          group);
+}
+
+static inline uint64_t generate_unique_block_id(const struct adios_file_struct * fd, const struct adios_var_struct *var) {
+    return ((uint64_t)fd->group->process_id << 32) + (uint64_t)var->write_count;
+}
+
+// TODO: Delete this once the new implementation is known to work
+static int adios_transform_store_transformed_length_old(struct adios_file_struct * fd, struct adios_var_struct *var, uint64_t transformed_len) {
+    struct adios_dimension_struct *dim1, *dim2, *dim3;
+    struct adios_dimension_item_struct *pg_id_offset, *byte_length_ldim;
+
+    const uint64_t pg_id = generate_unique_block_id(fd, var);//fd->pg_start_in_file; // Use the current file offset as a unique ID for this PG
+
+    // Get the first two dimensions (which always exist)
+    dim1 = var->dimensions;
+    assert(dim1);
+    dim2 = dim1->next;
+    assert(dim2);
+
+    // Find appropriate dimension items
+    if (fd->group->adios_host_language_fortran == adios_flag_yes)
+        pg_id_offset = &dim2->local_offset;
+    else
+        pg_id_offset = &dim1->local_offset;
+
+    if (dim1->dimension.time_index == adios_flag_yes) {
+        // If the first dimension is a time dimension, then dimension is
+        // upshifted, but only for ->dimension
+        dim3 = dim2->next;
+        assert(dim3);
+        if (fd->group->adios_host_language_fortran == adios_flag_yes)
+            byte_length_ldim = &dim2->dimension;
+        else
+            byte_length_ldim = &dim3->dimension;
+    } else {
+        if (fd->group->adios_host_language_fortran == adios_flag_yes)
+            byte_length_ldim = &dim1->dimension;
+        else
+            byte_length_ldim = &dim2->dimension;
+    }
+
+    // Finally, insert the values into the dimension items
+    pg_id_offset->rank = pg_id;
+    byte_length_ldim->rank = transformed_len;
+
+    //printf(">>> Statistics bitmap at store-time: %08lx\n", var->bitmap);
+
+    return 1;
+}
+
+/*
+ * Stores the given transformed data length (number of bytes) into the appropriate place
+ * in the dimensions array (the non-time local dimension).
+ */
+static int adios_transform_store_transformed_length(struct adios_file_struct * fd, struct adios_var_struct *var, uint64_t transformed_len) {
+    struct adios_dimension_struct *dim1, *dim2;
+    struct adios_dimension_item_struct *byte_length_ldim;
+
+    // Get the first two dimensions (only the first must always exist)
+    dim1 = var->dimensions;
+    assert(dim1);
+    dim2 = dim1->next;
+
+    if (dim1->dimension.time_index == adios_flag_yes) {
+        // If the first dimension is a time dimension, then the byte array dimension must be the second one
+        assert(dim2);
+        byte_length_ldim = &dim2->dimension;
+    } else {
+        // Otherwise, either the second dimension is the time dimension, or there is no time dimension
+        // Either way, the first dimension is the byte array dimension
+        byte_length_ldim = &dim1->dimension;
+    }
+
+    // Finally, insert the byte length into the appropriate local dimension "rank" (i.e., as a literal value,
+    // as opposed to a reference to a scalar/attribute).
+    byte_length_ldim->rank = transformed_len;
+
+    return 1;
+}
+
+int adios_transform_variable_data(struct adios_file_struct * fd,
+                                  struct adios_var_struct *var,
+                                  int use_shared_buffer,
+                                  int *wrote_to_shared_buffer) {
+    //printf("[TRANSFORM] Would be doing transform ID %d on variable %s here, if it were implemented\n", var->transform_type, var->name);
+    //printf("[TRANSFORM] Apparent type of variable is %s, but was originally %s\n", adios_type_to_string_int(var->type), adios_type_to_string_int(var->pre_transform_type));
+    //printf("[TRANSFORM] Original size of variable data is %llu\n", adios_transform_get_pre_transform_var_size(fd->group, var));
+
+    assert(fd);
+    assert(var);
+
+    if (var->transform_type == adios_transform_none) {
+        // If no transform is required, do nothing, and delegate payload
+        // writing to the caller by not using the shared buffer
+        *wrote_to_shared_buffer = 0;
+        return 1;
+    }
+
+    assert(var->type == adios_byte); // Assume byte array
+    assert(var->transform_type != adios_transform_none);
+
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_start ("adios_transform_apply");
+#endif
+    // Transform the data, get the new length
+    uint64_t transformed_len;
+    int success = adios_transform_apply(fd, var, &transformed_len, use_shared_buffer, wrote_to_shared_buffer);
+#if defined(WITH_NCSU_TIMER) && defined(TIMER_LEVEL) && (TIMER_LEVEL <= 0)
+    timer_stop ("adios_transform_apply");
+#endif
+
+    if (!success)
+        return 0;
+
+    // Store the new length in the metadata
+    adios_transform_store_transformed_length(fd, var, transformed_len);
+
+    return 1;
+}
+
+
+
+//////////////////////////////////////////////////////////////////////////
+// Characteristic support, used in adios_internals.c so cannot be
+// in the adios_transforms_common.c, as that isn't always linked
+// with adios_internals.c.
+//////////////////////////////////////////////////////////////////////////
+
+// TODO: There are 3 exact copies of this function:
+//       1) here, 2) core/adios_internals.c, 3) write/adios_adaptive.c
+//       Someone should extract to a single copy and make it public via
+//       a header file.
+static void buffer_write (char ** buffer, uint64_t * buffer_size
+                         ,uint64_t * buffer_offset
+                         ,const void * data, uint64_t size
+                         )
+{
+    if (*buffer_offset + size > *buffer_size || *buffer == 0)
+    {
+        char * b = realloc (*buffer, *buffer_offset + size + 1000);
+        if (b)
+        {
+            *buffer = b;
+            *buffer_size = (*buffer_offset + size + 1000);
+        }
+        else
+        {
+            fprintf (stderr, "Cannot allocate memory in buffer_write.  "
+                             "Requested: %llu\n", *buffer_offset + size + 1000);
+
+            return;
+        }
+    }
+
+    memcpy (*buffer + *buffer_offset, data, size);
+    *buffer_offset += size;
+}
+
+// Init
+int adios_transform_init_transform_var(struct adios_var_struct *var) {
+    var->transform_type = adios_transform_none;
+    var->transform_spec = 0;
+    var->pre_transform_dimensions = 0;
+    var->pre_transform_type = adios_unknown;
+    //var->transform_type_param_len = 0;
+    //var->transform_type_param = 0;
+    var->transform_metadata_len = 0;
+    var->transform_metadata = 0;
+    return 1;
+}
+
+// Serialize
+static void adios_transform_dereference_dimensions_characteristic(struct adios_index_characteristic_dims_struct_v1 *dst_char_dims, const struct adios_dimension_struct *src_var_dims) {
+    uint8_t i;
+    uint8_t c = count_dimensions(src_var_dims);
+
+    dst_char_dims->count = c;
+    dst_char_dims->dims = malloc(3 * 8 * c); // (local, global, local offset) * count
+    assert(dst_char_dims->dims);
+    uint64_t *ptr = dst_char_dims->dims;
+    for (i = 0; i < c; i++)
+    {
+        //  Casts to eliminate const-ness problems
+        ptr[0] = adios_get_dim_value((struct adios_dimension_item_struct *)&src_var_dims->dimension);
+        ptr[1] = adios_get_dim_value((struct adios_dimension_item_struct *)&src_var_dims->global_dimension);
+        ptr[2] = adios_get_dim_value((struct adios_dimension_item_struct *)&src_var_dims->local_offset);
+        src_var_dims = src_var_dims->next;
+        ptr += 3; // Go to the next set of 3
+    }
+}
+
+static void dereference_dimension_item(struct adios_dimension_item_struct *dst_dim_item, const struct adios_dimension_item_struct *src_dim_item) {
+    dst_dim_item->var = NULL;
+    dst_dim_item->attr = NULL;
+    dst_dim_item->rank = adios_get_dim_value((struct adios_dimension_item *)src_dim_item);
+    dst_dim_item->time_index = src_dim_item->time_index;
+}
+
+/*
+ * Takes a given dimension struct (src_var_dims), converts all dimension items to literal
+ * values by reading the value of any reference scalars/attributes. These literal values
+ * are stored to a new dimension struct (dst_var_dims) in the "rank" fields. The original
+ * struct is unchanged.
+ */
+static void dereference_dimensions_var(struct adios_dimension_struct **dst_var_dims, const struct adios_dimension_struct *src_var_dims) {
+    uint8_t i;
+    uint8_t c = count_dimensions(src_var_dims);
+
+    for (i = 0; i < c; i++) {
+        struct adios_dimension_struct * d_new =
+            (struct adios_dimension_struct *)malloc(sizeof (struct adios_dimension_struct));
+
+        // de-reference dimension id
+        dereference_dimension_item(&d_new->dimension, &src_var_dims->dimension);
+        dereference_dimension_item(&d_new->global_dimension, &src_var_dims->global_dimension);
+        dereference_dimension_item(&d_new->local_offset, &src_var_dims->local_offset);
+        d_new->next = 0;
+
+        adios_append_dimension(dst_var_dims, d_new);
+
+        src_var_dims = src_var_dims->next;
+    }
+}
+
+static void adios_transform_clean_dimensions(struct adios_index_characteristic_dims_struct_v1 *dst_char_dims) {
+    dst_char_dims->count = 0;
+    if (dst_char_dims->dims)
+        free(dst_char_dims->dims);
+    dst_char_dims->dims = 0;
+}
+
+static void serialize_transform_type(enum ADIOS_TRANSFORM_TYPE transform_type,
+                                     uint64_t *write_length, char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset) {
+    const char *transform_uid = adios_transform_plugin_uid(transform_type);
+    const uint8_t transform_uid_len = (uint8_t)strlen(transform_uid);
+
+    // Write the pre-transform datatype
+    buffer_write(buffer, buffer_size, buffer_offset, &transform_uid_len, 1);
+    *write_length += 1;
+
+    // Write the number of pre-transform dimensions
+    buffer_write (buffer, buffer_size, buffer_offset, transform_uid, transform_uid_len);
+    *write_length += transform_uid_len;
+}
+
+static uint8_t adios_transform_serialize_transform(enum ADIOS_TRANSFORM_TYPE transform_type,
+                                                   enum ADIOS_DATATYPES pre_transform_type,
+                                                   const struct adios_index_characteristic_dims_struct_v1 *pre_transform_dimensions,
+                                                   uint16_t transform_metadata_len,
+                                                   void *transform_metadata,
+                                                   uint64_t *write_length, char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset) {
+
+    // Either there is no metadata, or the metadata buffer is non-null
+    assert(!transform_metadata_len || transform_metadata);
+
+    *write_length = 0;
+
+    // No transform case
+    if (transform_type == adios_transform_none)
+        return 0;
+
+    // From this point on, this is an actual transform type
+
+    // Write characteristic flag
+    uint8_t flag = (uint8_t)adios_characteristic_transform_type;
+    buffer_write(buffer, buffer_size, buffer_offset, &flag, 1);
+    *write_length += 1;
+
+    // Write transform type
+    //buffer_write(buffer, buffer_size, buffer_offset, &transform_type, 1);
+    //*write_length += 1;
+    serialize_transform_type(transform_type, write_length, buffer, buffer_size, buffer_offset);
+
+    // Write the pre-transform datatype
+    buffer_write(buffer, buffer_size, buffer_offset, &pre_transform_type, 1);
+    *write_length += 1;
+
+    // Write the number of pre-transform dimensions
+    buffer_write (buffer, buffer_size, buffer_offset, &pre_transform_dimensions->count, 1);
+    *write_length += 1;
+
+    // Write the length of pre-transform dimension data about to be written
+    uint16_t len = 3 * 8 * pre_transform_dimensions->count;
+    buffer_write (buffer, buffer_size, buffer_offset, &len, 2);
+    *write_length += 2;
+
+    // Write the pre-transform dimensions
+    buffer_write (buffer, buffer_size, buffer_offset, pre_transform_dimensions->dims, len);
+    *write_length += len;
+
+    buffer_write (buffer, buffer_size, buffer_offset, &transform_metadata_len, 2);
+    *write_length += 2;
+
+    if (transform_metadata_len) {
+        buffer_write (buffer, buffer_size, buffer_offset, transform_metadata, transform_metadata_len);
+        *write_length += transform_metadata_len;
+    }
+
+    return 1; // Return that we wrote 1 characteristic flag
+}
+
+uint8_t adios_transform_serialize_transform_characteristic(const struct adios_index_characteristic_transform_struct *transform, uint64_t *write_length,
+                                                           char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset) {
+    return adios_transform_serialize_transform(
+                transform->transform_type, transform->pre_transform_type, &transform->pre_transform_dimensions,
+                transform->transform_metadata_len, transform->transform_metadata,
+                write_length, buffer, buffer_size, buffer_offset
+           );
+}
+
+uint8_t adios_transform_serialize_transform_var(const struct adios_var_struct *var, uint64_t *write_length,
+                                                char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset) {
+
+    // In this case, we are going to actually serialize the dimensions as a
+    // adios_index_characteristic_dims_struct_v1, but it is currently in the
+    // form of an adios_dimension_struct. We must convert here before passing
+    // to the common serialization routine.
+
+    struct adios_index_characteristic_dims_struct_v1 tmp_dims;
+    adios_transform_dereference_dimensions_characteristic(&tmp_dims, var->pre_transform_dimensions);
+
+    // Perform the serialization using the common function with the temp dimension structure
+    uint8_t char_write_count =
+            adios_transform_serialize_transform(
+                var->transform_type, var->pre_transform_type, &tmp_dims,
+                var->transform_metadata_len, var->transform_metadata,
+                write_length, buffer, buffer_size, buffer_offset
+            );
+
+    // Free the temp dimension structure
+    adios_transform_clean_dimensions(&tmp_dims);
+
+    return char_write_count;
+}
+
+// Clear
+int adios_transform_clear_transform_var(struct adios_var_struct *var) {
+    var->transform_type = adios_transform_none;
+    if (var->transform_spec)
+        adios_transform_free_spec(&var->transform_spec); // Also clears to 0
+
+    var->pre_transform_type = 0;
+
+    // Frees and zeros-out pre_transform_dimensions (since last ->next is 0)
+    while (var->pre_transform_dimensions)
+    {
+        struct adios_dimension_struct * dimensions = var->pre_transform_dimensions->next;
+        free(var->pre_transform_dimensions);
+        var->pre_transform_dimensions = dimensions;
+    }
+
+    // Free/clear transform-specific metadata
+    var->transform_metadata_len = 0;
+    if (var->transform_metadata)
+        free(var->transform_metadata);
+    var->transform_metadata = 0;
+
+    return 1; // Return success
+}
+
+// Copy
+int adios_transform_copy_transform_characteristic(struct adios_index_characteristic_transform_struct *dst_transform, const struct adios_var_struct *src_var) {
+    adios_transform_init_transform_characteristic(dst_transform);
+
+    dst_transform->transform_type = src_var->transform_type;
+    dst_transform->pre_transform_type = src_var->pre_transform_type;
+
+    // Note: the & on the first arg and not the second is intentional (the first isn't a pointer by itself, the second is)
+    adios_transform_dereference_dimensions_characteristic(&dst_transform->pre_transform_dimensions, src_var->pre_transform_dimensions);
+
+    dst_transform->transform_metadata_len = src_var->transform_metadata_len;
+    if (src_var->transform_metadata_len) {
+        dst_transform->transform_metadata = malloc(src_var->transform_metadata_len);
+        memcpy(dst_transform->transform_metadata, src_var->transform_metadata, src_var->transform_metadata_len);
+    } else {
+        dst_transform->transform_metadata = 0;
+    }
+
+    return 1;
+}
+
+int adios_transform_copy_var_transform(struct adios_var_struct *dst_var, const struct adios_var_struct *src_var) {
+    adios_transform_init_transform_var(dst_var);
+
+    dst_var->transform_type = src_var->transform_type;
+    dst_var->pre_transform_type = src_var->pre_transform_type;
+
+    // Dereferemce all dimensions, forcing them to be literal values ("rank" fields), as
+    // required by the function that calls this, adios_copy_var_written().
+    dereference_dimensions_var(&dst_var->pre_transform_dimensions, src_var->pre_transform_dimensions);
+
+    // for parameter
+    dst_var->transform_spec = adios_transform_spec_copy(src_var->transform_spec);
+
+    dst_var->transform_metadata_len = src_var->transform_metadata_len;
+    if (src_var->transform_metadata_len) {
+        dst_var->transform_metadata = malloc(src_var->transform_metadata_len);
+        memcpy(dst_var->transform_metadata, src_var->transform_metadata, src_var->transform_metadata_len);
+    } else {
+        dst_var->transform_metadata = 0;
+    }
+
+    return 1;
+}
+
+
+static uint64_t calc_transform_uid_overhead(struct adios_var_struct *var) {
+    assert(var->transform_type != adios_transform_none && var->transform_type != adios_transform_unknown);
+
+    const char *transform_uid = adios_transform_plugin_uid(var->transform_type);
+    return 1 +                    // For the length of the UID string
+           strlen(transform_uid); // The UID string itself
+}
+
+// Calculate overhead
+uint64_t adios_transform_calc_transform_characteristic_overhead(struct adios_var_struct *var) {
+    if (var->transform_type == adios_transform_none) {
+        return 0; // No overhead needed, since the characteristic won't be written at all
+    } else {
+        return 1 +    // For characterstic flag
+               //1 +    // For transform_type field // no longer used, replaced by transform UID
+               calc_transform_uid_overhead(var) + // For the transform UID (serialized form of transform type)
+               1 +    // For pre_transform_type field
+               adios_calc_var_characteristics_dims_overhead(var->pre_transform_dimensions) + // For pre-transform dimensions field
+               2 +    // For transform_metadata_len
+               var->transform_metadata_len; // For transform_metadata
+    }
+}
diff --git a/src/core/transforms/adios_transforms_write.h b/src/core/transforms/adios_transforms_write.h
new file mode 100644
index 0000000..d7a2a40
--- /dev/null
+++ b/src/core/transforms/adios_transforms_write.h
@@ -0,0 +1,97 @@
+/*
+ * Contains write-specific code for handling variable transforms in ADIOS
+ *
+ *  Created on: Jun 27, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORMS_WRITE_H_
+#define ADIOS_TRANSFORMS_WRITE_H_
+
+#include "adios_bp_v1.h"
+#include "adios_internals.h"
+#include "adios_transforms_common.h"
+
+/*
+ * Returns the pre-transform size, in bytes, of a variable. Note: only works on
+ * "dimensioned" variables (i.e., not a scalar or a string).
+ * @param group the ADIOS group of the variable
+ * @param var the variable to examine
+ * @return the pre-transform size, in bytes, of var
+ */
+uint64_t adios_transform_get_pre_transform_var_size(struct adios_group_struct *group, struct adios_var_struct *var);
+
+/*
+ * Modifies the variable definition appropriately for the case that the variable
+ * is to be transformed. In the current implementation, this includes converting
+ * the variable type to a byte array, storing the old dimension/type metadata,
+ * and setting appropriate flag fields.
+ */
+struct adios_var_struct * adios_transform_define_var(struct adios_group_struct *orig_var_grp,
+                                                     struct adios_var_struct *orig_var,
+                                                     struct adios_transform_spec *transform_spec);
+
+/*
+ * Transforms a given variable orig_var via the given transform type.
+ *
+ * If use_shared_buffer is true, this function is permitted to write directly
+ * to the shared buffer associated with fd (i.e. fd->buffer). It will treat the
+ * buffer correctly, using the buffer_write function call or similar to update
+ * offsets and allocate memory as needed.
+ *
+ * If use_shared_buffer is true, this function will update
+ * wrote_to_shared_buffer to indicate whether the shared buffer was actually
+ * used. If not, the calling function must make the necessary copies from
+ * var->data. If use_shared_buffer is false, wrote_to_shared_buffer will
+ * not be changed.
+ *
+ * Note: var->free_data will be set to adios_flag_yes iff a new buffer is
+ * malloced and should later be freed by ADIOS.
+ *
+ * @param fd the file descriptor containing the variable to transform
+ * @param var the variable whose data should be transformed (var->data)
+ * @param use_shared_buffer a pointer to a boolean dictating whether the shared
+ *        buffer may be directly written to.
+ * @param wrote_to_shared_buffer a pointer to a boolean that should be updated
+ *        indicating whether the transform method actually used the shared
+ *        buffer (if not, the caller will manually copy var->data to the shared
+ *        buffer). This must never be true if use_shared_buffer is false.
+ * @return true for success, false otherwise
+ */
+int adios_transform_variable_data(struct adios_file_struct * fd,
+                                  struct adios_var_struct *var,
+                                  int use_shared_buffer,
+                                  int *wrote_to_shared_buffer);
+
+/*
+ * Computes the worse-case required group size for an entire group.
+ * Checks all variables in the group to find which transform types are used,
+ * and chooses the worst of the worst-case group sizes to return.
+ */
+uint64_t adios_transform_worst_case_transformed_group_size(uint64_t group_size, struct adios_file_struct *fd);
+
+//////////////////////////////////////////////////
+// Transform characteristic management functions
+//////////////////////////////////////////////////
+
+// Init
+int adios_transform_init_transform_var(struct adios_var_struct *var);
+
+// Serialize
+// Returns number of characteristic flags written, outputs write_length, writes to buffer
+uint8_t adios_transform_serialize_transform_characteristic(const struct adios_index_characteristic_transform_struct *transform, uint64_t *write_length,
+                                                           char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset);
+uint8_t adios_transform_serialize_transform_var(const struct adios_var_struct *var, uint64_t *write_length,
+                                                char **buffer, uint64_t *buffer_size, uint64_t *buffer_offset);
+
+// Clear
+int adios_transform_clear_transform_var(struct adios_var_struct *var);
+
+// Copy
+int adios_transform_copy_transform_characteristic(struct adios_index_characteristic_transform_struct *dst_transform, const struct adios_var_struct *src_var);
+int adios_transform_copy_var_transform(struct adios_var_struct *dst_var, const struct adios_var_struct *src_var);
+
+// Calculate overhead
+uint64_t adios_transform_calc_transform_characteristic_overhead(struct adios_var_struct *var);
+
+#endif /* ADIOS_TRANSFORMS_WRITE_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_infos.h b/src/core/transforms/plugindetect/detect_plugin_infos.h
new file mode 100644
index 0000000..f8ede5f
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_infos.h
@@ -0,0 +1,74 @@
+/*
+ * detect_plugin_infos.h
+ *
+ * Builds the plugin info and XML alias tables.
+ * These tables default to being called "ADIOS_TRANSFORM_METHOD_INFOS" and
+ * "ADIOS_TRANSFORM_METHOD_ALIASES", respectively; this can be changed by
+ * defining these names as macros before #include'ing this file.
+ *
+ * This code is rather ugly, but it's necessary to enable the type of easy
+ * plugin registration that is achieved without resorting to Autotools
+ * magic, which looks even worse.
+ *
+ *  Created on: Feb 15, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_INFOS_H_
+#define DETECT_PLUGIN_INFOS_H_
+
+#include "core/transforms/adios_transforms_hooks.h"
+#include "core/transforms/plugindetect/plugin_info_types.h"
+
+//
+// Helper macros
+//
+
+// Define some helper macros that define the record format for the
+// info and aliases tables
+#define _PLUGIN_INFO_RECORD(TYPEID, UID, DESC) \
+    { adios_transform_##TYPEID, UID, DESC },
+
+#define _ARRAYLEN(arr) (sizeof(arr)/sizeof(arr[0]))
+#define _PLUGIN_ALIASES_RECORD(TYPEID, XMLALIAS) \
+    { adios_transform_##TYPEID, 1, (const char *[]){ XMLALIAS } },
+
+//
+// Actual table building
+//
+
+// Build the info table
+
+// Define the registration macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+        _PLUGIN_INFO_RECORD(TYPEID, UID, DESC)
+
+adios_transform_plugin_info_t ADIOS_TRANSFORM_METHOD_INFOS[] = {
+    { adios_transform_none, "none", "No data transform"},
+
+    #include "transforms/transform_plugins.h" // Include rows based on the plugin register statements
+};
+
+// Undef the registration macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+// Build the XML alias table
+
+// Define the registration macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+        _PLUGIN_ALIASES_RECORD(TYPEID, XMLALIAS)
+
+adios_transform_plugin_xml_aliases_t ADIOS_TRANSFORM_METHOD_ALIASES[] = {
+    REGISTER_TRANSFORM_PLUGIN(none, "none", "none", "none")
+    #include "transforms/transform_plugins.h" // Include rows based on the plugin register statements
+};
+
+// Undef the registration macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+// Clean up macros
+#undef _PLUGIN_INFO_RECORD
+#undef _PLUGIN_ALIASES_RECORD
+#undef _ARRAYLEN
+
+#endif /* DETECT_PLUGIN_INFOS_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_read_hook_decls.h b/src/core/transforms/plugindetect/detect_plugin_read_hook_decls.h
new file mode 100644
index 0000000..c7dffa1
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_read_hook_decls.h
@@ -0,0 +1,29 @@
+/*
+ * detect_plugin_read_hooks.h
+ *
+ * Using the plugin registry, (src/transforms/transform_plugins.h), generates
+ * declarations of transform plugin read-side hooks.
+ *
+ *  Created on: Apr 1, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_READ_HOOK_DECLS_H_
+#define DETECT_PLUGIN_READ_HOOK_DECLS_H_
+
+// NOTE: Uses the DECLARE_TRANSFORM_READ_METHOD macro from this include
+// NOTE: Uses the DECLARE_TRANSFORM_READ_METHOD_UNIMPL macro from this include
+#include "src/core/transforms/adios_transforms_hooks_read.h"
+
+// SETUP - Set up detection macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+    DECLARE_TRANSFORM_READ_METHOD(TYPEID) // From adios_transforms_hooks_read.h
+
+// DETECT
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(none); // Declare a stub for the "none" method
+#include "transforms/transform_plugins.h"   // Translate plugin register entries into function declarations
+
+// CLEANUP - Clean up macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+#endif /* DETECT_PLUGIN_READ_HOOK_DECLS_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_read_hook_reg.h b/src/core/transforms/plugindetect/detect_plugin_read_hook_reg.h
new file mode 100644
index 0000000..62e0ab0
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_read_hook_reg.h
@@ -0,0 +1,32 @@
+/*
+ * detect_plugin_read_hooks.h
+ *
+ * Using the plugin registry, (src/transforms/transform_plugins.h), builds the
+ * table of transform plugin read-side hooks. This should be included
+ * inside a C file, as it defines a global table with memory.
+ *
+ *  Created on: Apr 1, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_READ_HOOKS_H_
+#define DETECT_PLUGIN_READ_HOOKS_H_
+
+// INPUT MACRO: Plugins will be registered in the table TRANSFORM_READ_METHODS
+
+// NOTE: Uses the adios_transform_read_method struct from this include
+// NOTE: Uses the REGISTER_TRANSFORM_READ_METHOD_HOOKS macro from this include
+#include "src/core/transforms/adios_transforms_hooks_read.h"
+
+// SETUP - Set up detection macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+    REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, TYPEID, adios_transform_##TYPEID) // From adios_transforms_hooks_read.h
+
+// DETECT
+REGISTER_TRANSFORM_READ_METHOD_HOOKS(TRANSFORM_READ_METHODS, none, adios_transform_none); // Stub for "none" method
+#include "transforms/transform_plugins.h"   // Translate plugin register entries into function declarations
+
+// CLEANUP - Clean up macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+#endif /* DETECT_PLUGIN_READ_HOOKS_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_types.h b/src/core/transforms/plugindetect/detect_plugin_types.h
new file mode 100644
index 0000000..59d7c1c
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_types.h
@@ -0,0 +1,32 @@
+/*
+ * detect_plugin_types.h
+ *
+ * Using the plugin registry, (src/transforms/transform_plugins.h), builds the
+ * ADIOS_TRANSFORM_TYPE enum, including the standard "unknown", "none", and
+ * "num_transform_types" entries.
+ *
+ *  Created on: Feb 15, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_TYPES_H_
+#define DETECT_PLUGIN_TYPES_H_
+
+// Set up detection macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+    adios_transform_##TYPEID,
+
+// Build the enum table
+enum ADIOS_TRANSFORM_TYPE {
+    adios_transform_unknown   = -1,
+    adios_transform_none      = 0,
+
+    #include "transforms/transform_plugins.h" // Translate plugin register entries into enum entries
+
+    num_adios_transform_types // Not counting unknown
+};
+
+// Clean up macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+#endif /* DETECT_PLUGIN_TYPES_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_write_hook_decls.h b/src/core/transforms/plugindetect/detect_plugin_write_hook_decls.h
new file mode 100644
index 0000000..246d26b
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_write_hook_decls.h
@@ -0,0 +1,29 @@
+/*
+ * detect_plugin_write_hooks.h
+ *
+ * Using the plugin registry, (src/transforms/transform_plugins.h), generates
+ * declarations of transform plugin write-side hooks.
+ *
+ *  Created on: Apr 1, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_WRITE_HOOK_DECLS_H_
+#define DETECT_PLUGIN_WRITE_HOOK_DECLS_H_
+
+// NOTE: Uses the DECLARE_TRANSFORM_WRITE_METHOD macro from this include
+// NOTE: Uses the DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL macro from this include
+#include "src/core/transforms/adios_transforms_hooks_write.h"
+
+// SETUP - Set up detection macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+    DECLARE_TRANSFORM_WRITE_METHOD(TYPEID) // From adios_transforms_hooks_write.h
+
+// DETECT
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(none); // Declare a stub for the "none" method
+#include "transforms/transform_plugins.h"   // Translate plugin register entries into function declarations
+
+// CLEANUP - Clean up macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+#endif /* DETECT_PLUGIN_WRITE_HOOK_DECLS_H_ */
diff --git a/src/core/transforms/plugindetect/detect_plugin_write_hook_reg.h b/src/core/transforms/plugindetect/detect_plugin_write_hook_reg.h
new file mode 100644
index 0000000..7d49597
--- /dev/null
+++ b/src/core/transforms/plugindetect/detect_plugin_write_hook_reg.h
@@ -0,0 +1,32 @@
+/*
+ * detect_plugin_write_hooks.h
+ *
+ * Using the plugin registry, (src/transforms/transform_plugins.h), builds the
+ * table of transform plugin write-side hooks. This should be included
+ * inside a C file, as it defines a global table with memory.
+ *
+ *  Created on: Apr 1, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef DETECT_PLUGIN_WRITE_HOOKS_H_
+#define DETECT_PLUGIN_WRITE_HOOKS_H_
+
+// INPUT MACRO: Plugins will be registered in the table TRANSFORM_WRITE_METHODS
+
+// NOTE: Uses the adios_transform_write_method struct from this include
+// NOTE: Uses the REGISTER_TRANSFORM_WRITE_METHOD_HOOKS macro from this include
+#include "src/core/transforms/adios_transforms_hooks_write.h"
+
+// SETUP - Set up detection macro
+#define REGISTER_TRANSFORM_PLUGIN(TYPEID, XMLALIAS, UID, DESC) \
+    REGISTER_TRANSFORM_WRITE_METHOD_HOOKS(TRANSFORM_WRITE_METHODS, TYPEID, adios_transform_##TYPEID) // From adios_transforms_hooks_write.h
+
+// DETECT
+REGISTER_TRANSFORM_WRITE_METHOD_HOOKS(TRANSFORM_WRITE_METHODS, none, adios_transform_none); // Stub for "none" method
+#include "transforms/transform_plugins.h"   // Translate plugin register entries into function declarations
+
+// CLEANUP - Clean up macro
+#undef REGISTER_TRANSFORM_PLUGIN
+
+#endif /* DETECT_PLUGIN_WRITE_HOOKS_H_ */
diff --git a/src/core/transforms/plugindetect/plugin_info_types.h b/src/core/transforms/plugindetect/plugin_info_types.h
new file mode 100644
index 0000000..13b24ba
--- /dev/null
+++ b/src/core/transforms/plugindetect/plugin_info_types.h
@@ -0,0 +1,24 @@
+/*
+ * plugin_info_types.h
+ *
+ *  Created on: Feb 15, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef PLUGIN_INFO_TYPES_H_
+#define PLUGIN_INFO_TYPES_H_
+
+typedef struct {
+    enum ADIOS_TRANSFORM_TYPE type;
+    const char *uid;
+    const char *description;
+} adios_transform_plugin_info_t;
+
+typedef struct {
+    enum ADIOS_TRANSFORM_TYPE type;
+
+    int xmlAliasCount;
+    const char **xmlAliases;
+} adios_transform_plugin_xml_aliases_t;
+
+#endif /* PLUGIN_INFO_TYPES_H_ */
diff --git a/src/core/util.c b/src/core/util.c
index db0f36c..de41f9a 100644
--- a/src/core/util.c
+++ b/src/core/util.c
@@ -255,8 +255,14 @@ void list_insert_read_request_next (read_request ** h, read_request * q)
     }
     else
     {
-        q->next = head->next;
-        head->next = q;
+        // NCSU ALACRITY-ADIOS: Fixed this prepend ordering bug. Previously, prepending A, B, C, D would produce
+        //   [A, D, C, B], which causes poor seek performance for the Transforms layer versus raw Transport layer
+        //   due to backwards seeks. The fixed code now properly produces [D, C, B, A]
+
+        //q->next = head->next;
+        //head->next = q;
+        q->next = head;
+        *h = q;
     }
 
     return;
@@ -345,6 +351,11 @@ ADIOS_SELECTION * copy_selection (const ADIOS_SELECTION * sel)
     else if (sel->type == ADIOS_SELECTION_WRITEBLOCK)
     {
         nsel->u.block.index = sel->u.block.index;
+        // NCSU ALACRITY-ADIOS: Copy the new fields
+        nsel->u.block.is_absolute_index = sel->u.block.is_absolute_index;
+        nsel->u.block.is_sub_pg_selection = sel->u.block.is_sub_pg_selection;
+        nsel->u.block.element_offset = sel->u.block.element_offset;
+        nsel->u.block.nelements = sel->u.block.nelements;
     }
     else if (sel->type == ADIOS_SELECTION_AUTO)
     {
@@ -555,3 +566,9 @@ double adios_gettime()
         return  ((double)adios_timer_tp.tv_sec + ((double)adios_timer_tp.tv_usec)/1000000.0);
 }
 
+void * bufdup(const void *buf, uint64_t elem_size, uint64_t count) {
+    const uint64_t len = elem_size * count;
+    void *newbuf = malloc(len);
+    memcpy(newbuf, buf, len);
+    return newbuf;
+}
diff --git a/src/core/util.h b/src/core/util.h
index 4724312..148d523 100644
--- a/src/core/util.h
+++ b/src/core/util.h
@@ -77,4 +77,6 @@ void adios_nanosleep (int sec, int nanosec);
 /* get current time as double (in seconds) */
 double adios_gettime();
 
+void * bufdup(const void *buf, uint64_t elem_size, uint64_t count);
+
 #endif
diff --git a/src/nssi/adios_nssi_config.c b/src/nssi/adios_nssi_config.c
index 815e4cb..a53c6b4 100644
--- a/src/nssi/adios_nssi_config.c
+++ b/src/nssi/adios_nssi_config.c
@@ -111,7 +111,7 @@ static int parseGroup(mxml_node_t * node, struct adios_nssi_config *config)
             config->nssi_server_ids[service_num].port = (nssi_pid)atoi(port);
 
 //            log_debug(netcdf_config_debug_level, "service (nid=%lld, pid=%llu, hostname=%s, addr=%d, port=%d)",
-//            		(long long)id->nid, (long long)id->pid, id->hostname, id->addr, id->port);
+//                    (long long)id->nid, (long long)id->pid, id->hostname, id->addr, id->port);
 
 //            printf("staging-service: service_num(%d) nid(%lld) pid(%llu) hostname(%s) port(%d)\n",
 //                    service_num,
diff --git a/src/nssi/adios_nssi_filter.c b/src/nssi/adios_nssi_filter.c
index fd15e71..05601f2 100644
--- a/src/nssi/adios_nssi_filter.c
+++ b/src/nssi/adios_nssi_filter.c
@@ -655,19 +655,19 @@ static void parse_dimension_name(
         if (!var_linked) {
             attr_linked = adios_find_attribute_by_id (patt_root, dim->id);
             if (!attr_linked->var) {
-//				strcpy(dimname, attr_linked->name);
+//                strcpy(dimname, attr_linked->name);
                 sprintf(dimname, "%s", attr_linked->name);
             } else {
                 var_linked = attr_linked->var;
             }
         }
         if (var_linked && var_linked->name) {
-//			strcpy(dimname, var_linked->name);
+//            strcpy(dimname, var_linked->name);
             sprintf(dimname, "%s", var_linked->name);
         }
     } else {
         if (dim->time_index == adios_flag_yes) {
-//			strcpy(dimname, group->time_index_name);
+//            strcpy(dimname, group->time_index_name);
             sprintf(dimname, "%s", group->time_index_name);
         } else {
             dimname[0] = '\0';
diff --git a/src/public/adios.h b/src/public/adios.h
index e7abfab..cfd68c1 100644
--- a/src/public/adios.h
+++ b/src/public/adios.h
@@ -19,6 +19,14 @@
 extern "C" {
 #endif
 
+/* Most functions return 0 if OK, and !=0 on error 
+   which is the value of the variable 'adios_errno'.
+   On error, one can use char * adios_get_last_errmsg() from adios_error.h
+   to retrieve the error string of the last error. 
+
+   exceptions: int64_t adios_define_var() returns a variable ID, 0 indicates an error
+*/
+
 // Global setup using the XML file
 // Only processes of the provided communicator can later participate
 // in any adios activity
@@ -54,8 +62,13 @@ int adios_read (int64_t fd_p,
                 uint64_t buffer_size
                );
 
+// OBSOLETE, kept only for backward compatibility of old codes
+// Inconsistent behavior with new ADIOS variable naming
 int adios_set_path (int64_t fd_p, const char * path);
-
+// OBSOLETE, kept only for backward compatibility of old codes
+// name should be the full path of the variable (as it was defined)
+// in adios_write(), still the OLD full path should be used otherwise
+// the variable is not found in the hash table
 int adios_set_path_var (int64_t fd_p, const char * path, const char * name);
 
 int adios_end_iteration (void);
@@ -93,6 +106,8 @@ int adios_select_method (int64_t group,
                         );
 
 // To define a ADIOS variable
+// Returns a variable ID, which can be used in adios_write_byid()
+// 0 return value indicates an error
 int64_t adios_define_var (int64_t group_id, 
                           const char * name,
                           const char * path,
diff --git a/src/public/adios_error.h b/src/public/adios_error.h
index e8bc761..be7f65d 100644
--- a/src/public/adios_error.h
+++ b/src/public/adios_error.h
@@ -91,8 +91,56 @@ enum ADIOS_ERRCODES {
     //invalid argument to function
     err_invalid_argument                = -140,
 
+    // Mesh reading errors
+    err_no_matching_mesh_var                  = -147, // no mesh is associated to var
+    err_mesh_missing                          = -148, // mesh is missing in meshlist
+    err_mesh_name_attr_missing                = -149, // mesh attr is missing
+    err_mesh_unstructured_invaid_points       = -150, // points were invalid
+    err_mesh_unstructured_invaid_num_points   = -151, // number of points is invalid
+    err_mesh_unstructured_invaid_dim_points   = -152, // dim of points is invalid
+    err_mesh_unstructured_missing_one_points  = -153, // one of the points is not defined
+    err_mesh_unstructured_missing_points      = -154, // points are not defined
+    err_mesh_unstructured_missing_ncsets      = -155, // ncsets was not defined 
+    err_mesh_unstructured_invalid_ncsets      = -156, // could not read the ncsets value
+    err_mesh_unstructured_missing_ccount      = -157, // ccount was not defined
+    err_mesh_unstructured_invalid_ccount      = -158, // could not read the ccount value
+    err_mesh_unstructured_invalid_ctypes      = -159, // # of cell types invalid
+    err_mesh_unstructured_missing_cdata       = -160, // cdata was not defined
+    err_mesh_unstructured_invalid_cdata       = -161, // could not read the cdata value 
+    err_mesh_unstructured_missing_ctype       = -162, // ctype was not defined
+    err_mesh_unstructured_invalid_ctype       = -163, // coule not read ctype value
+    err_mesh_unstructured_centering_missing   = -164, // var centering of mesh is missing
+    err_mesh_unstructured_centering_invalid   = -165, // var centering of mesh is invalid
 
-    err_unspecified                     = -200
+    err_mesh_unifrom_invalid_num_dims         = -170, // # dimensions was invalid
+    err_mesh_unifrom_invalid_num_max          = -171, // # of maximums was less than ndims
+    err_mesh_unifrom_missing_maximum          = -172, // maximums was not defined
+    err_mesh_unifrom_invalid_var_type         = -173, // var type is not supported for processing
+    err_mesh_unifrom_missing_one_dim          = -174, // one of the dimensions is not defined 
+    err_mesh_unifrom_invalid_dim              = -175, // could not read the dim value
+    err_mesh_unifrom_missing_dims             = -176, // dimensions are not defined 
+    err_mesh_unifrom_max_conflict             = -177, // maximum is not consistant
+
+    err_mesh_recti_invalid_num_dims           = -180, // # dimensions was invalid
+    err_mesh_recti_missing_dims               = -181, // dimensions are not defined
+    err_mesh_recti_missing_one_dim            = -182, // one of the dimensions is not defined
+    err_mesh_recti_invalid_dim                = -183, // could not read the dim value
+    err_mesh_recti_invalid_coords             = -184, // coordinates were invalid
+    err_mesh_recti_invalid_num_coords         = -185, // # coordinates was invalid
+    err_mesh_recti_missing_one_coords         = -186, // one of the coordinates is not defined
+    err_mesh_recti_missing_coords             = -187, // coordinates are not defined
+
+    err_mesh_structured_invalid_num_dims      = -190, // # dimensions was invalid
+    err_mesh_structured_missing_dims          = -191, // dimensions are not defined
+    err_mesh_structured_missing_one_dim       = -192, // one of the dimensions is not defined
+    err_mesh_structured_invalid_dim           = -193, // could not read the dim value
+    err_mesh_structured_invaid_dim_points     = -194, // # of points were invalid
+    err_mesh_structured_invaid_points         = -195, // points were invalid
+    err_mesh_structured_missing_one_points    = -196, // one of the points is not defined
+    err_mesh_structured_missing_points        = -197, // points are not defined
+    err_mesh_structured_invalid_num_points    = -198, // number of points is invalid
+
+    err_unspecified                           = -200
 };
 
 void adios_error (enum ADIOS_ERRCODES errcode, char *fmt, ...);
diff --git a/src/public/adios_read_v1.h b/src/public/adios_read_v1.h
index f5eff4a..af561de 100644
--- a/src/public/adios_read_v1.h
+++ b/src/public/adios_read_v1.h
@@ -73,7 +73,7 @@ typedef struct {
         void     ** maxs;           /* maximum per each timestep (array of timestep elements)         */
         double   ** avgs;           /* average per each timestep (array of timestep elements)         */
         double   ** std_devs;       /* standard deviation per each timestep (array of timestep elements)         */
-        struct ADIOS_HIST			/* Histogram */
+        struct ADIOS_HIST           /* Histogram */
         {
             uint32_t num_breaks;
             double max;
diff --git a/src/public/adios_read_v2.h b/src/public/adios_read_v2.h
index a7700e8..9093a2a 100644
--- a/src/public/adios_read_v2.h
+++ b/src/public/adios_read_v2.h
@@ -18,9 +18,10 @@ extern "C" {
 #include "adios_mpi.h"
 #include "adios_types.h"
 #include "adios_selection.h"
-
+#include "adios_schema.h"
 #include <stdint.h>
 
+
 /*************************/
 /* Types used in the API */
 /*************************/
@@ -31,6 +32,8 @@ typedef struct {
         char     ** var_namelist;   /* Variable names in a char* array                                */
         int      nattrs;            /* Number of attributes in all groups                             */
         char     ** attr_namelist;  /* Attribute names in a char* array                               */
+        int      nmeshes;            /* Number of attributes in all groups                            */
+        char     ** mesh_namelist;  /* Attribute names in a char* array                               */
 
         /* Stream step information */
         int      current_step;      /* The current step in a stream. For a file, it is always 0.      */
@@ -87,6 +90,16 @@ typedef struct {
     uint64_t * count;      /* local sizes in global array ('ndim' elements)                */
 } ADIOS_VARBLOCK;
 
+enum var_centering
+{
+    point = 1,            // unstructured mesh point centering
+    cell = 2              // unstructured mesh cell centering
+};
+
+typedef struct {
+    int meshid;
+    enum var_centering centering;
+} ADIOS_VARMESH;
 
 typedef struct {
         int        varid;           /* variable index (0..ADIOS_FILE.nvars-1)                         */
@@ -109,12 +122,17 @@ typedef struct {
         ADIOS_VARBLOCK *blockinfo;  /* Spatial arrangement of written blocks, 
                                        retrieved in separate call: adios_inq_var_blockinfo()       
                                        It is an array of 'sum_nblocks' elements                       */
+        ADIOS_VARMESH *meshinfo;    /* structure in this file,
+                                       retrieved in separate call: adios_inq_var_meshinfo()          */ 
 } ADIOS_VARINFO;
 
 
 typedef struct {
         int                   varid;    /* variable index (0..ADIOS_FILE.nvars-1)              */
         enum ADIOS_DATATYPES  type;     /* type of variable                                    */
+        // NCSU ALACRITY-ADIOS - Added timestep information into varchunks
+        int                   from_steps; /* the first timestep in the returned data             */
+        int                   nsteps;     /* the number of timesteps in the returned data        */
         ADIOS_SELECTION     * sel;      /* sub-selection of requested selection                */
         void                * data;     /* pointer to data, at next adios_read_check() memory 
                                            will likely be overwritten                          */
@@ -167,7 +185,7 @@ const char *adios_errmsg();
  *                  List of parameters is documented for each method 
  *                  separately. 
  *                  
- *  RETURN:       0 if accepted, <0 on error
+ *  RETURN:       0 if accepted, !=0 on error (adios_errno value)
  *  Initialization is required for the staging methods, where init/finalize 
  *  perform the connection/disconnection to the staging server once.
  *  The ADIOS_READ_METHOD_BP does not need to be initialized/finalized.
@@ -252,7 +270,7 @@ ADIOS_FILE * adios_read_open_file (const char * fname,
 /** Close an adios file.
  *  It will free the content of the underlying data structures and the fp pointer itself.
  *  IN:   fp       pointer to an ADIOS_FILE struct
- *  RETURN: 0 OK, !=0 on error (also sets adios_errno)
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  */
 int adios_read_close (ADIOS_FILE *fp);
 
@@ -272,7 +290,7 @@ int adios_read_close (ADIOS_FILE *fp);
  *                            for max 'timeout_sec' seconds.
  *                            0.0 means return immediately if step is not available
  *                 <0.0: block forever if necessary
- *  RETURN: 0 OK, !=0 on error (also sets adios_errno)
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  *      
  *  Possible errors (adios_errno values):
  *       err_end_of_stream    Stream has ended, no more steps should be expected
@@ -312,13 +330,13 @@ void adios_release_step (ADIOS_FILE *fp);
  *       varname  name of the variable
  *  RETURN:       pointer to and ADIOS_VARINFO struct, NULL on error (sets adios_errno)
  */
-ADIOS_VARINFO * adios_inq_var (ADIOS_FILE *fp, const char * varname);
+ADIOS_VARINFO * adios_inq_var (ADIOS_FILE *fp, const char * varname);  
 
 /** Inquiry a variable by index
  *       varid    index of variable (0..fp->nvars-1)
  *                in fp->vars_namelist of ADIOS_FILE struct
  */
-ADIOS_VARINFO * adios_inq_var_byid (ADIOS_FILE *fp, int varid);
+ADIOS_VARINFO * adios_inq_var_byid (ADIOS_FILE *fp, int varid);   
 
 /** Free memory used by an ADIOS_VARINFO struct */
 void adios_free_varinfo (ADIOS_VARINFO *cp);
@@ -334,7 +352,7 @@ void adios_free_varinfo (ADIOS_VARINFO *cp);
  *       varinfo        result of adios_inq_var() 
  *       per_step_stat  !=0: return statistics also per step
  *       per_block_stat !=0: return statistics also per writer block 
- *  RETURN: 0 OK, !=0 on error (also sets adios_errno)
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  */
 int adios_inq_var_stat (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
                         int per_step_stat, int per_block_stat);
@@ -349,10 +367,27 @@ int adios_inq_var_stat (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo,
  *
  *  IN:  fp       pointer to an (opened) ADIOS_FILE struct
  *       varinfo  result of adios_inq_var() 
- *  RETURN: 0 OK, !=0 on error (also sets adios_errno)
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  */
 int adios_inq_var_blockinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
 
+/** Inquiry a mesh by index
+*       meshid   index of mesh (0..fp->nmeshes-1)
+*                in fp->mesh_namelist of ADIOS_FILE struct
+*/
+ADIOS_MESH * adios_inq_mesh_byid (ADIOS_FILE *fp, int meshid);
+
+/** Free memory used by an ADIOS_MESH struct */
+void adios_free_meshinfo (ADIOS_MESH *meshinfo);
+
+/** Get the mesh information of the variable about how it is stored in
+ * ADIOS_MESH structure
+ * IN:  fp       pointer to an (opened) ADIOS_FILE struct
+ *      varinfo  result of adios_inq_var() 
+ * RETURN: 0 OK, !=0 on error
+ */
+int adios_inq_var_meshinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
+
 /** Schedule reading a variable (slice) from the file.
  *  You need to call adios_perform_reads() to do the reading of
  *  variables.
@@ -375,7 +410,7 @@ int adios_inq_var_blockinfo (ADIOS_FILE *fp, ADIOS_VARINFO * varinfo);
  *                  already available of a variable (in ADIOS own memory)
  *                  and the application has to rearrange the data. The user
  *                  has to process/copy the data before getting new chunks.
- *  RETURN: 0 OK, !=0 on error, sets adios_errno too
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  */
 int adios_schedule_read (const ADIOS_FILE * fp,
                          const ADIOS_SELECTION * sel,
@@ -395,6 +430,23 @@ int adios_schedule_read_byid (const ADIOS_FILE * fp,
                               int                     nsteps,
                               void                  * data);
 
+// NCSU ALACRITY-ADIOS: Support for those transforms that can change reading behavior (e.g., level-of-detail)
+int adios_schedule_read_param (const ADIOS_FILE * fp,
+                               const ADIOS_SELECTION * sel,
+                               const char            * varname,
+                               int                     from_steps,
+                               int                     nsteps,
+                               const char            * param,
+                               void                  * data);
+
+int adios_schedule_read_byid_param (const ADIOS_FILE * fp,
+                                    const ADIOS_SELECTION * sel,
+                                    int                     varid,
+                                    int                     from_steps,
+                                    int                     nsteps,
+                                    const char            * param,
+                                    void                  * data);
+
 
 /** Let ADIOS perform the scheduled reads 
  *  IN:  blocking  If non-zero, return only when all reads are completed.
@@ -417,7 +469,7 @@ int adios_perform_reads (const ADIOS_FILE *fp, int blocking);
  *  RETURN:         0: all chunks have been returned previously, 
  *                     no need to call again (chunk is NULL, too)
  *                  1: some chunks are/will be available, call again
- *                  <0 on error, sets adios_errno too
+ *                  <0 on error (adios_errno value)
  */
 int adios_check_reads (const ADIOS_FILE  * fp, 
                        ADIOS_VARCHUNK   ** chunk);
@@ -441,7 +493,7 @@ void adios_free_chunk (ADIOS_VARCHUNK *chunk);
  *  OUT: type     adios type of attribute (see enum ADIOS_DATATYPES in adios_types.h)
  *       size     memory size of value (n+1 for a string of n characters)
  *       data     pointer to the value. You need to cast it afterward according to the type.
- *  RETURN: 0 OK, error: set and return adios_errno
+ *  RETURN: 0 OK, !=0 on error (adios_errno value)
  */
 int adios_get_attr (ADIOS_FILE            * fp,
                     const char            * attrname,
@@ -478,8 +530,7 @@ int adios_type_size(enum ADIOS_DATATYPES type, void *data);
  *  IN:   fp              pointer to an (opened) ADIOS_FILE struct
  *  OUT:  group_namelist  list of strings,
  *                        Note: one should pass a pointer to char** list
- *  RETURN:               number of groups, <0 on error 
- *                        (sets adios_errno too)
+ *  RETURN:               number of groups, <0 on error (adios_errno value)
  *  
  */
 int adios_get_grouplist (ADIOS_FILE  *fp, char ***group_namelist);
@@ -494,8 +545,7 @@ int adios_get_grouplist (ADIOS_FILE  *fp, char ***group_namelist);
  *  IN/OUT:   fp         pointer to an (opened) ADIOS_FILE struct
  *                       nvars, var_namelist, nattrs, and
  *                       attr_namelist will be modified.
- *  RETURN:              0 on success, adios_errno otherwise
- *                        (sets adios_errno too)
+ *  RETURN:   0 OK, !=0 on error (adios_errno value)
  *  Note: a stream does not have groups. Only a file can have
  *  multiple groups (from separate adios_open/adios_close operations)
  */
diff --git a/src/public/adios_schema.h b/src/public/adios_schema.h
new file mode 100644
index 0000000..17f6891
--- /dev/null
+++ b/src/public/adios_schema.h
@@ -0,0 +1,78 @@
+#ifndef ADIOS_SCHEMA_H
+#define ADIOS_SCHEMA_H
+
+enum ADIOS_MESH_TYPE
+{
+     ADIOS_MESH_UNIFORM      = 1
+    ,ADIOS_MESH_STRUCTURED   = 2
+    ,ADIOS_MESH_RECTILINEAR  = 3
+    ,ADIOS_MESH_UNSTRUCTURED = 4
+};
+
+typedef struct
+{
+    int num_dimensions;
+    uint64_t * dimensions;
+    double * origins;
+    double * spacings;
+    double * maximums;
+} MESH_UNIFORM;
+
+typedef struct
+{
+    int use_single_var;        // 1 means coordinates-single-var,0 means coordinates-multi-var
+    int num_dimensions;
+    uint64_t * dimensions;
+    char ** coordinates;       // name of the variable(s) containing the rectilinear spacing values
+} MESH_RECTILINEAR;
+
+typedef struct
+{
+    int use_single_var;        // 1 means points-single-var, 0 mean points-multi-var
+    int num_dimensions;
+    uint64_t * dimensions;
+    int nspaces;
+    char ** points;            // name of the variable(s) containing the point coordinates 
+} MESH_STRUCTURED;
+
+// ADIOS Schema: supported cell types
+enum ADIOS_CELL_TYPE
+{
+     ADIOS_CELL_PT         = 1
+    ,ADIOS_CELL_LINE       = 2
+    ,ADIOS_CELL_TRI        = 3
+    ,ADIOS_CELL_QUAD       = 4
+    ,ADIOS_CELL_HEX        = 5
+    ,ADIOS_CELL_PRI        = 6
+    ,ADIOS_CELL_TET        = 7
+    ,ADIOS_CELL_PYR        = 8
+};
+
+typedef struct
+{
+    int nspaces;
+    uint64_t npoints;
+    int nvar_points;           // how much vars for points-multi-var, 1 for points-single-var
+    char ** points;
+    int ncsets;
+    uint64_t * ccounts;
+    char ** cdata;
+    enum ADIOS_CELL_TYPE * ctypes;
+} MESH_UNSTRUCTURED;
+
+
+typedef struct {   //type returned by adios_inq_mesh for read method
+    int id;
+    char * name;
+    int time_varying;           //0 means not time-varying, 1 means time-varying
+    enum ADIOS_MESH_TYPE type;
+    union
+    {
+        MESH_UNIFORM * uniform;
+        MESH_RECTILINEAR * rectilinear;
+        MESH_STRUCTURED * structured;
+        MESH_UNSTRUCTURED * unstructured;
+    };
+} ADIOS_MESH;
+
+#endif
diff --git a/src/public/adios_selection.h b/src/public/adios_selection.h
index 880206c..9564f68 100644
--- a/src/public/adios_selection.h
+++ b/src/public/adios_selection.h
@@ -69,6 +69,19 @@ typedef struct {
  */
 typedef struct { 
     int index;
+
+    // NCSU ALACRITY-ADIOS:
+    //     Adding timestep-relative vs. absolute writeblock selections, as
+    //     well as sub-PG selection support. Both of these are currently only
+    //     used by the transform layer
+    int is_absolute_index;   // 0 if 'index' is relative to the current timestep, != 0
+                             // otherwie (i.e., absolute index)
+    int is_sub_pg_selection; // Whether this writeblock selection contains sub-PG bounds.
+                             // The following fields only matter if this is != 0
+
+    // Reads the linear range of elements in [element_offset, element_offset + nelements)
+    uint64_t element_offset;
+    uint64_t nelements;
 } ADIOS_SELECTION_WRITEBLOCK_STRUCT;
 
 /* Let the read method decide what to return to each reading client. 
diff --git a/src/public/adios_types.h b/src/public/adios_types.h
index c60e4ad..d5864de 100644
--- a/src/public/adios_types.h
+++ b/src/public/adios_types.h
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
diff --git a/src/read/read_bp.c b/src/read/read_bp.c
index bd669ae..e9cc54f 100644
--- a/src/read/read_bp.c
+++ b/src/read/read_bp.c
@@ -1,4 +1,4 @@
-/* 
+/*
  * ADIOS is freely available under the terms of the BSD license described
  * in the COPYING file in the top level directory of this source distribution.
  *
@@ -26,6 +26,8 @@
 #include "core/common_read.h"
 #include "core/adios_logger.h"
 
+#include "core/transforms/adios_transforms_transinfo.h"
+
 #ifdef DMALLOC
 #include "dmalloc.h"
 #endif
@@ -41,7 +43,7 @@ static int adios_step_to_time (const ADIOS_FILE * fp, int varid, int from_steps)
 static int map_req_varid (const ADIOS_FILE * fp, int varid);
 static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r);
 
-// NCSU - For custom memory allocation 
+// NCSU - For custom memory allocation
 #define CALLOC(var, num, sz, comment)\
 {\
     var = calloc (num, sz); \
@@ -159,12 +161,87 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r);
         fh->b->offset = 0;                                                                  \
         adios_parse_var_data_header_v1 (fh->b, &var_header);                                \
 
+// NCSU ALACRITY-ADIOS: After much pain and consideration, I've decided to implement a
+//     2nd version of this function to avoid substantial wasted time in the writeblock method
+#define MPI_FILE_READ_OPS1_BUF(buf)                 \
+        MPI_File_seek (fh->mpi_fh                   \
+                      ,(MPI_Offset)slice_offset     \
+                      ,MPI_SEEK_SET                 \
+                      );                            \
+                                                    \
+        MPI_File_read (fh->mpi_fh                   \
+                      ,(buf)                        \
+                      ,slice_size                   \
+                      ,MPI_BYTE                     \
+                      ,&status                      \
+                      );
+
+// To read subfiles
+#define MPI_FILE_READ_OPS2_BUF(buf)                                                         \
+        MPI_File * sfh;                                                                     \
+        sfh = get_BP_file_handle (fh->sfh                                                   \
+                                 ,v->characteristics[start_idx + idx].file_index            \
+                                 );                                                         \
+        if (!sfh)                                                                           \
+        {                                                                                   \
+            int err;                                                                        \
+            char * ch, * name_no_path, * name;                                              \
+            MPI_Info info = MPI_INFO_NULL;                                                  \
+            struct BP_file_handle * new_h =                                                 \
+                  (struct BP_file_handle *) malloc (sizeof (struct BP_file_handle));        \
+            new_h->file_index = v->characteristics[start_idx + idx].file_index;             \
+            new_h->next = 0;                                                                \
+            if (ch = strrchr (fh->fname, '/'))                                              \
+            {                                                                               \
+                name_no_path = (char *) malloc (strlen (ch + 1) + 1);                       \
+                strcpy (name_no_path, ch + 1);                                              \
+            }                                                                               \
+            else                                                                            \
+            {                                                                               \
+                name_no_path = (char *) malloc (strlen (fh->fname) + 1);                    \
+                strcpy (name_no_path, fh->fname);                                           \
+            }                                                                               \
+                                                                                            \
+            name = (char *) malloc (strlen (fh->fname) + 5 + strlen (name_no_path) + 1 + 10 + 1); \
+            sprintf (name, "%s.dir/%s.%d", fh->fname, name_no_path, new_h->file_index);     \
+            err = MPI_File_open (MPI_COMM_SELF                                                   \
+                                ,name                                                       \
+                                ,MPI_MODE_RDONLY                                            \
+                                ,info                                                       \
+                                ,&new_h->fh                                                 \
+                                );                                                          \
+                                                                                            \
+           if (err)                                                                         \
+           {                                                                                \
+               fprintf (stderr, "can not open file %s\n", name);                            \
+               return 0;                                                                    \
+           }                                                                                \
+           add_BP_file_handle (&fh->sfh                                                     \
+                              ,new_h                                                        \
+                              );                                                            \
+           sfh = &new_h->fh;                                                                \
+                                                                                            \
+           free (name_no_path);                                                             \
+           free (name);                                                                     \
+        }                                                                                   \
+                                                                                            \
+        MPI_File_seek (*sfh                                                                 \
+                      ,(MPI_Offset)slice_offset                                             \
+                      ,MPI_SEEK_SET                                                         \
+                      );                                                                    \
+        MPI_File_read (*sfh                                                                 \
+                      ,(buf)                                                                \
+                      ,slice_size                                                           \
+                      ,MPI_BYTE                                                             \
+                      ,&status                                                              \
+                      );
+
 
 /* This routine release one step. It only frees the var/attr namelist. */
 static void release_step (ADIOS_FILE *fp)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
-    
+
     if (p->varid_mapping)
     {
         free (p->varid_mapping);
@@ -225,6 +302,7 @@ static BP_FILE * open_file (const char * fname, MPI_Comm comm)
     fh->pgs_root = 0;
     fh->vars_root = 0;
     fh->attrs_root = 0;
+    fh->vars_table = 0;
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
 
@@ -254,7 +332,7 @@ void build_ADIOS_FILE_struct (ADIOS_FILE * fp, BP_FILE * fh)
 
     fp->fh = (uint64_t) p;
     fp->file_size = fh->mfooter.file_size;
-    fp->version = fh->mfooter.version;
+    fp->version = fh->mfooter.version & ADIOS_VERSION_NUM_MASK;
     fp->endianness = bp_get_endianness (fh->mfooter.change_endianness);
     fp->last_step = fh->tidx_stop - 1;
 
@@ -268,11 +346,12 @@ void build_ADIOS_FILE_struct (ADIOS_FILE * fp, BP_FILE * fh)
     return;
 }
 
-static int get_new_step (ADIOS_FILE * fp, const char * fname, MPI_Comm comm, int last_step, float timeout_sec)
+static int get_new_step (ADIOS_FILE * fp, const char * fname, MPI_Comm comm, int last_tidx, float timeout_sec)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) p->fh;
+    BP_FILE * new_fh;
     int err, i;
-    BP_FILE * fh;
     double t1 = adios_gettime();
 
     log_debug ("enter get_new_step\n");
@@ -288,26 +367,26 @@ static int get_new_step (ADIOS_FILE * fp, const char * fname, MPI_Comm comm, int
     while (stay_in_poll_loop)
     {
         /* Re-open the file */
-        fh = open_file (fname, comm);
-        if (!fh)
+        new_fh = open_file (fname, comm);
+        if (!new_fh)
         {
             // file is bad so keeps polling.
             stay_in_poll_loop = 1;
         }
-        else if (fh && (fh->tidx_stop - 1 == last_step))
+        else if (new_fh && new_fh->tidx_stop == last_tidx)
         {
             // file is good but no new steps in it. Continue polling.
-            bp_close (fh);
+            bp_close (new_fh);
             stay_in_poll_loop = 1;
         }
         else
         {
             // the file looks good and there are new steps written.
-            build_ADIOS_FILE_struct (fp, fh);
+            build_ADIOS_FILE_struct (fp, new_fh);
             stay_in_poll_loop = 0;
             found_stream = 1;
         }
-        // check if we need to stay in loop 
+        // check if we need to stay in loop
         if (stay_in_poll_loop)
         {
             if (timeout_sec == 0.0)
@@ -355,7 +434,7 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
     log_debug ("read_var()\n");
     sel = r->sel;
     p = (BP_PROC *) fp->fh;
-    fh = (BP_FILE *) p->fh; 
+    fh = (BP_FILE *) p->fh;
 
     v = bp_find_var_byid (fh, r->varid);
 
@@ -386,10 +465,10 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
             nsel->u.bb.start = (uint64_t *) malloc (nsel->u.bb.ndim * 8);
             nsel->u.bb.count = (uint64_t *) malloc (nsel->u.bb.ndim * 8);
             assert (nsel->u.bb.start && nsel->u.bb.count);
-            
+
             for (i = 0; i < nsel->u.bb.ndim; i++)
             {
-                nsel->u.bb.count[i] = 1; 
+                nsel->u.bb.count[i] = 1;
             }
 
             for (i = 0; i < sel->u.points.npoints; i++)
@@ -397,7 +476,7 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
                 memcpy (nsel->u.bb.start, sel->u.points.points + i * sel->u.points.ndim, sel->u.points.ndim * 8);
 
                 chunk = read_var_bb (fp, nr);
-                nr->data = (char *) nr->data + size_of_type;
+                nr->data = (char *) nr->data + size_of_type; // NCSU ALACRITY-ADIOS - Potential bug here; what if nsteps > 1? Shouldn't the buffer advance by size_of_type * nsteps?
 
                 common_read_free_chunk (chunk);
             }
@@ -410,6 +489,9 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE * fp, read_request * r)
 
             chunk->varid = r->varid;
             chunk->type = v->type;
+            // NCSU ALACRITY-ADIOS - Added timestep information into varchunks
+            chunk->from_steps = r->from_steps;
+            chunk->nsteps = r->nsteps;
             chunk->sel = copy_selection (r->sel);
             chunk->data = r->data;
 
@@ -467,8 +549,10 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
 
     /* Get dimensions and flip if caller != writer language */
     /* Note: ndim below doesn't include time if there is any */
+    // NCSU ALACRITY-ADIOS - Note: this function has been modified to return
+    //   the "raw" dimensions (i.e., 1D byte array)
     bp_get_and_swap_dimensions (fh, v, file_is_fortran, &ndim, &dims, &nsteps, file_is_fortran);
- 
+
     assert (ndim == sel->u.bb.ndim);
     ndim = sel->u.bb.ndim;
 
@@ -518,7 +602,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
     {
 
         if (!p->streaming)
-        { 
+        {
             time = get_time (v, t);
         }
         else
@@ -545,7 +629,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
         {
             /* READ A SCALAR VARIABLE */
             /* Prepare slice_offset, slice_size and idx for the later macro:
-               MPI_FILE_READ_OPS1 and MPI_FILE_READ_OPS2 
+               MPI_FILE_READ_OPS1 and MPI_FILE_READ_OPS2
             */
             idx = 0;
             slice_offset = v->characteristics[start_idx + idx].payload_offset;
@@ -597,7 +681,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
             /* READ AN ARRAY VARIABLE */
             int * idx_table = (int *) malloc (sizeof (int) * (stop_idx - start_idx + 1));
             uint64_t write_offset = 0;
-/* 
+/*
                 printf ("count   = "); for (j = 0; j<ndim; j++) printf ("%d ",count[j]); printf ("\n");
                 printf ("start   = "); for (j = 0; j<ndim; j++) printf ("%d ",start[j]); printf ("\n");
 */
@@ -610,7 +694,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                 dset_stride = 1;
                 idx_table[idx] = 1;
                 uint64_t payload_size = size_of_type;
-    
+
                 is_global = bp_get_dimension_characteristics_notime (&(v->characteristics[start_idx + idx]),
                                                                     ldims, gdims, offsets, file_is_fortran);
                 if (!is_global)
@@ -627,13 +711,13 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                 printf ("ldims   = "); for (j = 0; j<ndim; j++) printf ("%d ",ldims[j]); printf ("\n");
                 printf ("gdims   = "); for (j = 0; j<ndim; j++) printf ("%d ",gdims[j]); printf ("\n");
                 printf ("offsets = "); for (j = 0; j<ndim; j++) printf ("%d ",offsets[j]); printf ("\n");
-*/             
+*/
                 for (j = 0; j < ndim; j++)
                 {
                     payload_size *= ldims [j];
-    
-                    if ( (count[j] > gdims[j]) 
-                      || (start[j] > gdims[j]) 
+
+                    if ( (count[j] > gdims[j])
+                      || (start[j] > gdims[j])
                       || (start[j] + count[j] > gdims[j]))
                     {
                         adios_error ( err_out_of_bound, "Error: Variable (id=%d) out of bound 1("
@@ -642,13 +726,13 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                             r->varid, j + 1, count[j], start[j], gdims[j] - 1);
                         return 0;
                     }
-    
+
                     /* check if there is any data in this pg and this dimension to read in */
-                    flag = (offsets[j] >= start[j] 
+                    flag = (offsets[j] >= start[j]
                             && offsets[j] < start[j] + count[j])
                         || (offsets[j] < start[j]
-                            && offsets[j] + ldims[j] > start[j] + count[j]) 
-                        || (offsets[j] + ldims[j] > start[j] 
+                            && offsets[j] + ldims[j] > start[j] + count[j])
+                        || (offsets[j] + ldims[j] > start[j]
                             && offsets[j] + ldims[j] <= start[j] + count[j]);
                     idx_table [idx] = idx_table[idx] && flag;
                 }
@@ -657,9 +741,9 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                 {
                     continue;
                 }
-    
+
                 /* determined how many (fastest changing) dimensions can we read in in one read */
-                int hole_break; 
+                int hole_break;
                 for (i = ndim - 1; i > -1; i--)
                 {
                     if (offsets[i] == start[i] && ldims[i] == count[i])
@@ -669,7 +753,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                     else
                         break;
                 }
-    
+
                 hole_break = i;
                 slice_offset = 0;
                 slice_size = 0;
@@ -680,7 +764,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                     /* This means we enter this only once, and npg=1 at the end */
                     /* This is a rare case. FIXME: cannot eliminate this? */
                     slice_size = payload_size;
-    
+
                     slice_offset = v->characteristics[start_idx + idx].payload_offset;
                     if (v->characteristics[start_idx + idx].payload_offset > 0)
                     {
@@ -705,7 +789,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                         change_endianness (data, slice_size, v->type);
                     }
                 }
-                else if (hole_break == 0) 
+                else if (hole_break == 0)
                 {
                     /* The slowest changing dimensions should not be read completely but
                        we still need to read only one block */
@@ -713,7 +797,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                     uint64_t size_in_dset = 0;
                     uint64_t offset_in_dset = 0;
                     uint64_t offset_in_var = 0;
-    
+
                     isize = offsets[0] + ldims[0];
                     if (start[0] >= offsets[0])
                     {
@@ -739,13 +823,13 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                         offset_in_dset = 0;
                         offset_in_var = offsets[0] - start[0];
                     }
-    
+
                     slice_size = size_in_dset * datasize * size_of_type;
                     write_offset = offset_in_var * datasize * size_of_type;
- 
+
                     if (v->characteristics[start_idx + idx].payload_offset > 0)
                     {
-                        slice_offset = v->characteristics[start_idx + idx].payload_offset 
+                        slice_offset = v->characteristics[start_idx + idx].payload_offset
                                      + offset_in_dset * datasize * size_of_type;
                         if (!has_subfile)
                         {
@@ -761,16 +845,16 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                         slice_offset = 0;
                         MPI_FILE_READ_OPS3
                     }
-    
+
                     memcpy ((char *)data + write_offset, fh->b->buff + fh->b->offset, slice_size);
                     if (fh->mfooter.change_endianness == adios_flag_yes)
                     {
                         change_endianness((char *)data + write_offset, slice_size, v->type);
                     }
-    
+
                     //write_offset +=  slice_size;
                 }
-                else 
+                else
                 {
                     uint64_t stride_offset = 0;
                     int isize;
@@ -819,14 +903,14 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                     }
                     datasize = 1;
                     var_stride = 1;
-    
+
                     for (i = ndim - 1; i >= hole_break; i--)
                     {
                         datasize *= size_in_dset[i];
                         dset_stride *= ldims[i];
                         var_stride *= count[i];
                     }
-    
+
                     uint64_t start_in_payload = 0, end_in_payload = 0, s = 1;
                     for (i = ndim - 1; i > -1; i--)
                     {
@@ -834,7 +918,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                         end_in_payload += s * (offset_in_dset[i] + size_in_dset[i] - 1) * size_of_type;
                         s *= ldims[i];
                     }
-    
+
                     slice_size = end_in_payload - start_in_payload + 1 * size_of_type;
                     if (v->characteristics[start_idx + idx].payload_offset > 0)
                     {
@@ -854,7 +938,7 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                         slice_offset =  start_in_payload;
                         MPI_FILE_READ_OPS3
                     }
- 
+
                     for (i = 0; i < ndim; i++)
                     {
                         offset_in_dset[i] = 0;
@@ -862,13 +946,13 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
 
                     uint64_t var_offset = 0;
                     uint64_t dset_offset = 0;
-    
+
                     for (i = 0; i < ndim; i++)
                     {
                         var_offset = offset_in_var[i] + var_offset * count[i];
                         dset_offset = offset_in_dset[i] + dset_offset * ldims[i];
                     }
-    
+
                     copy_data (data
                               ,fh->b->buff + fh->b->offset
                               ,0
@@ -883,13 +967,13 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
                               ,datasize
                               ,size_of_type
                               ,fh->mfooter.change_endianness
-                              ,v->type 
+                              ,v->type
                               );
                 }
             }  // end for (idx ... loop over pgs
-    
+
             free (idx_table);
-    
+
             total_size += items_read * size_of_type;
             // shift target pointer for next read in
             data = (char *)data + (items_read * size_of_type);
@@ -910,6 +994,9 @@ static ADIOS_VARCHUNK * read_var_bb (const ADIOS_FILE *fp, read_request * r)
 
     chunk->varid = r->varid;
     chunk->type = v->type;
+    // NCSU ALACRITY-ADIOS - Added timestep information into varchunks
+    chunk->from_steps = r->from_steps;
+    chunk->nsteps = r->nsteps;
     chunk->sel = copy_selection (r->sel);
     chunk->data = r->data;
     return chunk;
@@ -931,7 +1018,7 @@ int adios_read_bp_init_method (MPI_Comm comm, PairStruct * params)
                 chunk_buffer_size = max_chunk_size * 1024 * 1024;
             }
             else
-            { 
+            {
                 log_error ("Invalid 'max_chunk_size' parameter given to the read method: '%s'\n", p->value);
             }
         }
@@ -974,7 +1061,7 @@ int adios_read_bp_finalize_method ()
     return 0;
 }
 
-static int open_stream (ADIOS_FILE * fp, const char * fname, 
+static int open_stream (ADIOS_FILE * fp, const char * fname,
                         MPI_Comm comm, float timeout_sec)
 {
     int i, rank, ret;
@@ -986,7 +1073,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
 
     MPI_Comm_rank (comm, &rank);
     // We need to first check if this is a valid ADIOS-BP file. This is done by
-    // check whether there is 'ADIOS-BP' string written before the 28-bytes minifooter. 
+    // check whether there is 'ADIOS-BP' string written before the 28-bytes minifooter.
     // If it is valid, we will proceed with bp_open(). The potential issue is that before
     // calling bp_open, the next step could start writing and the footer will be corrupted.
     // This needs to be fixed later. Q. Liu, 06/2012
@@ -1006,11 +1093,13 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
             if (!file_ok)
             {
                 // This stream does not exist yet
-                log_debug ("file %s found!\n", fname);
-            
+                log_debug ("file %s is not a valid file for streaming read."
+                           "One possible reason is it's a VERY old BP file,"
+                           "which doesn't allow reader to check its validity.\n", fname);
+
                 if (stay_in_poll_loop)
                 {
-                    // check if we need to stay in loop 
+                    // check if we need to stay in loop
                     if (timeout_sec == 0.0)  //return immediately, which means check file once
                     {
                         stay_in_poll_loop = 0;
@@ -1065,6 +1154,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
     fh->pgs_root = 0;
     fh->vars_root = 0;
     fh->attrs_root = 0;
+    fh->vars_table = 0;
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
 
@@ -1082,7 +1172,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
 
     fp->fh = (uint64_t) p;
     fp->file_size = fh->mfooter.file_size;
-    fp->version = fh->mfooter.version;
+    fp->version = fh->mfooter.version & ADIOS_VERSION_NUM_MASK;
     fp->path = strdup (fh->fname);
     fp->endianness = bp_get_endianness (fh->mfooter.change_endianness);
 
@@ -1091,7 +1181,7 @@ static int open_stream (ADIOS_FILE * fp, const char * fname,
 
     fp->current_step = 0;
     /* For file, the last step is tidx_stop */
-    fp->last_step = fh->tidx_stop - 1;
+    fp->last_step = fh->tidx_stop - fh->tidx_start;
 
     return 0;
 }
@@ -1136,6 +1226,7 @@ ADIOS_FILE * adios_read_bp_open_file (const char * fname, MPI_Comm comm)
     fh->pgs_root = 0;
     fh->vars_root = 0;
     fh->attrs_root = 0;
+    fh->vars_table = 0;
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
 
@@ -1177,14 +1268,14 @@ typedef struct {
 
     if (bp_open (fname, comm, fh) < 0)
     {
-        adios_error (err_file_open_error, "File open failed: %s", fname);
+        adios_error (err_file_open_error, "File open failed: %s\n", fname);
         return 0;
     }
 
     /* fill out ADIOS_FILE struct */
     fp->fh = (uint64_t) p;
 
-    /* '-1' means that we want all steps. 
+    /* '-1' means that we want all steps.
      * This will seek to the last step. So we need to set current_step back properly.
      * Usually bp_seek_to_step comes after release_step call, to first free up some
      * memory allocated by the previous step. This is the first seek call and, therefore,
@@ -1201,7 +1292,7 @@ typedef struct {
 
     fp->path = strdup (fh->fname);
     fp->endianness = bp_get_endianness (fh->mfooter.change_endianness);
-    fp->version = fh->mfooter.version;
+    fp->version = fh->mfooter.version & ADIOS_VERSION_NUM_MASK;
     fp->file_size = fh->mfooter.file_size;
 
     return fp;
@@ -1253,7 +1344,7 @@ int adios_read_bp_close (ADIOS_FILE * fp)
         free_namelist (fp->attr_namelist, fp->nattrs);
         fp->attr_namelist = 0;
     }
-  
+
     if (fp->path)
     {
         free (fp->path);
@@ -1269,11 +1360,11 @@ int adios_read_bp_close (ADIOS_FILE * fp)
  * block the call and expect new step will arrive. Therefore, if last == 0, we simply sleep
  * for a specified period of time and re-open the file to see if there is any new steps came in.
  * The trick is that when step is being advanced, it is likely that file has
- * already being appended with new steps. Therefore, we have to close and reopen 
+ * already being appended with new steps. Therefore, we have to close and reopen
  * the file if the expected step is not found.
- * last - 0: next available step, !=0: newest available step 
+ * last - 0: next available step, !=0: newest available step
  *  RETURN: 0 OK, !=0 on error (also sets adios_errno)
- *      
+ *
  *  Possible errors (adios_errno values):
  *       err_end_of_stream    Stream has ended, no more steps should be expected
  *       err_step_notready    The requested step is not yet available
@@ -1284,7 +1375,7 @@ int adios_read_bp_advance_step (ADIOS_FILE * fp, int last, float timeout_sec)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
     BP_FILE * fh = (BP_FILE *) p->fh;
-    int last_step;
+    int last_tidx;
     MPI_Comm comm;
     char * fname;
 
@@ -1299,10 +1390,10 @@ int adios_read_bp_advance_step (ADIOS_FILE * fp, int last, float timeout_sec)
             release_step (fp);
             bp_seek_to_step (fp, ++fp->current_step, show_hidden_attrs);
         }
-        else // re-open to read in footer again. We should keep polling until there are new steps in OR 
+        else // re-open to read in footer again. We should keep polling until there are new steps in OR
              // time out.
         {
-            last_step = fp->last_step;
+            last_tidx = fh->tidx_stop;
             fname = strdup (fh->fname);
             comm = fh->comm;
 
@@ -1312,27 +1403,25 @@ int adios_read_bp_advance_step (ADIOS_FILE * fp, int last, float timeout_sec)
                 p->fh = 0;
             }
 
-            if (!get_new_step (fp, fname, comm, last_step, timeout_sec))
+            if (!get_new_step (fp, fname, comm, last_tidx, timeout_sec))
             {
                 // With file reading, how can we tell it is the end of the streams?
                 adios_errno = err_step_notready;
             }
 
-            free (fname); 
-
-            log_debug ("Seek from step %d to step %d\n", last_step, last_step + 1);
+            free (fname);
 
             if (adios_errno == 0)
             {
                 release_step (fp);
-                bp_seek_to_step (fp, last_step + 1, show_hidden_attrs);
-                fp->current_step = last_step + 1;
+                bp_seek_to_step (fp, fp->last_step + 1, show_hidden_attrs);
+                fp->current_step = fp->last_step + 1;
             }
         }
     }
     else // read in newest step. Re-open no matter whether current_step < last_step
     {
-        last_step = fp->last_step;
+        last_tidx = fh->tidx_stop;
         fname = strdup (fh->fname);
         comm = fh->comm;
 
@@ -1343,7 +1432,7 @@ int adios_read_bp_advance_step (ADIOS_FILE * fp, int last, float timeout_sec)
         }
 
         // lockmode is currently not supported.
-        if (!get_new_step (fp, fh->fname, fh->comm, last_step, timeout_sec))
+        if (!get_new_step (fp, fh->fname, fh->comm, last_tidx, timeout_sec))
         {
             adios_errno = err_step_notready;
         }
@@ -1431,7 +1520,7 @@ typedef struct {
     BP_FILE * fh = (BP_FILE *) p->fh;
     ADIOS_VARSTAT * vs;
     struct adios_index_var_struct_v1 * var_root;
- 
+
     assert (varinfo);
 
     varinfo->statistics = vs = (ADIOS_VARSTAT *) malloc (sizeof (ADIOS_VARSTAT));
@@ -1543,17 +1632,23 @@ typedef struct {
         }
     }
 */
-    size = bp_get_type_size (var_root->type, "");
+    enum ADIOS_DATATYPES original_var_type = var_root->type;
+
+    if (var_root->characteristics[0].transform.transform_type != adios_transform_none) {
+        original_var_type = var_root->characteristics[0].transform.pre_transform_type;
+    }
+
+    size = bp_get_type_size (original_var_type, "");
     sum_size = bp_get_type_size (adios_double, "");
 
-    if (var_root->type == adios_complex || var_root->type == adios_double_complex)
+    if (original_var_type == adios_complex || original_var_type == adios_double_complex)
     {
         int type;
         count = 3;
         timestep = -1;
         prev_timestep = 0;
 
-        if (var_root->type == adios_complex)
+        if (original_var_type == adios_complex)
         {
             type = adios_double;
         }
@@ -1787,7 +1882,7 @@ typedef struct {
                     memcpy(vs->min, stats[map[adios_statistic_min]].data, size);
 
                 }
-                else if (adios_lt(var_root->type, stats[map[adios_statistic_min]].data, vs->min))
+                else if (adios_lt(original_var_type, stats[map[adios_statistic_min]].data, vs->min))
                 {
                     memcpy(vs->min, stats[map[adios_statistic_min]].data, size);
                 }
@@ -1797,7 +1892,7 @@ typedef struct {
                     MALLOC (vs->steps->mins[timestep], size, "minimum per timestep")
                     memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
                 }
-                else if (adios_lt(var_root->type, stats[map[adios_statistic_min]].data, vs->steps->mins[timestep]))
+                else if (adios_lt(original_var_type, stats[map[adios_statistic_min]].data, vs->steps->mins[timestep]))
                 {
                     memcpy(vs->steps->mins[timestep], stats[map[adios_statistic_min]].data, size);
                 }
@@ -1811,7 +1906,7 @@ typedef struct {
                     memcpy(vs->max, stats[map[adios_statistic_max]].data, size);
 
                 }
-                else if (adios_lt(var_root->type, vs->max, stats[map[adios_statistic_max]].data))
+                else if (adios_lt(original_var_type, vs->max, stats[map[adios_statistic_max]].data))
                 {
                     memcpy(vs->max, stats[map[adios_statistic_max]].data, size);
                 }
@@ -1821,7 +1916,7 @@ typedef struct {
                     MALLOC (vs->steps->maxs[timestep], size, "maximum per timestep")
                     memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
                 }
-                else if (adios_lt(var_root->type, vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data))
+                else if (adios_lt(original_var_type, vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data))
                 {
                     memcpy(vs->steps->maxs[timestep], stats[map[adios_statistic_max]].data, size);
                 }
@@ -1894,7 +1989,7 @@ typedef struct {
         }
 
         if(nsteps > 0 && vs->min
-           && (map[adios_statistic_sum] != -1) 
+           && (map[adios_statistic_sum] != -1)
            && (map[adios_statistic_sum_square] != -1)
           )
         {
@@ -1906,7 +2001,7 @@ typedef struct {
                 *(vs->steps->avgs[timestep]) = *(sums[timestep]) / cnts[timestep];
 
                 MALLOC(vs->steps->std_devs[timestep], sum_size, "standard deviation per timestep")
-                *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep] 
+                *(vs->steps->std_devs[timestep]) = sqrt(*(sum_squares[timestep]) / cnts[timestep]
                              - ((*(vs->steps->avgs[timestep]) * (*(vs->steps->avgs[timestep])))));
 
                 free (sums[timestep]);
@@ -1961,49 +2056,163 @@ typedef struct {
     return 0;
 }
 
-int adios_read_bp_inq_var_blockinfo (const ADIOS_FILE * fp, ADIOS_VARINFO * varinfo)
-{
+// NCSU ALACRITY-ADIOS - Factored out VARBLOCK inquiry function to permit sourcing
+static ADIOS_VARBLOCK * inq_var_blockinfo(const ADIOS_FILE * fp, const ADIOS_VARINFO * varinfo, int use_pretransform_dimensions) {
     struct BP_PROC * p = (struct BP_PROC *) fp->fh;
     int i, file_is_fortran, timedim;
     uint64_t * ldims, * gdims, * offsets;
     BP_FILE * fh;
     struct adios_index_var_struct_v1 * var_root;
+    ADIOS_VARBLOCK *blockinfo;
 
     assert (varinfo);
 
     fh = (BP_FILE *) p->fh;
     file_is_fortran = is_fortran_file (fh);
-    var_root = bp_find_var_byid (fh, varinfo->varid);
-    varinfo->blockinfo = (ADIOS_VARBLOCK *) malloc (varinfo->sum_nblocks * sizeof (ADIOS_VARBLOCK));
-    assert (varinfo->blockinfo);
 
+    // Perform variable ID mapping, since the input to this function is user-perceived
+    int mapped_id = map_req_varid (fp, varinfo->varid);
+    var_root = bp_find_var_byid (fh, mapped_id);
+
+    blockinfo = (ADIOS_VARBLOCK *) malloc (varinfo->sum_nblocks * sizeof (ADIOS_VARBLOCK));
+    assert (blockinfo);
+
+    if (use_pretransform_dimensions)
+        assert(var_root->characteristics[0].transform.transform_type != adios_transform_none);
+
+    // NCSU ALACRITY-ADIOS - Use pre-transform dimensions if instructed to do so
+    int dimcount;
+    if (use_pretransform_dimensions) {
+        dimcount = var_root->characteristics[0].transform.pre_transform_dimensions.count;
+    } else {
+        dimcount = var_root->characteristics[0].dims.count;
+    }
     /* dim.count possibily include 'time' dim in it. */
-    ldims = (uint64_t *) malloc (var_root->characteristics[0].dims.count * 8);
-    gdims = (uint64_t *) malloc (var_root->characteristics[0].dims.count * 8);
-    offsets = (uint64_t *) malloc (var_root->characteristics[0].dims.count * 8);
-    assert (ldims && gdims && offsets); 
+    ldims = (uint64_t *) malloc (dimcount * 8);
+    gdims = (uint64_t *) malloc (dimcount * 8);
+    offsets = (uint64_t *) malloc (dimcount * 8);
+    assert (ldims && gdims && offsets);
 
     for (i = 0; i < varinfo->sum_nblocks; i++)
     {
-        varinfo->blockinfo[i].start = (uint64_t *) malloc (varinfo->ndim * 8);
-        varinfo->blockinfo[i].count = (uint64_t *) malloc (varinfo->ndim * 8);
-        assert (varinfo->blockinfo[i].start && varinfo->blockinfo[i].count);
+        blockinfo[i].start = (uint64_t *) malloc (dimcount * 8);
+        blockinfo[i].count = (uint64_t *) malloc (dimcount * 8);
+        assert (blockinfo[i].start && blockinfo[i].count);
 
-        bp_get_dimension_characteristics_notime (&(var_root->characteristics[i]),
-                                                 ldims, gdims, offsets, file_is_fortran
-                                                );
+        bp_get_dimension_generic_notime (use_pretransform_dimensions ?
+                                            &var_root->characteristics[i].transform.pre_transform_dimensions :
+                                            &var_root->characteristics[i].dims,
+                                         ldims, gdims, offsets, file_is_fortran
+                                         );
 
-        memcpy (varinfo->blockinfo[i].start, offsets, varinfo->ndim * 8);
-        memcpy (varinfo->blockinfo[i].count, ldims, varinfo->ndim * 8);
+        // NCSU ALACRITY-ADIOS - If a time dimension was removed above, update
+        // dimcount so that dimension copy/swapping works below
+        if (ldims[dimcount - 1] == 0)
+            dimcount--;
+
+        memcpy (blockinfo[i].start, offsets, dimcount * 8);
+        memcpy (blockinfo[i].count, ldims, dimcount * 8);
+
+        // NCSU ALACRITY-ADIOS - This code was left over in the Transforms branch after the merge. Not sure if it's needed; preserved in case it represented a valid bugfix
+//        if (file_is_fortran != futils_is_called_from_fortran())
+//        {
+//            swap_order (dimcount, blockinfo[i].start, &timedim);
+//            swap_order (dimcount, blockinfo[i].count, &timedim);
+//        }
     }
-    
+
     free (ldims);
     free (gdims);
     free (offsets);
+    return blockinfo;
+}
+
+// NCSU ALACRITY-ADIOS - Delegate to shared VARBLOCK loader
+int adios_read_bp_inq_var_blockinfo (const ADIOS_FILE * fp, ADIOS_VARINFO * varinfo)
+{
+    varinfo->blockinfo = inq_var_blockinfo(fp, varinfo, 0); // 0 -> use true dimensions, not original dimensions
+    assert(varinfo->blockinfo);
+    return 0;
+
+}
+
+// NCSU ALACRITY-ADIOS - Adding an inq function to get the new transform metadata from storage
+ADIOS_TRANSINFO * adios_read_bp_inq_var_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi) {
+    struct BP_PROC * p = (struct BP_PROC *) fp->fh;
+    BP_FILE * fh;
+    struct adios_index_var_struct_v1 * var_root;
+    int file_is_fortran;
+    int dummy;
+    ADIOS_TRANSINFO *transinfo;
+    assert(vi);
+    fh = (BP_FILE *) p->fh;
+    file_is_fortran = is_fortran_file (fh);
+
+    // Perform variable ID mapping, since the input to this function is user-perceived
+    int mapped_id = map_req_varid (fp, vi->varid);
+    var_root = bp_find_var_byid(fh, mapped_id);
+    assert(var_root);
+
+    transinfo = malloc(sizeof(ADIOS_TRANSINFO));
+
+    const struct adios_index_characteristic_transform_struct *transform = &var_root->characteristics[0].transform;
+
+    transinfo->transform_type = transform->transform_type;
+    if (transform->transform_type != adios_transform_none) {
+        transinfo->orig_type = transform->pre_transform_type;
+
+        // Load orig_ndims/orig_dims using the utility function
+        bp_get_and_swap_dimensions_generic (fh, var_root, file_is_fortran,
+                                            &transinfo->orig_ndim, &transinfo->orig_dims,
+                                            &dummy,
+                                            file_is_fortran != futils_is_called_from_fortran(),
+                                            1); // 1 -> get based on pre-transform dimensions
+
+        transinfo->orig_global = is_global_array_generic(&var_root->characteristics[0].transform.pre_transform_dimensions);
+
+        transinfo->transform_metadata_len = transform->transform_metadata_len;
+        transinfo->transform_metadata = transform->transform_metadata;
+        transinfo->should_free_transform_metadata = 0;
+    } else {
+        transinfo->orig_type = adios_unknown;
+        transinfo->orig_ndim = 0;
+        transinfo->orig_dims = 0;
+        transinfo->orig_global = 0;
+        transinfo->transform_metadata_len = 0;
+        transinfo->transform_metadata = 0;
+        transinfo->should_free_transform_metadata = 0;
+    }
+    transinfo->orig_blockinfo = 0;
+
+    return transinfo;
+}
+
+// NCSU ALACRITY-ADIOS - Adding an inq function to get original (pre-transform) blockinfo for variables from storage
+int adios_read_bp_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    struct BP_PROC * p = (struct BP_PROC *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) p->fh;
+    struct adios_index_var_struct_v1 * var_root;
 
+    ti->orig_blockinfo = inq_var_blockinfo(fp, vi, 1); // 1 -> use original, pretransform dimensions
     return 0;
 }
 
+// NCSU ALACRITY-ADIOS - Dummy function stubs for the staged and staged1 read transports; move to those files at some point
+ADIOS_TRANSINFO * adios_read_bp_staged_inq_var_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi) {
+    return NULL;
+}
+ADIOS_TRANSINFO * adios_read_bp_staged1_inq_var_transinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi) {
+    return NULL;
+}
+int adios_read_bp_staged_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    return 1;
+}
+int adios_read_bp_staged1_inq_var_trans_blockinfo(const ADIOS_FILE *fp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti) {
+    return 1;
+}
+
+
+
 uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios_index_var_struct_v1 * v)
 {
     BP_PROC * p = (BP_PROC *) fp->fh;
@@ -2025,16 +2234,25 @@ uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios
     }
     else if (sel->type == ADIOS_SELECTION_WRITEBLOCK)
     {
-        pgidx = adios_wbidx_to_pgidx (fp, r);
-
-        ndims = v->characteristics[pgidx].dims.count;
-        for (i = 0; i < ndims; i++)
-        {
-            datasize *= v->characteristics[pgidx].dims.dims[i * 3];
+        //pgidx = adios_wbidx_to_pgidx (fp, r);
+        // NCSU ALACRITY-ADIOS: Adding absoluet PG indexing
+        pgidx = sel->u.block.is_absolute_index ?
+                    sel->u.block.index :
+                adios_wbidx_to_pgidx (fp, r);
+        // NCSU ALACRITY-ADIOS: Adding sub-PG writeblock read support
+        if (sel->u.block.is_sub_pg_selection) {
+            datasize = sel->u.block.nelements;
+        } else {
+            // NCSU ALACRITY-ADIOS: This used to not be in this else block
+            ndims = v->characteristics[pgidx].dims.count;
+            for (i = 0; i < ndims; i++)
+            {
+                datasize *= v->characteristics[pgidx].dims.dims[i * 3];
+            }
         }
     }
 
-    return datasize;   
+    return datasize;
 }
 
 /* Note: the varid isn't the perceived varid from the user */
@@ -2050,12 +2268,12 @@ uint64_t get_req_datasize (const ADIOS_FILE * fp, read_request * r, struct adios
  *                  step of a file variable.
                     It is not used in case of a stream.
  *       nsteps     Read 'nsteps' consecutive steps from current step.
- *                  Must be 1 for a stream. 
+ *                  Must be 1 for a stream.
  *  OUT: data       pointer to the memory to hold data of the variable
- *                  In blocking read mode, the memory should be 
+ *                  In blocking read mode, the memory should be
  *                  pre-allocated. In non-blocking mode, memory can be
  *                  allocated or not, and that changes the behavior of
- *                  the chunked read. If memory is allocated, 
+ *                  the chunked read. If memory is allocated,
  *                  adios_check_read() returns a variable if it is completed.
  *                  If memory is not allocated, the check returns any chunk
  *                  already available of a variable (in ADIOS own memory)
@@ -2201,15 +2419,15 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
     uint64_t pos[32], subbb[32], start[32], count[32];
 
     log_debug ("split_req()\n");
-    varid = map_req_varid (fp, r->varid);
+    varid = r->varid; //map_req_varid (fp, r->varid); // NCSU ALACRITY-ADIOS: Bugfix: r->varid has already been mapped
     v = bp_find_var_byid (fh, varid);
     type_size = bp_get_type_size (v->type, "");
     assert (type_size);
 
     n_elements = buffer_size / type_size;
-    
+
     printf ("n_elements = %d\n", n_elements);
-    //TODO: handle string 
+    //TODO: handle string
     if (sel->type == ADIOS_SELECTION_BOUNDINGBOX)
     {
         ndim = sel->u.bb.ndim;
@@ -2284,7 +2502,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
 
             memcpy (newreq->sel->u.bb.start,
                     start,
-                    ndim * 8 
+                    ndim * 8
                    );
 
             // check whether the start + count will be out of bound
@@ -2302,7 +2520,7 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
 
             memcpy (newreq->sel->u.bb.count,
                     count,
-                    ndim * 8 
+                    ndim * 8
                    );
 
             log_debug ("bb: (");
@@ -2382,11 +2600,11 @@ static read_request * split_req (const ADIOS_FILE * fp, const read_request * r,
             newreq->sel->u.points.npoints = (remain > n_elements ? n_elements : remain);
             newreq->sel->u.points.points = malloc (newreq->sel->u.points.npoints * newreq->sel->u.points.ndim * 8);
             assert (newreq->sel->u.points.points);
-            memcpy (newreq->sel->u.points.points, 
+            memcpy (newreq->sel->u.points.points,
                     sel->u.points.points + (sel->u.points.npoints - remain) * sel->u.points.ndim,
                     newreq->sel->u.points.npoints * sel->u.points.ndim * 8
                    );
-  
+
             newreq->varid = r->varid;
             newreq->from_steps = r->from_steps;
             newreq->nsteps = r->nsteps;
@@ -2415,7 +2633,7 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
     ADIOS_VARCHUNK * varchunk;
     int type_size;
 /*
- *  RETURN:         0: all chunks have been returned previously, 
+ *  RETURN:         0: all chunks have been returned previously,
  *                     no need to call again (chunk is NULL, too)
  *                  1: some chunks are/will be available, call again
  *                  <0 on error, sets adios_errno too
@@ -2518,7 +2736,7 @@ int adios_read_bp_check_reads (const ADIOS_FILE * fp, ADIOS_VARCHUNK ** chunk)
             {
                 return adios_errno;
             }
-        } 
+        }
     }
 
     return 0;
@@ -2598,7 +2816,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
         {
             attr_c_index = k;
             break;
-        } 
+        }
     }
 
     if (attr_c_index == -1)
@@ -2617,7 +2835,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
         *type = attr_root->type;
         *data = (void *) malloc (*size);
         assert (*data);
-       
+
         memcpy(*data, attr_root->characteristics[attr_c_index].value, *size);
     }
     else if (attr_root->characteristics[attr_c_index].var_id)
@@ -2663,7 +2881,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
         }
 
         if (!var_root)
-        { 
+        {
             adios_error (err_invalid_attribute_reference,
                    "Attribute %s/%s in group %s is a reference to variable ID %d, which is not found\n",
                    attr_root->attr_path, attr_root->attr_name, attr_root->group_name,
@@ -2696,8 +2914,8 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
                 1. attr has no type, var is byte array     ==> string
                 2. attr has no type, var is not byte array ==> var type
                 3. attr is string, var is byte array       ==> string
-                4. attr type == var type                   ==> var type 
-                5. attr type != var type                   ==> attr type and conversion needed 
+                4. attr type == var type                   ==> var type
+                5. attr type != var type                   ==> attr type and conversion needed
         */
         /* Error check: attr cannot reference an array in general */
         if (var_root->characteristics[var_c_index].dims.count > 0)
@@ -2765,7 +2983,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
 
             free (r->sel);
             free (r);
-      
+
             if (vc == 0)
             {
                 char *msg = strdup(adios_get_last_errmsg());
@@ -2794,7 +3012,7 @@ int adios_read_bp_get_attr_byid (const ADIOS_FILE * fp, int attrid, enum ADIOS_D
                 *size = count+1;
                 *data = tmpdata;
             }
- 
+
             free (vc->sel);
             free (vc);
         }
@@ -2821,7 +3039,7 @@ void adios_read_bp_reset_dimension_order (const ADIOS_FILE *fp, int is_fortran)
     uint64_t i;
 
     for (i = 0; i < mh->pgs_count; i++) {
-        is_fortran ? ((*root)->adios_host_language_fortran = adios_flag_yes) 
+        is_fortran ? ((*root)->adios_host_language_fortran = adios_flag_yes)
                : ((*root)->adios_host_language_fortran = adios_flag_no);
         root = &(*root)->next;
     }
@@ -2890,7 +3108,7 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
     BP_PROC * p;
     BP_FILE * fh;
     struct adios_index_var_struct_v1 * v;
-    struct adios_index_characteristic_struct_v1 ch;
+    //struct adios_index_characteristic_struct_v1 ch;
     int retval = 0, ndim, k, dummy, file_is_fortran;
     uint64_t gdims[32];
 
@@ -2898,8 +3116,11 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
     fh = (BP_FILE *) p->fh;
 
     v = bp_find_var_byid (fh, varid);
-    ch = v->characteristics[0];
-    ndim = ch.dims.count; //ndim possibly has 'time' dimension
+    //ch = v->characteristics[0];
+    //ndim = ch.dims.count; //ndim possibly has 'time' dimension
+    // NCSU ALACRITY-ADIOS - An optimization. Not sure why it was originally added, but it works
+    struct adios_index_characteristic_dims_struct_v1 *dims = &v->characteristics[0].dims;
+    ndim = dims->count; //ndim possibly has 'time' dimension
 
     log_debug ("adios_read_bp_is_var_timed: varid = %d, ndim = %d\n", varid, ndim);
 
@@ -2910,7 +3131,8 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
 
     for (k = 0; k < ndim; k++)
     {
-        gdims[k] = ch.dims.dims[k * 3 + 1];
+        // NCSU ALACRITY-ADIOS - An optimization
+        gdims[k] = dims->dims[k * 3 + 1]; //ch.dims.dims[k * 3 + 1];
     }
 /*
     if (is_fortran_file (fh))
@@ -2927,7 +3149,7 @@ int adios_read_bp_is_var_timed (const ADIOS_FILE *fp, int varid)
             retval = 1;
         }
         /* FIXME: This last test tests if the last l:g:o is only an 'l'.
-           This is true for a variable over time but also 
+           This is true for a variable over time but also
            true for a 1D local array (which has no global dimension)
            The characteristics_count is 1 only if the local array is written
            from one process and only at one timestep.
@@ -2980,7 +3202,7 @@ static int map_req_varid (const ADIOS_FILE * fp, int varid)
 }
 
 /* This routine converts the write block index, which is of a particular step,
- * to the adios internal PG index. 
+ * to the adios internal PG index.
  */
 static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r)
 {
@@ -2996,7 +3218,7 @@ static int adios_wbidx_to_pgidx (const ADIOS_FILE * fp, read_request * r)
     }
 
     time = adios_step_to_time (fp, r->varid, r->from_steps);
-    mapped_varid = map_req_varid (fp, r->varid); 
+    mapped_varid = r->varid; //map_req_varid (fp, r->varid); // NCSU ALACRITY-ADIOS: Bugfix: r->varid has already been mapped
     v = bp_find_var_byid (fh, mapped_varid);
 
     start_idx = get_var_start_index (v, time);
@@ -3054,16 +3276,24 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
     void * data;
     ADIOS_VARCHUNK * chunk;
     MPI_Status status;
+    const ADIOS_SELECTION_WRITEBLOCK_STRUCT *wb;// NCSU ALACRITY-ADIOS
 
     adios_errno = 0;
 
     file_is_fortran = is_fortran_file (fh);
     has_subfile = has_subfiles (fh);
     data = r->data;
-    varid = map_req_varid (fp, r->varid);
+    varid = r->varid; //varid = map_req_varid (fp, r->varid); // NCSU ALACRITY-ADIOS: Bugfix: r->varid has already been mapped
     v = bp_find_var_byid (fh, varid);
-    time = adios_step_to_time (fp, r->varid, r->from_steps);
-    idx = adios_wbidx_to_pgidx (fp, r);
+
+    // NCSU ALACRITY-ADIOS: Add support for absolute PG index for efficiency
+    //time = adios_step_to_time (fp, r->varid, r->from_steps);
+    //idx = adios_wbidx_to_pgidx (fp, r);
+    assert(r->sel->type == ADIOS_SELECTION_WRITEBLOCK);
+    wb = &r->sel->u.block;
+
+    idx = wb->is_absolute_index ? wb->index : adios_wbidx_to_pgidx (fp, r);
+    //if (!wb->is_absolute_index) printf("Timestep-relative writeblock index used!\n");
     assert (idx >= 0);
 
     ndim = v->characteristics [idx].dims.count;
@@ -3108,15 +3338,25 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
     }
     else
     {
-        slice_size = size_of_type;
+        // NCSU ALACRITY-ADIOS: Added sub-PG writeblock selection support
+        // If this is a sub-PG selection, use nelements to compute slice_size
+        // instead
+        if (wb->is_sub_pg_selection) {
+            // The start and end of the sub-PG selection must fall within the PG
+            slice_size = wb->nelements * size_of_type;
+        } else {
+            // NCSU ALACRITY-ADIOS: This used to not be inside an else block
+            // Else, do the old method of computing PG size from bounds
+            slice_size = size_of_type;
 
-        /* To get ldims for the chunk and then calculate payload size */
-        bp_get_dimension_characteristics (&(v->characteristics[idx]),
-                                         ldims, gdims, offsets);
+            /* To get ldims for the chunk and then calculate payload size */
+            bp_get_dimension_characteristics(&(v->characteristics[idx]),
+                                             ldims, gdims, offsets);
 
-        for (j = 0; j < ndim; j++)
-        {
-            slice_size *= ldims [j];
+            for (j = 0; j < ndim; j++)
+            {
+                slice_size *= ldims [j];
+            }
         }
 
         r->datasize = slice_size;
@@ -3128,16 +3368,23 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
         start_idx = 0;
         slice_offset = v->characteristics[idx].payload_offset;
 
+        // NCSU ALACRITY-ADIOS: Added sub-PG writeblock selection support
+        // If this is a sub-PG read, add the element_offset within the PG to the base offset in the file
+        if (wb->is_sub_pg_selection) {
+            slice_offset += wb->element_offset * size_of_type;
+        }
+
         if (!has_subfile)
         {
-            MPI_FILE_READ_OPS1
+            MPI_FILE_READ_OPS1_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
         }
         else
         {
-            MPI_FILE_READ_OPS2
+            MPI_FILE_READ_OPS2_BUF(data) // NCSU ALACRITY-ADIOS: Read data directly to user buffer
         }
 
-        memcpy ((char *)data, fh->b->buff + fh->b->offset, slice_size);
+        // NCSU ALACRITY-ADIOS: Reading directly to user buffer eliminates the need for this memcpy (profiling revealed it was hurting performance for transformed data)
+        //memcpy ((char *)data, fh->b->buff + fh->b->offset, slice_size);
         if (fh->mfooter.change_endianness == adios_flag_yes)
         {
             change_endianness ((char *)data, slice_size, v->type);
@@ -3149,6 +3396,9 @@ static ADIOS_VARCHUNK * read_var_wb (const ADIOS_FILE * fp, read_request * r)
 
     chunk->varid = r->varid;
     chunk->type = v->type;
+    // NCSU ALACRITY-ADIOS - Added timestep information into varchunks
+    chunk->from_steps = r->from_steps;
+    chunk->nsteps = r->nsteps;
     chunk->sel = copy_selection (r->sel);
     chunk->data = data;
 
@@ -3173,21 +3423,21 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
 
     // If the vix and viy are not time series objects, return.
     if ((vix->timedim < 0) && (viy->timedim < 0))
-    {             
+    {
         fprintf(stderr, "Covariance must involve timeseries data\n");
         return 0;
-    }                                                                    
+    }
 
     uint32_t min = vix->dims[0] - 1;
     if (viy && (min > viy->dims[0] - 1))
-        min = viy->dims[0] - 1;         
-    
-    if(time_start == 0 && time_end == 0) 
+        min = viy->dims[0] - 1;
+
+    if(time_start == 0 && time_end == 0)
     { //global covariance
         if(viy == NULL) {
             fprintf(stderr, "Must have two variables for global covariance\n");
             return 0;
-        }                                                                          
+        }
 
         // Assign vix to viy, and calculate covariance
         viy = vix;
@@ -3202,7 +3452,7 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
         if(viy == NULL) //user must want to run covariance against itself
         {
             if(! (time_end+lag) > min)
-            {                                                                        
+            {
                 fprintf(stderr, "Must leave enough timesteps for lag\n");
                 return 0;
             }
@@ -3217,9 +3467,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
 
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (adios_double, vix->avgs[i]); 
-                    double val_lag = bp_value_to_double (adios_double, vix->avgs[i + lag]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (adios_double, vix->avgs[i]);
+                    double val_lag = bp_value_to_double (adios_double, vix->avgs[i + lag]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_lag += (val_lag - avg_lag) * (val_lag - avg_lag) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_lag - avg_lag) / (time_end - time_start + 1);
                 }
@@ -3251,9 +3501,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
 
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (vix->type, vix->mins[i]); 
-                    double val_lag = bp_value_to_double (vix->type, vix->mins[i + lag]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (vix->type, vix->mins[i]);
+                    double val_lag = bp_value_to_double (vix->type, vix->mins[i + lag]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_lag += (val_lag - avg_lag) * (val_lag - avg_lag) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_lag - avg_lag) / (time_end - time_start + 1);
                 }
@@ -3268,9 +3518,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
 
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (vix->type, vix->maxs[i]); 
-                    double val_lag = bp_value_to_double (vix->type, vix->maxs[i + lag]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (vix->type, vix->maxs[i]);
+                    double val_lag = bp_value_to_double (vix->type, vix->maxs[i + lag]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_lag += (val_lag - avg_lag) * (val_lag - avg_lag) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_lag - avg_lag) / (time_end - time_start + 1);
                 }
@@ -3293,9 +3543,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
                 }
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (adios_double, vix->avgs[i]); 
-                    double val_y = bp_value_to_double (adios_double, viy->avgs[i]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (adios_double, vix->avgs[i]);
+                    double val_y = bp_value_to_double (adios_double, viy->avgs[i]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_y += (val_y - avg_y) * (val_y - avg_y) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_y - avg_y) / (time_end - time_start + 1);
                 }
@@ -3325,9 +3575,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
                 }
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (vix->type, vix->mins[i]); 
-                    double val_y = bp_value_to_double (viy->type, viy->mins[i]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (vix->type, vix->mins[i]);
+                    double val_y = bp_value_to_double (viy->type, viy->mins[i]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_y += (val_y - avg_y) * (val_y - avg_y) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_y - avg_y) / (time_end - time_start + 1);
                 }
@@ -3341,9 +3591,9 @@ double adios_stat_cor (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
                 }
                 for (i = time_start; i <= time_end; i ++)
                 {
-                    double val_x = bp_value_to_double (vix->type, vix->maxs[i]); 
-                    double val_y = bp_value_to_double (viy->type, viy->maxs[i]); 
-                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1); 
+                    double val_x = bp_value_to_double (vix->type, vix->maxs[i]);
+                    double val_y = bp_value_to_double (viy->type, viy->maxs[i]);
+                    var_x += (val_x - avg_x) * (val_x - avg_x) / (time_end - time_start + 1);
                     var_y += (val_y - avg_y) * (val_y - avg_y) / (time_end - time_start + 1);
                     cov += (val_x - avg_x) * (val_y - avg_y) / (time_end - time_start + 1);
                 }
@@ -3380,21 +3630,21 @@ double adios_stat_cov (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
 
     // If the vix and viy are not time series objects, return.
     if ((vix->timedim < 0) && (viy->timedim < 0))
-    {             
+    {
         fprintf(stderr, "Covariance must involve timeseries data\n");
         return 0;
-    }                                                                    
+    }
 
     uint32_t min = vix->dims[0] - 1;
     if (viy && (min > viy->dims[0] - 1))
-        min = viy->dims[0] - 1;         
-    
-    if(time_start == 0 && time_end == 0) 
+        min = viy->dims[0] - 1;
+
+    if(time_start == 0 && time_end == 0)
     { //global covariance
         if(viy == NULL) {
             fprintf(stderr, "Must have two variables for global covariance\n");
             return 0;
-        }                                                                          
+        }
 
         // Assign vix to viy, and calculate covariance
         viy = vix;
@@ -3409,7 +3659,7 @@ double adios_stat_cov (ADIOS_VARINFO * vix, ADIOS_VARINFO * viy, char * characte
         if(viy == NULL) //user must want to run covariance against itself
         {
             if(! (time_end+lag) > min)
-            {                                                                        
+            {
                 fprintf(stderr, "Must leave enough timesteps for lag\n");
                 return 0;
             }
diff --git a/src/read/read_bp_staged.c b/src/read/read_bp_staged.c
index ef12aad..fac9664 100644
--- a/src/read/read_bp_staged.c
+++ b/src/read/read_bp_staged.c
@@ -1809,12 +1809,15 @@ fprintf (stderr, "bc %s bo 1 = %llu, bo 2 = %llu, len = %d\n", vars_root->var_na
             }
         }
 
+        fh->vars_table = (struct adios_index_var_struct_v1 **) malloc (fh->mfooter.vars_count * 8);
+
         vars_root = 0;
         for (i = 0; i < fh->mfooter.vars_count; i++)
         {
             v = (struct adios_index_var_struct_v1 *) malloc (sizeof (struct adios_index_var_struct_v1));
             assert (v);
-uint64_t bo = buffer_offset;
+            fh->vars_table[i] = v;
+
             _buffer_read (buffer, &buffer_offset, &v->id, 2);
 
             _buffer_read (buffer, &buffer_offset, &len, 2);
@@ -2167,6 +2170,7 @@ ADIOS_FILE * adios_read_bp_staged_open_file (const char * fname, MPI_Comm comm)
     fh->pgs_root = 0;
     fh->vars_root = 0;
     fh->attrs_root = 0;
+    fh->vars_table = 0;
     fh->b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     assert (fh->b);
     adios_buffer_struct_init (fh->b);
@@ -2190,7 +2194,7 @@ ADIOS_FILE * adios_read_bp_staged_open_file (const char * fname, MPI_Comm comm)
     {
         if (bp_open (fname, pvt->new_comm2, fh) < 0)
         {
-            adios_error (err_file_open_error, "File open failed: %s", fname);
+            adios_error (err_file_open_error, "File open failed: %s\n", fname);
             return 0;
         }
     }
@@ -2216,7 +2220,7 @@ ently.
 
     fp->path = strdup (fh->fname);
     fp->endianness = bp_get_endianness (fh->mfooter.change_endianness);
-    fp->version = fh->mfooter.version;
+    fp->version = fh->mfooter.version & ADIOS_VERSION_NUM_MASK;
     fp->file_size = fh->mfooter.file_size;
 
     return fp;
diff --git a/src/read/read_bp_staged1.c b/src/read/read_bp_staged1.c
index bb448c4..311e33b 100644
--- a/src/read/read_bp_staged1.c
+++ b/src/read/read_bp_staged1.c
@@ -1066,7 +1066,7 @@ printf ("\n");
             g = fidx_to_group_mapping (p, fidx_vector[i]);
             g_prev = (i == 0 ? -1 : fidx_to_group_mapping (p, fidx_vector[i - 1]));
 
-	    if (i != 0 && g == g_prev)
+            if (i != 0 && g == g_prev)
             {
                 continue;
             }
@@ -4150,7 +4150,7 @@ ADIOS_FILE * adios_read_bp_staged1_fopen (const char * fname, MPI_Comm comm)
         fp->tidx_start = fh->tidx_start;
         fp->ntimesteps = fh->tidx_stop - fh->tidx_start + 1;
         fp->file_size = fh->mfooter.file_size;
-        fp->version = fh->mfooter.version;
+        fp->version = fh->mfooter.version & ADIOS_VERSION_NUM_MASK;
         fp->endianness = adios_read_bp_staged1_get_endianness (fh->mfooter.change_endianness);
     }
 
@@ -4267,6 +4267,9 @@ int adios_read_bp_staged1_fclose (ADIOS_FILE *fp)
 
         }
 
+        // NCSU ALACRITY-ADIOS - Clear transform metadata
+        adios_transform_clear_transform_characteristic(&vr->characteristics[j]);
+
         if (vr->characteristics) 
             free (vr->characteristics);
         if (vr->group_name) 
@@ -6229,7 +6232,7 @@ int64_t adios_read_bp_staged1_read_var (ADIOS_GROUP * gp
     if (varid < 0 || varid >= gh->vars_count)
     {
         adios_error (err_invalid_varid, "Invalid variable id %d (allowed 0..%d)", varid, gh->vars_count);
-        return -adios_errno;
+        return adios_errno;
     }
 
     p = (struct proc_struct *) fh->priv;
@@ -6305,28 +6308,28 @@ int64_t adios_read_bp_staged1_read_local_var (ADIOS_GROUP * gp, const char * var
     if (!gp)
     {
         adios_error (err_invalid_group_struct, "Null pointer passed as group to adios_read_var()");
-        return -adios_errno;
+        return adios_errno;
     }
 
     gh = (struct BP_GROUP *) gp->gh;
     if (!gh)
     {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh group handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
 
     fh = gh->fh;
     if (!fh)
     {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh->fh file handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
 
     varid = adios_read_bp_staged1_find_var(gp, varname);
     if (varid < 0 || varid >= gh->vars_count)
     {
         adios_error (err_invalid_varid, "Invalid variable id %d (allowed 0..%d)", varid, gh->vars_count);
-        return -adios_errno;
+        return adios_errno;
     }
 
     /* Check if file is written out by Fortran or C */
@@ -6346,7 +6349,7 @@ int64_t adios_read_bp_staged1_read_local_var (ADIOS_GROUP * gp, const char * var
         adios_error (err_corrupted_variable, 
                      "Variable id=%d is valid but was not found in internal data structures!",
                      varid);
-        return -adios_errno; 
+        return adios_errno; 
     }
 
     if (vidx < 0 || vidx >= var_root->characteristics_count)
@@ -6476,7 +6479,7 @@ int64_t adios_read_bp_staged1_read_local_var (ADIOS_GROUP * gp, const char * var
                         "the data in dimension %d to read is %llu elements from index %llu"
                         " but the actual data is [0,%llu])",
                         varid, j+1, count_notime[j], start_notime[j], ldims[j] - 1);
-                    return -adios_errno;
+                    return adios_errno;
         }
     }
 
@@ -6560,7 +6563,7 @@ int64_t adios_read_bp_staged1_read_local_var (ADIOS_GROUP * gp, const char * var
              adios_error (err_no_memory, "Malloc failed in %s at %d\n"
                          , __FILE__, __LINE__
                          );
-             return -adios_errno;
+             return adios_errno;
         }
 
         for (i = 0; i < ndim_notime ; i++)
@@ -6686,21 +6689,21 @@ int64_t adios_read_bp_staged1_read_var_byid1 (ADIOS_GROUP    * gp,
     adios_errno = 0;
     if (!gp) {
         adios_error (err_invalid_group_struct, "Null pointer passed as group to adios_read_var()");
-        return -adios_errno;
+        return adios_errno;
     }
     gh = (struct BP_GROUP *) gp->gh;
     if (!gh) {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh group handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
     fh = gh->fh;
     if (!fh) {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh->fh file handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
     if (varid < 0 || varid >= gh->vars_count) {
         adios_error (err_invalid_varid, "Invalid variable id %d (allowed 0..%d)", varid, gh->vars_count);
-        return -adios_errno;
+        return adios_errno;
     }
     
     file_is_fortran = (fh->pgs_root->adios_host_language_fortran == adios_flag_yes);
@@ -6712,7 +6715,7 @@ int64_t adios_read_bp_staged1_read_var_byid1 (ADIOS_GROUP    * gp,
 
     if (i!=varid) {
         adios_error (err_corrupted_variable, "Variable id=%d is valid but was not found in internal data structures!",varid);
-        return -adios_errno; 
+        return adios_errno; 
     }
 
     /* Get dimensions and flip if caller != writer language */
@@ -6730,7 +6733,7 @@ int64_t adios_read_bp_staged1_read_var_byid1 (ADIOS_GROUP    * gp,
             {
                 adios_error (err_no_data_at_timestep,"Variable (id=%d) has wrong time dimension index",
                       varid);
-                return -adios_errno;
+                return adios_errno;
             }
             if (futils_is_called_from_fortran())
             {
@@ -6819,7 +6822,7 @@ int64_t adios_read_bp_staged1_read_var_byid1 (ADIOS_GROUP    * gp,
             {
                 adios_error (err_no_data_at_timestep,"Variable (id=%d) has wrong time dimension",
                       varid);
-                return -adios_errno;
+                return adios_errno;
             }
 
             if (futils_is_called_from_fortran())
@@ -6940,7 +6943,7 @@ printf ("pgcount = %lld\n", pgcount);
         if (start_idx<0) {
             adios_error (err_no_data_at_timestep,"Variable (id=%d) has no data at %d time step",
                 varid, timestep);
-            return -adios_errno;
+            return adios_errno;
         }
 
         if (ndim_notime == 0) {
@@ -7050,7 +7053,7 @@ printf ("pgcount = %lld\n", pgcount);
                         "the data in dimension %d to read is %llu elements from index %llu"
                         " but the actual data is [0,%llu])",
                         varid, j+1, count_notime[j], start_notime[j], gdims[j] - 1);
-                    return -adios_errno;
+                    return adios_errno;
                 }
     
                 /* check if there is any data in this pg and this dimension to read in */
@@ -7308,7 +7311,7 @@ int64_t adios_read_bp_staged1_read_var_byid2 (ADIOS_GROUP    * gp,
         adios_error (err_corrupted_variable, 
                "Variable id=%d is valid but was not found in internal data structures!",
                varid);
-        return -adios_errno; 
+        return adios_errno; 
     }
 
     /* Get dimensions and flip if caller != writer language */
@@ -7379,7 +7382,7 @@ int64_t adios_read_bp_staged1_read_var_byid2 (ADIOS_GROUP    * gp,
         if (start_idx < 0 || stop_idx < 0) {
             adios_error (err_no_data_at_timestep,"Variable (id=%d) has no data at %d time step",
                 varid, t);
-//            return -adios_errno;
+//            return adios_errno;
             continue;
         }
 
@@ -7496,7 +7499,7 @@ int64_t adios_read_bp_staged1_read_var_byid2 (ADIOS_GROUP    * gp,
                         "the data in dimension %d to read is %llu elements from index %llu"
                         " but the actual data is [0,%llu])",
                         varid, j+1, count_notime[j], start_notime[j], gdims[j] - 1);
-                    return -adios_errno;
+                    return adios_errno;
                 }
     
                 /* check if there is any data in this pg and this dimension to read in */
@@ -7738,19 +7741,19 @@ int64_t adios_read_bp_staged1_read_var_byid (ADIOS_GROUP    * gp,
     adios_errno = 0;
     if (!gp) {
         adios_error (err_invalid_group_struct, "Null pointer passed as group to adios_read_var()");
-        return -adios_errno;
+        return adios_errno;
     }
 
     gh = (struct BP_GROUP *) gp->gh;
     if (!gh) {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh group handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
 
     fh = gh->fh;
     if (!fh) {
         adios_error (err_invalid_group_struct, "Invalid ADIOS_GROUP struct: .gh->fh file handle is NULL!");
-        return -adios_errno;
+        return adios_errno;
     }
 
     has_time_index_characteristic = fh->mfooter.version & ADIOS_VERSION_HAVE_TIME_INDEX_CHARACTERISTIC;
diff --git a/src/read/read_dataspaces.c b/src/read/read_dataspaces.c
index 09f1d5b..0e5e5b8 100644
--- a/src/read/read_dataspaces.c
+++ b/src/read/read_dataspaces.c
@@ -34,6 +34,8 @@
 
 #define MYFREE(p) {free(p); p=NULL;}
 
+void adios_read_dataspaces_release_step (ADIOS_FILE *fp);
+
 /*
 #include <time.h> // nanosleep
 static void adios_nanosleep (int sec, int nanosec) 
@@ -983,6 +985,8 @@ ADIOS_VARINFO * adios_read_dataspaces_inq_var_byid (const ADIOS_FILE *fp, int va
     struct dataspaces_data_struct * ds = (struct dataspaces_data_struct *) fp->fh;
     struct dataspaces_var_struct * vars = ds->vars;
     ADIOS_VARINFO * vi;
+    int i;
+    int datasize;
 
     if (varid < 0 || varid > fp->nvars) {
         adios_error (err_invalid_varid, "Stream %s has %d variables. Invalid variable id %d\n",
@@ -998,14 +1002,32 @@ ADIOS_VARINFO * adios_read_dataspaces_inq_var_byid (const ADIOS_FILE *fp, int va
 
     vi->varid = varid;
     vi->type = vars[varid].type;
-    vi->ndim = vars[varid].ndims;
-    vi->dims = vars[varid].dims;
     vi->nsteps = 1;
-    vi->value = vars[varid].value;
+
+    /* Copy the dimensions (adios_free_varinfo() will free the copy */
+    vi->ndim = vars[varid].ndims;
+    if (vi->ndim) {
+        vi->dims = (uint64_t *) malloc (vi->ndim*sizeof(uint64_t));
+        memcpy (vi->dims, vars[varid].dims, vi->ndim*sizeof(uint64_t));
+    } else {
+        vi->dims = NULL;
+    }
+
+    /* Copy the value */
+    if (vars[varid].value) {
+        datasize = common_read_type_size(vi->type, vars[varid].value);
+        vi->value = (void *) malloc (datasize);
+        memcpy (vi->value, vars[varid].value, datasize);
+    } else {
+        vi->value = NULL;
+    }
+
     vi->global = 1;
     vi->nblocks = (int *) malloc (sizeof(int));
     vi->nblocks[0] = 1;
     vi->sum_nblocks = vi->nblocks[0];
+    vi->statistics = NULL;
+    vi->blockinfo = NULL;
     
     return vi;
 }
@@ -1026,6 +1048,16 @@ int adios_read_dataspaces_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * va
     return 0;
 }
 
+ADIOS_TRANSINFO* adios_read_dataspaces_inq_var_transinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi)
+{
+    ADIOS_TRANSINFO *trans = malloc(sizeof(ADIOS_TRANSINFO));
+    memset(trans, 0, sizeof(ADIOS_TRANSINFO));
+    trans->transform_type = adios_transform_none;
+    return trans;
+}
+
+
+
 int adios_read_dataspaces_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
 {
     /* FIXME: return the actual block decomposition by the writers
@@ -1043,6 +1075,12 @@ int adios_read_dataspaces_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO
     return 0;
 }
 
+int adios_read_dataspaces_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti)
+{
+    adios_error(err_operation_not_supported, "DataSpaces does not yet support transforms: trans_blockinfo.\n");
+    return 0;
+}
+
 
 static int adios_read_dataspaces_get (const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank,
@@ -1220,11 +1258,11 @@ int adios_read_dataspaces_schedule_read_byid (const ADIOS_FILE * fp,
         r->priv = 0;
         r->next = 0;
         if (ds->req_list == NULL) {
-            list_insert_read_request_tail (&ds->req_list, r);
+            list_append_read_request_list (&ds->req_list, r);
             ds->req_list_tail = ds->req_list;
         } else {
             // just speed up insert directly after the tail
-            list_insert_read_request_next (&ds->req_list_tail, r);
+            list_append_read_request_list (&ds->req_list_tail, r);
         }
     } else {
         free(r);
@@ -1265,6 +1303,8 @@ static ADIOS_VARCHUNK * read_var (const ADIOS_FILE *fp, read_request * r)
         } else {
             ds->chunk->data = var->value;
         }
+        log_debug("-- %s, rank %d: scalar: varname=%s value=%d\n",
+                __func__, ds->mpi_rank, var->name, *(int*)var->value); 
         return ds->chunk;
     }
         
diff --git a/src/read/read_datatap.c b/src/read/read_datatap.c
index f6463c9..87cbe41 100644
--- a/src/read/read_datatap.c
+++ b/src/read/read_datatap.c
@@ -1382,7 +1382,7 @@ fprintf(stderr, "im here %s:%d\n", __FILE__,__LINE__);
     // we also need a value telling that writer is finishing so don't
     // read this file any more
 
-    return fp;	
+    return fp; 
 }
 
 int adios_read_datatap_fclose(ADIOS_FILE *fp)
@@ -1416,8 +1416,8 @@ fprintf(stderr, "im here rank %d %s:%d\n",dt_read_data->dt_comm_rank,__FILE__,__
 
     while(1) {
         pthread_mutex_lock(&(ds->f_info->mutex));
-		while(queue_size(ds->f_info->dt_queue) == 0) {
-	fprintf(stderr, "im here num_chunks_processed %d %d %s:%d\n",num_chunks_processed, ds->num_pgs,__FILE__,__LINE__);
+                while(queue_size(ds->f_info->dt_queue) == 0) {
+        fprintf(stderr, "im here num_chunks_processed %d %d %s:%d\n",num_chunks_processed, ds->num_pgs,__FILE__,__LINE__);
             // check if it's time to finish this file
             if(num_chunks_processed == ds->num_pgs) { // TODO
 fprintf(stderr, "im here %s:%d\n",__FILE__,__LINE__);
diff --git a/src/read/read_dimes.c b/src/read/read_dimes.c
index 155fcfa..e50234f 100644
--- a/src/read/read_dimes.c
+++ b/src/read/read_dimes.c
@@ -987,6 +987,7 @@ ADIOS_VARINFO * adios_read_dimes_inq_var_byid (const ADIOS_FILE *fp, int varid)
     struct dimes_data_struct * ds = (struct dimes_data_struct *) fp->fh;
     struct dimes_var_struct * vars = ds->vars;
     ADIOS_VARINFO * vi;
+    int datasize;
 
     if (varid < 0 || varid > fp->nvars) {
         adios_error (err_invalid_varid, "Stream %s has %d variables. Invalid variable id %d\n",
@@ -1002,14 +1003,32 @@ ADIOS_VARINFO * adios_read_dimes_inq_var_byid (const ADIOS_FILE *fp, int varid)
 
     vi->varid = varid;
     vi->type = vars[varid].type;
-    vi->ndim = vars[varid].ndims;
-    vi->dims = vars[varid].dims;
     vi->nsteps = 1;
-    vi->value = vars[varid].value;
+
+    /* Copy the dimensions (adios_free_varinfo() will free the copy */
+    vi->ndim = vars[varid].ndims;
+    if (vi->ndim) {
+        vi->dims = (uint64_t *) malloc (vi->ndim*sizeof(uint64_t));
+        memcpy (vi->dims, vars[varid].dims, vi->ndim*sizeof(uint64_t));
+    } else {
+        vi->dims = NULL;
+    }
+
+    /* Copy the value */
+    if (vars[varid].value) {
+        datasize = common_read_type_size(vi->type, vars[varid].value);
+        vi->value = (void *) malloc (datasize);
+        memcpy (vi->value, vars[varid].value, datasize);
+    } else {
+        vi->value = NULL;
+    }
+
     vi->global = 1;
     vi->nblocks = (int *) malloc (sizeof(int));
     vi->nblocks[0] = 1;
     vi->sum_nblocks = vi->nblocks[0];
+    vi->statistics = NULL;
+    vi->blockinfo = NULL;
     
     return vi;
 }
@@ -1030,6 +1049,15 @@ int adios_read_dimes_inq_var_stat (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo
     return 0;
 }
 
+ADIOS_TRANSINFO* adios_read_dimes_inq_var_transinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi)
+{
+    ADIOS_TRANSINFO *trans = malloc(sizeof(ADIOS_TRANSINFO));
+    memset(trans, 0, sizeof(ADIOS_TRANSINFO));
+    trans->transform_type = adios_transform_none;
+    return trans;
+}
+
+
 int adios_read_dimes_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * varinfo)
 {
     /* FIXME: return the actual block decomposition by the writers
@@ -1047,6 +1075,11 @@ int adios_read_dimes_inq_var_blockinfo (const ADIOS_FILE *fp, ADIOS_VARINFO * va
     return 0;
 }
 
+int adios_read_dimes_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti)
+{
+    adios_error(err_operation_not_supported, "DIMES does not yet support transforms: trans_blockinfo.\n");
+    return 0;
+}
 
 static int adios_read_dimes_get_data(const char * varname, enum ADIOS_DATATYPES vartype, 
                                 int version, int rank,
@@ -1265,11 +1298,11 @@ int adios_read_dimes_schedule_read_byid (const ADIOS_FILE * fp,
         r->priv = 0;
         r->next = 0;
         if (ds->req_list == NULL) {
-            list_insert_read_request_tail (&ds->req_list, r);
+            list_append_read_request_list (&ds->req_list, r);
             ds->req_list_tail = ds->req_list;
         } else {
             // just speed up insert directly after the tail
-            list_insert_read_request_next (&ds->req_list_tail, r);
+            list_append_read_request_list (&ds->req_list_tail, r);
         }
     } else {
         free(r);
diff --git a/src/read/read_flexpath.c b/src/read/read_flexpath.c
index a0b052e..a73eb75 100644
--- a/src/read/read_flexpath.c
+++ b/src/read/read_flexpath.c
@@ -1,16 +1,9 @@
 /*
-    read_flexpath.c
-    
-    Originally copied from read_datatap.c
+    read_flexpath.c       
     Goal: to create evpath io connection layer in conjunction with 
     write/adios_flexpath.c
 
 */
-
-
-
-
-
 // system libraries
 #include <stdio.h>
 #include <stdlib.h>
@@ -31,12 +24,18 @@
 // evpath libraries
 #include <ffs.h>
 #include <atl.h>
-#include <gen_thread.h>
+//#include <gen_thread.h>
 #include <evpath.h>
 
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
 // local libraries
 #include "config.h"
 #include "public/adios.h"
+#include "public/adios_types.h"
 #include "public/adios_read_v2.h"
 #include "core/adios_read_hooks.h"
 #include "core/adios_logger.h"
@@ -48,15 +47,18 @@
 #include "dmalloc.h"
 #endif
 
+#define FP_BATCH_SIZE 32
+
 /*
- * Contains start & counts for each dimension for each writer.
+ * Contains start & counts for each dimension for a writer_rank.
  */
 typedef struct _array_displ
 {
     int writer_rank;
     int ndims;
-    int * start;
-    int * count;    
+    uint64_t pos;
+    uint64_t *start;
+    uint64_t *count;    
 }array_displacements;
 
 typedef struct _bridge_info
@@ -70,6 +72,7 @@ typedef struct _bridge_info
     int created;
     int opened;
     int step;
+    int scheduled;
 }bridge_info;
 
 typedef struct _flexpath_var_chunk
@@ -77,42 +80,45 @@ typedef struct _flexpath_var_chunk
     int has_data;
     int rank;
     void *data;
+    void *user_buf;
     uint64_t *local_bounds; // nodims
     uint64_t *global_bounds; // ndims
     uint64_t *global_offsets; // ndims
-    struct _flexpath_var_chunk *next;
 } flexpath_var_chunk, *flexpath_var_chunk_p;
 
-typedef struct _flexpath_var_info
+typedef struct _flexpath_var
 {
     int id;
     char *varname;
     char *varpath;
+
     enum ADIOS_DATATYPES type;
-    //add selector typ
-    uint64_t data_size; // type size, not arrays size
+    uint64_t type_size; // type size, not arrays size
+
     int time_dim; // -1 means no time dimension
-    int ndims;
-    int * dims; // ndims size (if ndims>0)
+    int num_dims;
+    uint64_t *global_dims; // ndims size (if ndims>0)
+    uint64_t *local_dims; // for local arrays
     uint64_t array_size; // not relevant for scalars
+
     int num_chunks;
-    int was_scheduled;
     flexpath_var_chunk *chunks;
+
     int num_displ;
-    array_displacements * displ;
-    const ADIOS_SELECTION * sel;
-    struct _flexpath_var_info *next;
-} flexpath_var_info, *flexpath_var_info_p;
+    array_displacements *displ;
+
+    ADIOS_SELECTION *sel;
+    uint64_t start_position;
+
+    struct _flexpath_var *next;
+} flexpath_var;
 
-typedef struct _flexpath_file_data
+typedef struct _flexpath_reader_file
 {
     char * file_name;
     char * group_name; // assuming one group per file right now.
 
-    EVstone ctrl_stone;
-    EVstone split_stone; // to be added to ctrl_stone
-    EVaction split_action;
-    EVstone data_stone;
+    EVstone stone;
 
     MPI_Comm comm;
     int rank;
@@ -121,144 +127,226 @@ typedef struct _flexpath_file_data
 
     int num_bridges;
     bridge_info *bridges;
-    FMFormat current_format;
-    FMContext context;
-
     int writer_coordinator;
 
     int num_vars;
-    flexpath_var_info * var_list;
-    int num_gp; // for array distribution.
-    int valid_evgroup;
+    flexpath_var * var_list;
+    int num_gp; 
     evgroup * gp;
 
-    char *arr;
-    char *rep_id;
-    int rep_id_len;
-    int id_len;
-
-    int* sendees;
+    int writer_finalized;
+    int last_writer_step;
+    int mystep;
     int num_sendees;
+    int *sendees;
     int ackCondition;    
-} flexpath_file_data;
 
+    int pending_requests;
+    int completed_requests;
+    uint64_t data_read; // for perf measurements.
+    double time_in; // for perf measurements.
+    pthread_mutex_t data_mutex;
+    pthread_cond_t data_condition;
+} flexpath_reader_file;
+
+typedef struct _local_read_data
+{
+    // MPI stuff
+    MPI_Comm fp_comm;
+    int fp_comm_rank;
+    int fp_comm_size;
+
+    // EVPath stuff
+    CManager fp_cm;
+    EVstone stone;
+    atom_t CM_TRANSPORT;
+} flexpath_read_data;
+
+flexpath_read_data* fp_read_data = NULL;
+
+/********** Helper functions. **********/
 
-flexpath_file_data *
-new_flexpath_file_data(const char * fname);
+static double dgettimeofday( void )
+{
+#ifdef HAVE_GETTIMEOFDAY
+    double timestamp;
+    struct timeval now;
+    gettimeofday(&now, NULL);
+    timestamp = now.tv_sec + now.tv_usec* 1.0e-6 ;
+    return timestamp;
+#else
+    return -1;
+#endif
+}
+
+static uint64_t 
+get_timestamp_mili()
+{
+    struct timespec stamp;
+#ifdef __MACH__
+    clock_serv_t cclock;
+    mach_timespec_t mts;
+    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+    clock_get_time(cclock, &mts);
+    mach_port_deallocate(mach_task_self(), cclock);
+    stamp.tv_sec = mts.tv_sec;
+    stamp.tv_nsec = mts.tv_nsec;
+#else
+    clock_gettime(CLOCK_MONOTONIC, &stamp);
+#endif
+    return ((stamp.tv_sec * 1000000000) + stamp.tv_nsec)/1000000;
+}
+
+void build_bridge(bridge_info* bridge) {
+    attr_list contact_list = attr_list_from_string(bridge->contact);
+    if(bridge->created == 0){
+	bridge->bridge_stone =
+	    EVcreate_bridge_action(fp_read_data->fp_cm,
+				   contact_list,
+				   (EVstone)bridge->their_num);
+
+	bridge->flush_source =
+	    EVcreate_submit_handle(fp_read_data->fp_cm,
+				   bridge->bridge_stone,
+				   flush_format_list);
+
+	bridge->var_source =
+	    EVcreate_submit_handle(fp_read_data->fp_cm,
+				   bridge->bridge_stone,
+				   var_format_list);
+
+	bridge->op_source =
+	    EVcreate_submit_handle(fp_read_data->fp_cm,
+				   bridge->bridge_stone,
+				   op_format_list);
+
+	bridge->created = 1;
+    }
+}
+
+void
+free_displacements(array_displacements *displ, int num)
+{
+    if(displ){
+	int i;
+	for(i=0; i<num; i++){
+	    free(displ[i].start);
+	    free(displ[i].count);
+	}
+	free(displ);
+    }
+}
 
-flexpath_var_info*
-new_flexpath_var_info(const char * varname, int id, uint64_t data_size);
+void
+free_evgroup(evgroup *gp)
+{
+    EVreturn_event_buffer(fp_read_data->fp_cm, gp);
+}
 
-flexpath_var_info*
-new_flexpath_var_info(const char * varname, int id, uint64_t data_size)
+flexpath_var*
+new_flexpath_var(const char *varname, int id, uint64_t type_size)
 {
-    flexpath_var_info * var = malloc(sizeof(flexpath_var_info));
+    flexpath_var *var = malloc(sizeof(flexpath_var));
     if(var == NULL){
 	log_error("Error creating new var: %s\n", varname);
-	exit(1);
+	return NULL;
     }
     
+    memset(var, 0, sizeof(flexpath_var));
+    // free this when freeing vars.
     var->varname = strdup(varname);
+    var->time_dim = -1;
     var->id = id;
-    var->data_size = data_size;
-    var->chunks = NULL;
-    var->sel = NULL;
-    var->dims = NULL;
+    var->type_size = type_size;
     var->displ = NULL;
-    var->was_scheduled = 0;    
-    var->time_dim = 0;
-    var->ndims = 0;
-    var->next = NULL;
     return var;
 }
 
-
-flexpath_file_data*
-new_flexpath_file_data(const char * fname)
+flexpath_reader_file*
+new_flexpath_reader_file(const char *fname)
 {
-    flexpath_file_data * fp = malloc(sizeof(flexpath_file_data));
+    flexpath_reader_file * fp = malloc(sizeof(flexpath_reader_file));
     if(fp == NULL){
 	log_error("Cannot create data for new file.\n");
 	exit(1);
     }
+    memset(fp, 0, sizeof(flexpath_reader_file));
     fp->file_name = strdup(fname);
-    fp->group_name = NULL;    
-    fp->var_list = NULL;
-    fp->gp = NULL;
-    fp->bridges = NULL;
-    fp->current_format = NULL;
-    fp->context = NULL;
-    
     fp->writer_coordinator = -1;
-    fp->valid = 0;
-    fp->num_bridges = 0;
-    fp->num_gp = 0;
-    fp->valid_evgroup = 0;
-    fp->num_vars = 0;
-    fp->sendees = NULL;
-    fp->num_sendees = 0;    
-
-    fp->arr = NULL;
-    fp->rep_id = NULL;
-    fp->rep_id_len = 0;
-    fp->id_len = 0;
-    int ackCondition = 0;
+    fp->last_writer_step = -1;
+
+    pthread_mutex_init(&fp->data_mutex, NULL);
+    pthread_cond_init(&fp->data_condition, NULL);
     return fp;        
 }
 
-//flexpath_file_data * file_data_list = NULL;
-
-typedef struct _local_read_data
+enum ADIOS_DATATYPES
+ffs_type_to_adios_type(const char *ffs_type)
 {
-    // MPI stuff
-    MPI_Comm fp_comm;
-    int fp_comm_rank;
-    int fp_comm_size;
-
-    // EVPath stuff
-    CManager fp_cm;
-    EVstone ctrl_stone;
-    EVstone data_stone;
-    atom_t CM_TRANSPORT;
-
-    // server state
-    int fp_server_ready;
-    int num_io_dumps;
-    // TODO: timestep
-
-} flexpath_read_data, *flexpath_read_data_p;
-
-
-static int compare_var_name(const char* varname, const flexpath_var_info *v);
-// this sructure holds all global data for flexpath read  methods
-flexpath_read_data* fp_read_data = NULL;
-//int ackCondition;
-
-#define VAR_BITMAP_SIZE 16
-
-ADIOS_VARINFO*
-convert_file_info(flexpath_var_info * current_var,
-		  ADIOS_VARINFO * v,
-		  const char* varname,
-		  const ADIOS_FILE* gp);
+    if(!strcmp("integer", ffs_type))
+	return adios_integer;
+    else if(!strcmp("float", ffs_type))
+	return adios_real;
+    else if(!strcmp("string", ffs_type))
+	return adios_string;
+    else if(!strcmp("double", ffs_type))
+	return adios_double;
+    else if(!strcmp("char", ffs_type))
+	return adios_byte;
+    else
+	return adios_unknown;
+}
 
-flexpath_var_info *
-find_fp_var(flexpath_var_info * var_list, const char * varname)
+ADIOS_VARINFO* 
+convert_var_info(flexpath_var * fpvar,
+		 ADIOS_VARINFO * v, 
+		 const char* varname,
+		 const ADIOS_FILE *adiosfile)
 {
-    while(var_list){
-	if(!compare_var_name(varname, var_list)){
-	    return var_list;
+    int i;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;    
+    v->type = fpvar->type;
+    v->ndim = fpvar->num_dims;
+    // needs to change. Has to get information from write.
+    v->nsteps = 1;
+    v->nblocks = malloc(sizeof(int)*v->nsteps);
+    v->sum_nblocks = 1;    
+    v->nblocks[0] = 1;
+    v->statistics = NULL;
+    v->blockinfo = NULL;
+
+    if(v->ndim == 0){    
+	int value_size = fpvar->type_size;	
+	v->value = malloc(value_size);
+	if(!v->value) {
+	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
+	    return NULL;
+	}
+	flexpath_var_chunk * chunk = &fpvar->chunks[0];
+	memcpy(v->value, chunk->data, value_size);
+	v->global = 0;	
+    }else{ // arrays
+	v->dims = (uint64_t*)malloc(v->ndim * sizeof(uint64_t));
+	if(!v->dims) {
+	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
+	    return NULL;
+	}
+	// broken.  fix.
+	int cpysize = fpvar->num_dims*sizeof(uint64_t);
+	if(fpvar->global_dims){
+	    v->global = 1;
+	    memcpy(v->dims, fpvar->global_dims, cpysize);
+	}
+	else{
+	    v->global = 0;
 	}
-	else
-	    var_list = var_list->next;
     }
-    return NULL;
+    return v;
 }
 
-// compare used-providd varname with the full path name of variable v
-// return zero if matches and non-zero otherwise
+// compare used-provided varname with the full path name of variable
 static int
-compare_var_name (const char *varname, const flexpath_var_info *v)
+compare_var_name (const char *varname, const flexpath_var *v)
 {
     if (varname[0] == '/') { // varname is full path
         char fullpath[256];
@@ -275,20 +363,31 @@ compare_var_name (const char *varname, const flexpath_var_info *v)
     }
 }
 
+flexpath_var *
+find_fp_var(flexpath_var * var_list, const char * varname)
+{
+    while(var_list){
+	if(!compare_var_name(varname, var_list)){
+	    return var_list;
+	}
+	var_list = var_list->next;
+    }
+    return NULL;
+}
+
 global_var* 
-find_gbl_var(global_var * vars, char * name, int num_vars)
+find_gbl_var(global_var *vars, const char *name, int num_vars)
 {
-    global_var * retvar = NULL;
     int i;
     for(i=0; i<num_vars; i++){
 	if(!strcmp(vars[i].name, name))
 	    return &vars[i];
     }
-    return retvar;
+    return NULL;
 }
 
-static FMField
-*find_field (const char *name, const FMFieldList flist)
+static FMField*
+find_field_by_name (const char *name, const FMFieldList flist)
 {
     FMField *f = flist;
     while (f->field_name != NULL)
@@ -301,159 +400,446 @@ static FMField
     return NULL;
 }
 
+static uint64_t
+calc_ffspacket_size(FMField *f, attr_list attrs, void *buffer)
+{
+    uint64_t size = 0;
+    while(f->field_name){
+        char atom_name[200] = "";
 
-
-static int op_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
-    op_msg* msg = (op_msg*)vevent;    
-    ADIOS_FILE *adiosfile = (ADIOS_FILE*)client_data;
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
-    if(msg->type==2) {
-        CMCondition_signal(fp_read_data->fp_cm, msg->condition);
-        //ackCondition = CMCondition_get(fp_read_data->fp_cm, NULL);
+        strcat(atom_name, FP_NDIMS_ATTR_NAME);
+        strcat(atom_name, "_");
+        strcat(atom_name, f->field_name);
+        int num_dims = 0;	
+        get_int_attr(attrs, attr_atom_from_string(atom_name), &num_dims);
+	if(num_dims == 0){
+	    size += (uint64_t)f->field_size;
+	}
+	else{
+	    int i;
+	    uint64_t tmpsize = (uint64_t)f->field_size;
+	    for(i=0; i<num_dims; i++){
+		char *dim;
+		char atom_name[200] ="";
+		strcat(atom_name, FP_DIM_ATTR_NAME);
+		strcat(atom_name, "_");
+		strcat(atom_name, f->field_name);
+		strcat(atom_name, "_");
+		char dim_num[10] = "";
+		sprintf(dim_num, "%d", i+1);
+		strcat(atom_name, dim_num);
+		get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
+
+		FMField *temp_field = find_field_by_name(dim, f);
+		uint64_t *temp_val = get_FMfieldAddr_by_name(temp_field,
+							     temp_field->field_name,
+							     buffer);		
+		uint64_t dimval = *temp_val;
+		tmpsize *= dimval;
+	    }
+	    size += tmpsize;
+	}
+	f++;
     }
-    if(msg->type == 4){	
-	adios_errno = err_end_of_stream;
-	CMCondition_signal(fp_read_data->fp_cm, msg->condition);
-    }       
-    return 0;
+    return size;
 }
 
 /*
- * Should only be invoked from rank 0.  might need a better way to go about this.
+ * Finds the array displacements for a writer identified by its rank.
  */
-static int
-group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
-{
-    //EVtake_event_buffer(fp_read_data->fp_cm, vevent);
-    evgroup * msg = (evgroup*)vevent;
-    ADIOS_FILE *adiosfile = client_data;
-    flexpath_file_data * fp = (flexpath_file_data*)adiosfile->fh;
-    fp->gp = msg;
-    fp->valid_evgroup = 1;
-    global_var * vars = msg->vars;
-    int num_vars = msg->num_vars;
-    CMCondition_signal(fp_read_data->fp_cm, msg->condition);    
-    return 0;
+array_displacements*
+find_displacement(array_displacements* list, int rank, int num_displ){
+    int i;
+    for(i=0; i<num_displ; i++){
+	if(list[i].writer_rank == rank)
+	    return &list[i];	
+    }
+    return NULL;
+}
 
+uint64_t
+linearize(uint64_t *sizes, int ndim)
+{
+    int size = 1;
+    int i;
+    for(i = 0; i<ndim - 1; i++){
+	size *= sizes[i];
+    }   
+    return size;
 }
 
 
-void 
-print_int_arr(char * tag, int * arr, int count)
+uint64_t
+copyarray(
+    uint64_t *sizes, 
+    uint64_t *sel_start, 
+    uint64_t *sel_count, 
+    int ndim,
+    int elem_size,
+    int writer_pos,
+    char *writer_array,
+    char *reader_array)
 {
-    int i;
-    log_debug_cont("%s: ", tag);
-    for(i=0; i<count; i++){
-	log_debug_cont("%d ", arr[i]);
+    if(ndim == 1){
+	int start = elem_size * (writer_pos + sel_start[ndim-1]);
+	int end = (start + (elem_size)*(sel_count[ndim-1]));
+	memcpy(reader_array, writer_array + start, end-start);
+	return end-start;
+    }
+    else{
+	int end = sel_start[ndim-1] + sel_count[ndim-1];
+	int i;
+	int amt_copied = 0;
+	for(i = sel_start[ndim-1]; i<end; i++){
+	    int pos = linearize(sizes, ndim);    
+	    pos *=i;    
+	    amt_copied += copyarray(sizes, sel_start, sel_count, ndim-1,
+				    elem_size, writer_pos+pos, writer_array, 
+				    reader_array+amt_copied);
+	}
+	return amt_copied;
     }
-    log_debug("\n");
 }
 
 array_displacements*
-find_displacement(array_displacements* list, int rank, int num_displ){
+get_writer_displacements(
+    int writer_rank, 
+    const ADIOS_SELECTION * sel, 
+    global_var* gvar,
+    uint64_t *size)
+{
+    int ndims = sel->u.bb.ndim;
+    //where do I free these?
+    array_displacements *displ = malloc(sizeof(array_displacements));
+    displ->writer_rank = writer_rank;
+
+    displ->start = malloc(sizeof(uint64_t) * ndims);
+    displ->count = malloc(sizeof(uint64_t) * ndims);  
+    memset(displ->start, 0, sizeof(uint64_t) * ndims);
+    memset(displ->count, 0, sizeof(uint64_t) * ndims);
+
+    displ->ndims = ndims;
+    uint64_t *offsets = gvar->offsets[0].local_offsets;
+    uint64_t *local_dims = gvar->offsets[0].local_dimensions;
+    uint64_t pos = writer_rank * gvar->offsets[0].offsets_per_rank;
+
     int i;
-    for(i=0; i<num_displ; i++){
-	if(list[i].writer_rank == rank)
-	    return &list[i];	
+    int _size = 1;
+    for(i=0; i<ndims; i++){	
+	if(sel->u.bb.start[i] >= offsets[pos+i]){
+	    int start = sel->u.bb.start[i] - offsets[pos+i];
+	    displ->start[i] = start;
+	}
+	if((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) <= 
+	   (offsets[pos+i] + local_dims[pos+i] - 1)){
+	    int count = ((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) - 
+			 offsets[pos+i]) - displ->start[i] + 1;
+	    displ->count[i] = count;
+
+	    
+	}else{
+	    int count = (local_dims[pos+i] - 1) - displ->start[i] + 1;
+	    displ->count[i] = count;
+	}
+	_size *= displ->count[i];
     }
-    return NULL;
+    *size = _size;
+    return displ;
 }
 
 int
-linearize_displ(int * offset, int * sizes, int ndim, int data_size)
+need_writer(
+    flexpath_reader_file *fp, 
+    int writer, 
+    const ADIOS_SELECTION* sel, 
+    evgroup_ptr gp, 
+    char* varname) 
+{    
+    //select var from group
+    global_var * gvar = find_gbl_var(gp->vars, varname, gp->num_vars);
+
+    //for each dimension
+    int i=0;
+    offset_struct var_offsets = gvar->offsets[0];
+    for(i=0; i< var_offsets.offsets_per_rank; i++){      
+	int pos = writer*(var_offsets.offsets_per_rank) + i;
+
+        uint64_t sel_offset = sel->u.bb.start[i];
+        uint64_t sel_size = sel->u.bb.count[i];        
+	
+        uint64_t rank_offset = var_offsets.local_offsets[pos];
+        uint64_t rank_size = var_offsets.local_dimensions[pos];        
+	
+        if((rank_offset <= sel_offset) && (rank_offset + rank_size - 1 >=sel_offset)) {
+	     log_debug("matched overlap type 1\n");
+        }
+
+        else if((rank_offset <= sel_offset + sel_size - 1) && \
+		(rank_offset+rank_size>=sel_offset+sel_size-1)) {
+        }else if((sel_offset <= rank_offset) && (rank_offset+rank_size<= sel_offset+sel_size-1)) {
+        }else {
+            return 0;
+        }
+    }
+    return 1;
+}
+
+void
+free_fmstructdesclist(FMStructDescList struct_list)
 {
-    //print_int_arr("linearize_displ offsets", offset, ndim);
-    //print_int_arr("linearize_displ sizes", sizes, ndim);
-    int i;
-    int retval = 0;
-    for(i = 0; i<ndim - 1; i++){
-	retval += (offset[i] * sizes[i+1])*data_size;       
+    FMField *f = struct_list[0].field_list;
+    
+    //cant free field_name because it's const.
+    /* FMField *temp = f; */
+    /* while(temp->field_name){ */
+    /* 	free(temp->field_name); */
+    /* 	temp++; */
+    /* } */
+    free(f);   
+    free(struct_list[0].opt_info);
+    free(struct_list);   
+}
+
+int
+get_ndims_attr(const char *field_name, attr_list attrs)
+{
+    char atom_name[200] = "";
+    strcat(atom_name, FP_NDIMS_ATTR_NAME);
+    strcat(atom_name, "_");
+    strcat(atom_name, field_name);
+    int num_dims;
+    atom_t atm = attr_atom_from_string(atom_name);
+    get_int_attr(attrs, atm, &num_dims);
+    return num_dims;
+}
+
+flexpath_var*
+setup_flexpath_vars(FMField *f, int *num)
+{
+    flexpath_var *vars = NULL;
+    int var_count = 0;
+
+    while(f->field_name != NULL){
+	flexpath_var *curr_var = new_flexpath_var(f->field_name,
+						  var_count, 
+						  f->field_size);
+	curr_var->num_chunks = 1;
+	curr_var->chunks =  malloc(sizeof(flexpath_var_chunk)*curr_var->num_chunks);
+	memset(curr_var->chunks, 0, sizeof(flexpath_var_chunk)*curr_var->num_chunks);
+	curr_var->sel = NULL;
+	curr_var->type = ffs_type_to_adios_type(f->field_type);
+	flexpath_var *temp = vars;
+	curr_var->next = temp;
+	vars = curr_var;
+	var_count++;
+	f++;
+    }
+    *num = var_count;
+    return vars;
+}
+
+/*****************Messages to writer procs**********************/
+
+void
+send_open_msg(flexpath_reader_file *fp, int destination)
+{
+    if(!fp->bridges[destination].created){
+	build_bridge(&(fp->bridges[destination]));
+    }
+    op_msg msg;
+    msg.process_id = fp->rank;
+    msg.file_name = fp->file_name;
+    msg.step = fp->mystep;
+    msg.type = OPEN_MSG;
+    int cond = CMCondition_get(fp_read_data->fp_cm, NULL);
+    msg.condition = cond;
+
+    EVsubmit(fp->bridges[destination].op_source, &msg, NULL);    
+    CMCondition_wait(fp_read_data->fp_cm, cond);
+    fp->bridges[destination].opened = 1;
+}
+
+void
+send_close_msg(flexpath_reader_file *fp, int destination)
+{
+    if(!fp->bridges[destination].created){
+	build_bridge(&(fp->bridges[destination]));
     }
-    retval+=offset[ndim-1]*data_size;
-    return retval;
+    op_msg msg;
+    msg.process_id = fp->rank;
+    msg.file_name = fp->file_name;
+    msg.step = fp->mystep;
+    msg.type = CLOSE_MSG;
+    //msg.condition = -1;
+    int cond = CMCondition_get(fp_read_data->fp_cm, NULL);
+    msg.condition = cond;
+    EVsubmit(fp->bridges[destination].op_source, &msg, NULL);  
+    CMCondition_wait(fp_read_data->fp_cm, cond);  
+    fp->bridges[destination].opened = 0;
 }
 
+void
+send_flush_msg(flexpath_reader_file *fp, int destination, Flush_type type, int use_condition)
+{
+    Flush_msg msg;
+    msg.type = type;
+    msg.process_id = fp->rank;
+    msg.id = fp->mystep;
+
+    if(use_condition)
+	msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
+    else
+	msg.condition = -1;
+    // maybe check to see if the bridge is create first.
+    EVsubmit(fp->bridges[destination].flush_source, &msg, NULL);
+    if(use_condition){
+	CMCondition_wait(fp_read_data->fp_cm, msg.condition);
+    }
+}
 
 void 
-copyoffsets(int dim, // dimension index
-	    int ndims, // number of dimensions
-	    int data_size, // data size
-	    int* disp_start, // start array from array_displacements struct
-	    int* disp_count, // count array from array_displacements struct
-	    int* writer_count, // local dimensions from all writers; from offset_struct
-	    uint64_t* reader_count, // the count field from reader's selector
-	    char* from, 
-	    char* to) 
+send_var_message(flexpath_reader_file *fp, int destination, char *varname)
 {
-    if(dim==ndims-1) {
-        int* reader_count_copy = (int*)malloc(sizeof(int)*ndims);
-        int i=0;
-        for(i=0; i<ndims; i++){
-            reader_count_copy[i]=reader_count[i];
+        int i = 0;
+        int found = 0;
+        for(i=0; i<fp->num_sendees; i++) {
+            if(fp->sendees[i]==destination) {
+                found=1;
+                break;
+            }
         }
-        int s = linearize_displ(disp_start, writer_count, ndims, data_size);
-        int e = linearize_displ(disp_start, reader_count_copy, ndims, data_size);
-	free(reader_count_copy);
-        memcpy(to, from+s,  data_size*disp_count[ndims-1]);
-    } else {
-        int i;
-        for(i=0; i<disp_count[dim]; i++) {
-            int* disp_startcpy = malloc(sizeof(int)*ndims);
-            memcpy(disp_startcpy, disp_start, sizeof(int)*ndims);
-            disp_startcpy[dim] += i;
-            copyoffsets(dim+1, 
-			ndims, 
-			data_size, 
-			disp_start,
-			disp_count, 
-			writer_count, 
-			reader_count, 
-			from, 
-			to);
+        if(!found) {
+            fp->num_sendees+=1;
+            fp->sendees=realloc(fp->sendees, fp->num_sendees*sizeof(int));
+            fp->sendees[fp->num_sendees-1] = destination;
         }
+        if(!fp->bridges[destination].created) {
+            build_bridge(&(fp->bridges[destination]));
+	}
+	if(!fp->bridges[destination].opened){
+	    fp->bridges[destination].opened = 1;
+	    send_open_msg(fp, destination);
+	}
+	Var_msg var;
+	var.process_id = fp->rank;
+	var.var_name = varname;
+	EVsubmit(fp->bridges[destination].var_source, &var, NULL);    
+}
+
+/********** EVPath Handlers **********/
+
+static int
+update_step_msg_handler(
+    CManager cm,
+    void *vevent,
+    void *client_data,
+    attr_list attrs)
+{
+    update_step_msg *msg = (update_step_msg*)vevent;
+    ADIOS_FILE *adiosfile = (ADIOS_FILE*)client_data;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;    
+
+    fp->last_writer_step = msg->step;
+    fp->writer_finalized = msg->finalized;
+    adiosfile->last_step = msg->step;
+    CMCondition_signal(fp_read_data->fp_cm, msg->condition);
+    return 0;
+}
+
+static int 
+op_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs) {
+    op_msg* msg = (op_msg*)vevent;    
+    ADIOS_FILE *adiosfile = (ADIOS_FILE*)client_data;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    if(msg->type==ACK_MSG) {
+	if(msg->condition != -1){
+	    CMCondition_signal(fp_read_data->fp_cm, msg->condition);
+	}
+        //ackCondition = CMCondition_get(fp_read_data->fp_cm, NULL);
     }
+    if(msg->type == EOS_MSG){	
+	adios_errno = err_end_of_stream;
+	CMCondition_signal(fp_read_data->fp_cm, msg->condition);
+    }       
+    return 0;
 }
 
-/*
- * Will replace data handler once everything is figured out and working wrt conditions and the fm
- * get/set api.
- */
+static int
+group_msg_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
+{
+    EVtake_event_buffer(fp_read_data->fp_cm, vevent);
+    evgroup *msg = (evgroup*)vevent;
+    ADIOS_FILE *adiosfile = client_data;
+    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    fp->gp = msg;
+    int i;
+    for(i = 0; i<msg->num_vars; i++){
+	global_var *gblvar = &msg->vars[i];
+	flexpath_var *fpvar = find_fp_var(fp->var_list, gblvar->name);
+	if(fpvar){
+	    offset_struct *offset = &gblvar->offsets[0];
+	    uint64_t *local_dimensions = offset->local_dimensions;
+	    uint64_t *local_offsets = offset->local_offsets;
+	    uint64_t *global_dimensions = offset->global_dimensions;
+
+	    fpvar->num_dims = offset->offsets_per_rank;
+	    fpvar->global_dims = malloc(sizeof(uint64_t)*fpvar->num_dims);
+	    memcpy(fpvar->global_dims, global_dimensions, sizeof(uint64_t)*fpvar->num_dims);
+	}else{
+	    adios_error(err_corrupted_variable, 
+			"Mismatch between global variables and variables specified %s.",
+			gblvar->name);
+	    return err_corrupted_variable;
+	}
+    }
+    CMCondition_signal(fp_read_data->fp_cm, msg->condition);    
+    return 0;
+}
+
+
 static int
 raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list attrs)
 {
     ADIOS_FILE *adiosfile = client_data;
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+
+    double data_end = dgettimeofday();
+    if(fp->time_in == 0.00)
+	fp->time_in = data_end; // used for perf measurements only
+
+    int condition;
+    int writer_rank;          
+    int flush_id;
+    double data_start;
+    get_double_attr(attrs, attr_atom_from_string("fp_starttime"), &data_start);
+    get_int_attr(attrs, attr_atom_from_string("fp_dst_condition"), &condition);   
+    get_int_attr(attrs, attr_atom_from_string(FP_RANK_ATTR_NAME), &writer_rank); 
+    get_int_attr(attrs, attr_atom_from_string("fp_flush_id"), &flush_id);
+
+
+    double format_start = dgettimeofday();
+
     FMContext context = CMget_FMcontext(cm);
     void *base_data = FMheader_skip(context, vevent);
     FMFormat format = FMformat_from_ID(context, vevent);  
     
+    // copy //FMfree_struct_desc_list call
     FMStructDescList struct_list = 
 	FMcopy_struct_list(format_list_of_FMFormat(format));
     FMField *f = struct_list[0].field_list;
 
-    // setting up initial vars from the format list that comes along with the
-    // message. Message contains both an FFS description and the data.
+#if 0
+    uint64_t packet_size = calc_ffspacket_size(f, attrs, base_data);
+    fp->data_read += packet_size;
+#endif
+    /* setting up initial vars from the format list that comes along with the
+       message. Message contains both an FFS description and the data. */
     if(fp->num_vars == 0){
 	int var_count = 0;
-	int i=0;       
-	while(f->field_name != NULL){           
-	    flexpath_var_info * curr_var = new_flexpath_var_info(f->field_name, 
-								 var_count, 
-								 f->field_size);
-	    curr_var->num_chunks = 1;
-	    curr_var->chunks = malloc(sizeof(flexpath_var_chunk)*curr_var->num_chunks);
-	    memset(curr_var->chunks, 0, sizeof(flexpath_var_chunk)*curr_var->num_chunks);
-	    curr_var->sel = NULL;
-	    flexpath_var_info * temp = fp->var_list;	
-	    curr_var->next = temp;
-	    fp->var_list = curr_var;
-	    var_count++;
-	    f++;
-	}
-	
+	fp->var_list = setup_flexpath_vars(f, &var_count);
+		
 	adiosfile->var_namelist = malloc(var_count * sizeof(char *));
-	f = struct_list[0].field_list;  // f is top-level field list 
-	
+	int i = 0;
 	while(f->field_name != NULL) {
 	    adiosfile->var_namelist[i++] = strdup(f->field_name);
 	    f++;
@@ -462,153 +848,143 @@ raw_handler(CManager cm, void *vevent, int len, void *client_data, attr_list att
 	fp->num_vars = var_count;
     }
 
-    int condition;
-    int rank;          
-    get_int_attr(attrs, attr_atom_from_string("fp_dst_condition"), &condition);   
-    get_int_attr(attrs, attr_atom_from_string(FP_RANK_ATTR_NAME), &rank); 
-    fp->current_format = format;
     f = struct_list[0].field_list;
-    char * curr_offset = NULL;
-    int i = 0, l = 0, j = 0;
+    char *curr_offset = NULL;
 
     while(f->field_name){
         char atom_name[200] = "";
-    	flexpath_var_info * var = find_fp_var(fp->var_list, strdup(f->field_name));
-	
+    	flexpath_var *var = find_fp_var(fp->var_list, f->field_name);	
+
     	if(!var){
     	    adios_error(err_file_open_error,
     			"file not opened correctly.  var does not match format.\n");
     	    return err_file_open_error;
     	}
-        strcat(atom_name, f->field_name);
-        strcat(atom_name, "_");
-        strcat(atom_name, FP_NDIMS_ATTR_NAME);
-        int num_dims;
-        int i;
-        get_int_attr(attrs, attr_atom_from_string(strdup(atom_name)), &num_dims);
-    	flexpath_var_chunk * curr_chunk = &var->chunks[0];
-    	// scalar
-        fp_log("SEL","inquiring num_dims %d of var %s\n", num_dims, f->field_name);
-    	if(num_dims == 0){
-	    
-    	    curr_chunk->global_offsets = NULL;
-    	    curr_chunk->global_bounds = NULL;
-    	    curr_chunk->local_bounds = NULL;
 
-	    void *tmp_data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
-	    if(var->sel){
-		memcpy(var->chunks[0].data, tmp_data, f->field_size);
-	    }
-	    else{
-		var->chunks[0].data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
-	    }
-    	    curr_chunk->has_data = 1;
-    	    // else it's an array
-    	}else{
-            if(!var->sel){// var hasn't been scheduled yet.       
-    		fp_log("SEL", "Variable has not yet been scheduled.  Cannot recieve data for it.\n");
-    	    }
-    	    else if(var->sel->type == ADIOS_SELECTION_WRITEBLOCK){
-    		var->ndims = num_dims;
-    		var->dims = malloc(sizeof(int)*num_dims);
-    		if(var->was_scheduled == 1){
-    		    var->array_size = var->data_size;
-    		    for(i=0; i<num_dims; i++){
-    			char *dim;
-    			atom_name[0] ='\0';
-    			strcat(atom_name, f->field_name);
-    			strcat(atom_name, "_");
-    			strcat(atom_name, FP_DIM_ATTR_NAME);
-    			strcat(atom_name, "_");
-    			char dim_num[10] = "";
-    			sprintf(dim_num, "%d", i+1);
-    			strcat(atom_name, dim_num);
-    			get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
-    			FMField * temp_f = find_field(dim, f);
-    			if(!temp_f){
-    			    adios_error(err_invalid_varname,
-    					"Could not find fieldname: %s\n",
-    					dim);
-    			}
-    			else{    			    
-    			    int *temp_data = get_FMfieldAddr_by_name(temp_f,
-    								     temp_f->field_name,
-    								     base_data);
-			    var->dims[i] = *temp_data;
-    			    var->array_size = var->array_size * var->dims[i];
-    			}
-    		    }    	       
-		    void *arrays_data  = get_FMPtrField_by_name(f, f->field_name, base_data, 1);
-		    memcpy(var->chunks[0].data, arrays_data, var->array_size);
-    		}
-
-    	    }
-    	    else if(var->sel->type == ADIOS_SELECTION_BOUNDINGBOX){
-    		int i;
-                global_var* gv = find_gbl_var(fp->gp->vars,
-    					      var->varname,
-    					      fp->gp->num_vars);
-                int * writer_count = gv->offsets[0].local_dimensions;
-                uint64_t * reader_count = var->sel->u.bb.count;
-    		array_displacements * disp = find_displacement(var->displ,
-    							       rank,
-    							       var->num_displ);
-		
-		void *aptr8 = get_FMPtrField_by_name(f, f->field_name, base_data, 1);
-
-    		//double * temp = (double*)curr_offset;
-		log_debug("first call to copyoffsets\n");
-		log_debug("dim: %d\n", 0);
-		log_debug("ndims: %d\n", disp->ndims);
-		log_debug("data_size: %d\n", f->field_size);
-
-		log_debug_cont("disp_start[]: ");
-		int k;
-		for(k=0; k<disp->ndims; k++){
-		    log_debug_cont("%d ", disp->start[k]);
-		}
-		log_debug("\n");
+	int num_dims = get_ndims_attr(f->field_name, attrs);
+    	var->num_dims = num_dims;
 
-		log_debug("disp_count[]: ");
-		for(k=0; k<disp->ndims; k++){
-		    log_debug_cont("%d ", disp->count[k]);
-		}
-		log_debug("\n");
+	flexpath_var_chunk *curr_chunk = &var->chunks[0];
 
-		log_debug("writer_count[]: ");
-		for(k=0; k<disp->ndims; k++){
-		    log_debug_cont("%d ", writer_count[k]);
+	// has the var been scheduled?
+	if(var->sel){
+	    if(var->sel->type == ADIOS_SELECTION_WRITEBLOCK){
+		if(num_dims == 0){ // writeblock selection for scalar
+		    if(var->sel->u.block.index == writer_rank){
+			void *tmp_data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
+			memcpy(var->chunks[0].user_buf, tmp_data, f->field_size);
+		    }
 		}
-		log_debug("\n");
-		
-		log_debug("reader_count[]: ");
-		for(k=0; k<disp->ndims; k++){
-		    log_debug_cont("%d ", (int)reader_count[k]);
+		else { // writeblock selection for arrays
+		    /* if(var->num_dims == 0){ */
+		    /* 	var->global_dims = malloc(sizeof(uint64_t)*num_dims); */
+		    /* } */
+		    if(var->sel->u.block.index == writer_rank){
+			var->array_size = var->type_size;
+			int i;
+			for(i=0; i<num_dims; i++){
+			    char *dim;
+			    atom_name[0] ='\0';
+			    strcat(atom_name, FP_DIM_ATTR_NAME);
+			    strcat(atom_name, "_");
+			    strcat(atom_name, f->field_name);
+			    strcat(atom_name, "_");
+			    char dim_num[10] = "";
+			    sprintf(dim_num, "%d", i+1);
+			    strcat(atom_name, dim_num);
+			    get_string_attr(attrs, attr_atom_from_string(atom_name), &dim);
+	
+			    FMField *temp_field = find_field_by_name(dim, f);
+			    if(!temp_field){
+				adios_error(err_corrupted_variable,
+					    "Could not find fieldname: %s\n",
+					    dim);
+			    }
+			    else{    			    
+				int *temp_data = get_FMfieldAddr_by_name(temp_field,
+									 temp_field->field_name,
+									 base_data);			    
+				uint64_t dim = (uint64_t)(*temp_data);
+				var->array_size = var->array_size * dim;
+			    }
+			}    	       
+			void *arrays_data  = get_FMPtrField_by_name(f, f->field_name, base_data, 1);
+			memcpy(var->chunks[0].user_buf, arrays_data, var->array_size);
+		    }
 		}
-
-                copyoffsets(0,
-    			    disp->ndims,
-    			    f->field_size,
-    			    disp->start,
-    			    disp->count,
-    			    writer_count,
-    			    reader_count,
-    			    (char*)aptr8,
-    			    (char*)var->chunks[0].data);
-    	    }
-    	}
-        j++;
+	    }
+	    else if(var->sel->type == ADIOS_SELECTION_BOUNDINGBOX){
+		if(num_dims == 0){ // scalars; throw error
+		    adios_error(err_offset_required, 
+				"Only scalars can be scheduled with write_block selection.\n");
+		}
+		else{ // arrays
+		    int i;
+		    global_var *gv = find_gbl_var(fp->gp->vars,
+						  var->varname,
+						  fp->gp->num_vars);                
+		    array_displacements * disp = find_displacement(var->displ,
+								   writer_rank,
+								   var->num_displ);
+		    if(disp){ // does this writer hold a chunk we've asked for, for this var?
+			uint64_t *temp = gv->offsets[0].local_dimensions;
+			int offsets_per_rank = gv->offsets[0].offsets_per_rank;
+			uint64_t *writer_sizes = &temp[offsets_per_rank * writer_rank];
+			uint64_t *sel_start = disp->start;
+			uint64_t *sel_count = disp->count;
+	
+			char *writer_array = (char*)get_FMPtrField_by_name(f, 
+									   f->field_name, 
+									   base_data, 1);
+			char *reader_array = (char*)var->chunks[0].user_buf;
+			uint64_t reader_start_pos = disp->pos;
+
+			var->start_position += copyarray(writer_sizes,
+							 sel_start,
+							 sel_count,
+							 disp->ndims,
+							 f->field_size,
+							 0,
+							 writer_array,
+							 reader_array+reader_start_pos);		    
+		    }
+		}
+	    }
+	}
+	else { //var has not been scheduled; 
+	    if(num_dims == 0){ // only worry about scalars		
+		flexpath_var_chunk *chunk = &var->chunks[0];
+		if(!chunk->has_data){
+		    void *tmp_data = get_FMfieldAddr_by_name(f, f->field_name, base_data);
+		    chunk->data = malloc(f->field_size);
+		    memcpy(chunk->data, tmp_data, f->field_size);	
+		    chunk->has_data = 1;
+		}
+	    }
+	}
         f++;
     }
-    CMCondition_signal(fp_read_data->fp_cm, condition);
+ 
+    if(condition == -1){
+	fp->completed_requests++;
+	if(fp->completed_requests == fp->pending_requests){
+	    pthread_mutex_lock(&fp->data_mutex);
+	    pthread_cond_signal(&fp->data_condition);
+	    pthread_mutex_unlock(&fp->data_mutex);
+	}
+    }
+    else{
+	CMCondition_signal(fp_read_data->fp_cm, condition);
+    }
+
+    free_fmstructdesclist(struct_list);
     return 0; 
 }
 
+/********** Core ADIOS Read functions. **********/
+
 /*
- * Initializes flexpath read structures for a client read
- * - malloc space for global values
- * - store reference to MPI_Comm and get MPI information
- * - store reference to a new evpath connection manager instance
+ * Gathers basic MPI information; sets up reader CM.
  */
 int
 adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
@@ -631,12 +1007,11 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
     MPI_Comm_size(fp_read_data->fp_comm, &(fp_read_data->fp_comm_size));
     MPI_Comm_rank(fp_read_data->fp_comm, &(fp_read_data->fp_comm_rank));
 
-    // setup connection manager
-    gen_pthread_init();
     fp_read_data->fp_cm = CManager_create();
     if(transport == NULL){
 	if(CMlisten(fp_read_data->fp_cm) == 0) {
-	    log_error( "Flexpath ERROR: unable to initialize connection manager.\n");
+	    fprintf(stderr, "Flexpath ERROR: reader %d unable to initialize connection manager.\n",
+		fp_read_data->fp_comm_rank);
 	}
     }else{
 	listen_list = create_attr_list();
@@ -644,39 +1019,14 @@ adios_read_flexpath_init_method (MPI_Comm comm, PairStruct* params)
 		 (attr_value)strdup(transport));
 	CMlisten_specific(fp_read_data->fp_cm, listen_list);
     }
-    if(CMfork_comm_thread(fp_read_data->fp_cm)) {/*log_debug( "forked\n");*/}
+    int forked = CMfork_comm_thread(fp_read_data->fp_cm);
+    if(!forked) {
+	fprintf(stderr, "reader %d failed to fork comm_thread.\n", fp_read_data->fp_comm_rank);
+	/*log_debug( "forked\n");*/
+    }
     return 0;
 }
 
-
-void build_bridge(bridge_info* bridge) {
-    attr_list contact_list = attr_list_from_string(bridge->contact);
-
-    bridge->bridge_stone =
-        EVcreate_bridge_action(fp_read_data->fp_cm,
-            contact_list,
-            (EVstone)bridge->their_num);
-
-    bridge->flush_source =
-        EVcreate_submit_handle(fp_read_data->fp_cm,
-            bridge->bridge_stone,
-            flush_format_list);
-
-    bridge->var_source =
-	EVcreate_submit_handle(fp_read_data->fp_cm,
-	    bridge->bridge_stone,
-	    var_format_list);
-
-    bridge->op_source =
-	EVcreate_submit_handle(fp_read_data->fp_cm,
-	    bridge->bridge_stone,
-	    op_format_list);
-
-    bridge->created = 1;
-
-}
-
-
 ADIOS_FILE*
 adios_read_flexpath_open_file(const char * fname, MPI_Comm comm)
 {
@@ -700,40 +1050,55 @@ adios_read_flexpath_open_file(const char * fname, MPI_Comm comm)
  */
 ADIOS_FILE*
 adios_read_flexpath_open(const char * fname,
-				MPI_Comm comm,
-                                enum ADIOS_LOCKMODE lock_mode,
-				float timeout_sec)
+			 MPI_Comm comm,
+			 enum ADIOS_LOCKMODE lock_mode,
+			 float timeout_sec)
 {
+    fp_log("FUNC", "entering flexpath_open\n");
     ADIOS_FILE *adiosfile = malloc(sizeof(ADIOS_FILE));        
     if(!adiosfile){
-	adios_error (err_no_memory, "Cannot allocate memory for file info.\n");
+	adios_error (err_no_memory, 
+		     "Cannot allocate memory for file info.\n");
 	return NULL;
     }    
     
-    flexpath_file_data *fp = new_flexpath_file_data(fname);
-    fp->ackCondition = CMCondition_get(fp_read_data->fp_cm, NULL);
+    flexpath_reader_file *fp = new_flexpath_reader_file(fname);
 	
     adios_errno = 0;
-    fp->data_stone = EValloc_stone(fp_read_data->fp_cm);	
+    fp->stone = EValloc_stone(fp_read_data->fp_cm);	
     fp->comm = comm;
 
     MPI_Comm_size(fp->comm, &(fp->size));
     MPI_Comm_rank(fp->comm, &(fp->rank));
+
     EVassoc_terminal_action(fp_read_data->fp_cm,
-			    fp->data_stone,
+			    fp->stone,
 			    op_format_list,
 			    op_msg_handler,
 			    adiosfile);       
 
     EVassoc_terminal_action(fp_read_data->fp_cm,
-			    fp->data_stone,
+			    fp->stone,
+			    update_step_msg_format_list,
+			    update_step_msg_handler,
+			    adiosfile);       
+
+
+    EVassoc_terminal_action(fp_read_data->fp_cm,
+			    fp->stone,
 			    evgroup_format_list,
 			    group_msg_handler,
 			    adiosfile);
+
     EVassoc_raw_terminal_action(fp_read_data->fp_cm,
-				fp->data_stone,
+				fp->stone,
 				raw_handler,
-				(void*)adiosfile);
+				adiosfile);
+
+    /* Gather the contact info from the other readers
+       and write it to a file. Create a ready file so
+       that the writer knows it can parse this file. */
+    double setup_start = dgettimeofday();
 
     char writer_ready_filename[200];
     char writer_info_filename[200];
@@ -745,19 +1110,19 @@ adios_read_flexpath_open(const char * fname,
     sprintf(writer_ready_filename, "%s_%s", fname, WRITER_READY_FILE);
     sprintf(writer_info_filename, "%s_%s", fname, WRITER_CONTACT_FILE);
 	
-    char * string_list;
-    char data_contact_info[50];
+    char *string_list;
+    char data_contact_info[CONTACT_LENGTH];
     string_list = attr_list_to_string(CMget_contact_list(fp_read_data->fp_cm));
-    sprintf(&data_contact_info[0], "%d:%s", fp->data_stone, string_list);
+    sprintf(&data_contact_info[0], "%d:%s", fp->stone, string_list);
+    free(string_list);
+
     char * recvbuf;
     if(fp->rank == 0){	
-	recvbuf = (char*)malloc(sizeof(char)*50*(fp->size));
+	recvbuf = (char*)malloc(sizeof(char)*CONTACT_LENGTH*(fp->size));
     }
 
-#ifndef _NOMPI
-    MPI_Gather(data_contact_info, 50, MPI_CHAR, recvbuf,
-	       50, MPI_CHAR, 0, fp->comm);
-#endif
+    MPI_Gather(data_contact_info, CONTACT_LENGTH, MPI_CHAR, recvbuf,
+	       CONTACT_LENGTH, MPI_CHAR, 0, fp->comm);
 
     if(fp->rank == 0){	
 	// print our own contact information
@@ -769,39 +1134,38 @@ adios_read_flexpath_open(const char * fname,
 	    exit(1);
 	}
 	for(i=0; i<fp->size; i++) {
-	    fprintf(fp_out,"%s\n", &recvbuf[i*50]);
+	    fprintf(fp_out,"%s\n", &recvbuf[i*CONTACT_LENGTH]);
 	}
 	fclose(fp_out);
-	fp_out = fopen(reader_ready_filename, "w");
-	fprintf(fp_out, "ready");
-	fclose(fp_out);
 	free(recvbuf);
-
+	
 	FILE * read_ready = fopen(reader_ready_filename, "w");
 	fprintf(read_ready, "ready");
 	fclose(read_ready);
     }
     MPI_Barrier(fp->comm);
-    //may need to switch to rank 0 and mpi broadcast
+
     FILE * fp_in = fopen(writer_ready_filename,"r");
     while(!fp_in) {
-	CMsleep(fp_read_data->fp_cm, 1);
+	//CMsleep(fp_read_data->fp_cm, 1);
 	fp_in = fopen(writer_ready_filename, "r");
     }
     fclose(fp_in);
+
     fp_in = fopen(writer_info_filename, "r");
     while(!fp_in){
-	CMsleep(fp_read_data->fp_cm, 1);
+	//CMsleep(fp_read_data->fp_cm, 1);
 	fp_in = fopen(writer_info_filename, "r");
     }
 
-    char in_contact[50] = "";
-    fp->bridges = malloc(sizeof(bridge_info));
+    char in_contact[CONTACT_LENGTH] = "";
+    //fp->bridges = malloc(sizeof(bridge_info));
     int num_bridges = 0;
     int their_stone;
 
     // change to read all numbers, dont create stones, turn bridge array into linked list
     while(fscanf(fp_in, "%d:%s", &their_stone, in_contact) != EOF){	
+	//fprintf(stderr, "writer contact: %d:%s\n", their_stone, in_contact);
 	fp->bridges = realloc(fp->bridges,
 					  sizeof(bridge_info) * (num_bridges+1));
 	fp->bridges[num_bridges].their_num = their_stone;
@@ -809,49 +1173,68 @@ adios_read_flexpath_open(const char * fname,
 	fp->bridges[num_bridges].created = 0;
 	fp->bridges[num_bridges].step = 0;
 	fp->bridges[num_bridges].opened = 0;
+	fp->bridges[num_bridges].scheduled = 0;
 	num_bridges++;
     }
     fclose(fp_in);
-    //build_bridge(&fp->bridges[0]);
-
     fp->num_bridges = num_bridges;
     // clean up of writer's files
     MPI_Barrier(fp->comm);
     if(fp->rank == 0){
 	unlink(writer_info_filename);
 	unlink(writer_ready_filename);
-    }	
-    
+    }	    
+
     adiosfile->fh = (uint64_t)fp;
     adiosfile->current_step = 0;
     
-    // determining from which writer to read
-    // if there are less writers
-    int writer_rank = fp->rank % num_bridges;
-    /* if(num_bridges < fp->size){ */
-    /* 	writer_rank = fp->size % num_bridges; */
-    /* 	// otherwise */
-    /* }else{ */
-    /* 	writer_rank = fp->rank; */
-    /* }     */
-    build_bridge(&fp->bridges[writer_rank]);
-    fp->writer_coordinator = writer_rank;
-    op_msg init;
-    init.step = 0;
-    init.type = 3;
-    init.process_id = fp->rank;
-    init.file_name = "test";
-    init.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-    EVsubmit(fp->bridges[writer_rank].op_source, &init, NULL);
-    CMCondition_wait(fp_read_data->fp_cm, init.condition); 
-    /* Flush_msg msg; */
-    /* msg.type = DATA; */
-    /* msg.rank = fp->rank; */
-    /* msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL); */
-    /* EVsubmit(fp->bridges[0].flush_source, &msg, NULL); */
-    /* CMCondition_wait(fp_read_data->fp_cm, msg.condition); */
-    adios_errno == err_no_error;
-    log_debug("\t\tFLEXPATH READER LEAVING OPEN\n");
+    /* Init with a writer to get initial scalar
+       data so we can handle inq_var calls and
+       also populate the ADIOS_FILE struct. */
+
+    double bridge_start = MPI_Wtime();
+    if(fp->size < num_bridges){
+    	int mystart = (num_bridges/fp->size) * fp->rank;
+    	int myend = (num_bridges/fp->size) * (fp->rank+1);
+    	fp->writer_coordinator = mystart;
+    	int z;
+    	for(z=mystart; z<myend; z++){
+    	    build_bridge(&fp->bridges[z]);
+    	}
+    }
+    else{
+	int writer_rank = fp->rank % num_bridges;
+	build_bridge(&fp->bridges[writer_rank]);
+	fp->writer_coordinator = writer_rank;
+    }
+
+    // requesting initial data.
+    send_open_msg(fp, fp->writer_coordinator);
+    
+
+    fp->data_read = 0;
+    send_flush_msg(fp, fp->writer_coordinator, DATA, 1);
+
+    send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
+    fp->data_read = 0;
+    // this has to change. Writer needs to have some way of
+    // taking the attributes out of the xml document
+    // and sending them over ffs encoded. Not yet implemented.
+    // the rest of this info for adiosfile gets filled in raw_handler.
+    adiosfile->nattrs = 0;
+    adiosfile->attr_namelist = NULL;
+    // first step is at least one, otherwise raw_handler will not execute.
+    // in reality, writer might be further along, so we might have to make
+    // the writer explitly send across messages each time it calls close, to
+    // indicate which timesteps are available. 
+    adiosfile->last_step = 1;
+    adiosfile->path = strdup(fname);
+    // verifies these two fields. It's not BP, so no BP version.
+    // It's a stream, so how can the file size be known?
+    adiosfile->version = -1;
+    adiosfile->file_size = 0;
+    adios_errno = err_no_error;        
+    fp_log("FUNC", "leaving flexpath_open\n");
     return adiosfile;
 }
 
@@ -862,69 +1245,108 @@ int adios_read_flexpath_finalize_method ()
 
 void adios_read_flexpath_release_step(ADIOS_FILE *adiosfile) {
     int i;
-    log_debug("\t\tFLEXPATH READER RELEASE_STEP\n");
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
     for(i=0; i<fp->num_bridges; i++) {
         if(fp->bridges[i].created && !fp->bridges[i].opened) {
-            op_msg open;
-            open.step = adiosfile->current_step;
-            open.type = OPEN_MSG;
-            open.process_id = fp->rank;
-            open.file_name = "test";
-	    open.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-            EVsubmit(fp->bridges[i].op_source, &open, NULL);
-            CMCondition_wait(fp_read_data->fp_cm, open.condition);
-	    fp->bridges[i].opened = 1;
+	    send_open_msg(fp, i);
         }
     }
+    free_evgroup(fp->gp);
+    fp->gp = NULL;
+
+    flexpath_var *tmpvars = fp->var_list;
+    while(tmpvars){
+
+	if(tmpvars->num_dims > 0){
+	    free(tmpvars->global_dims);	   
+	    tmpvars->num_dims = 0;
+	}
+	free_displacements(tmpvars->displ, tmpvars->num_displ);
+	tmpvars->displ = NULL;
+	if(tmpvars->sel){
+	    free_selection(tmpvars->sel);
+	}
+	tmpvars->sel = NULL;	
+	for(i=0; i<tmpvars->num_chunks; i++){	   
+	    flexpath_var_chunk *chunk = &tmpvars->chunks[i];	    	    
+	    if(chunk->has_data){
+		free(chunk->data);
+		chunk->data = NULL;
+		chunk->has_data = 0;		
+	    }
+	    free(chunk->local_bounds);
+	    free(chunk->global_offsets);
+	    free(chunk->global_bounds);
+
+	    chunk->global_offsets = NULL;
+	    chunk->global_bounds = NULL;
+	    chunk->local_bounds = NULL;
+	    chunk->rank = 0;
+	}
+	tmpvars = tmpvars->next;
+    }
 }
 
-int adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_sec) {
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
-    log_debug("FLEXPATH ADVANCE_STEP CALLED!\n");
+int 
+adios_read_flexpath_advance_step(ADIOS_FILE *adiosfile, int last, float timeout_sec) 
+{
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
     MPI_Barrier(fp->comm);
-    int i=0;
+    int count = 0; // for perf measurements
+    send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
+    //put this on a timer, so to speak, for timeout_sec
+    while(fp->mystep == fp->last_writer_step){
+	if(fp->writer_finalized){
+	    adios_errno = err_end_of_stream;
+	    return err_end_of_stream;
+	}
+	CMsleep(fp_read_data->fp_cm, 1);
+	send_flush_msg(fp, fp->writer_coordinator, STEP, 1);
+    }
+
+    double advclose_start = dgettimeofday();
+    int i=0;    
     for(i=0; i<fp->num_bridges; i++) {
         if(fp->bridges[i].created && fp->bridges[i].opened) {
-            op_msg close;
-            close.step = adiosfile->current_step;
-            close.type = 0;
-            close.process_id = fp->rank;
-	    close.condition = -1;
-            close.file_name = "test";
-	    fp->bridges[i].opened = 0;
-            EVsubmit(fp->bridges[i].op_source, &close, NULL);
-
-            op_msg open;
-            open.step = adiosfile->current_step +1;
-            open.type = 1;
-            open.process_id = fp->rank;
-            open.file_name = "test";
-	    open.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-	    fp->bridges[i].opened = 1;
-            EVsubmit(fp->bridges[i].op_source, &open, NULL);
-            CMCondition_wait(fp_read_data->fp_cm, open.condition);
-        }
+	    count++;
+	    send_close_msg(fp, i);
+	}
     }
+    MPI_Barrier(fp->comm);
+
+    double advclose_end = dgettimeofday();
+    count = 0;
     adiosfile->current_step++;
+    fp->mystep = adiosfile->current_step;
+
     
-   return 0;
+    double advopen_start = dgettimeofday();
+    for(i=0; i<fp->num_bridges; i++){
+	if(fp->bridges[i].created && !fp->bridges[i].opened){	    
+	    send_open_msg(fp, i);
+	    count++;
+        }
+    }   
+    double advopen_end = dgettimeofday();
+    // need to remove selectors from each var now.
+    send_flush_msg(fp, fp->writer_coordinator, DATA, 1);
+      
+    // should only happen if there are more steps available.
+    // writer should have advanced.
+    double offset_start = dgettimeofday();
+    send_flush_msg(fp, fp->writer_coordinator, EVGROUP, 1);
+    double offset_end = dgettimeofday();    
+    return 0;
 }
 
 int adios_read_flexpath_close(ADIOS_FILE * fp)
 {
-    flexpath_file_data * file = (flexpath_file_data*)fp->fh;
-    int i;
-    op_msg msg;
-    msg.type=0;
-    msg.file_name = strdup(file->file_name);
-    msg.process_id = file->rank;
-    msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
+    flexpath_reader_file *file = (flexpath_reader_file*)fp->fh;
     //send to each opened link
+    int i;
     for(i = 0; i<file->num_bridges; i++){
-        if(file->bridges[i].created) {
-            msg.step = file->bridges[i].step;
-	    EVsubmit(file->bridges[i].op_source, &msg, NULL);
+        if(file->bridges[i].created && file->bridges[i].opened) {
+	    send_close_msg(file, i);
         }
     }
     /*
@@ -932,20 +1354,28 @@ int adios_read_flexpath_close(ADIOS_FILE * fp)
     data has already been copied over to ADIOS_VARINFO structs
     that the user maintains a copy of. 
     */
-    flexpath_var_info * v = file->var_list;
+    flexpath_var *v = file->var_list;
     while(v){        	
     	// free chunks; data has already been copied to user
     	int i;	
     	for(i = 0; i<v->num_chunks; i++){    		    
-    	    flexpath_var_chunk * c = &v->chunks[i];	    
+    	    flexpath_var_chunk *c = &v->chunks[i];	    
 	    if(!c)
 		log_error("FLEXPATH: %s This should not happen! line %d\n",__func__,__LINE__);
-	    //free(c->data);    		
+	    //free(c->data);
 	    free(c->global_bounds);		
 	    free(c->global_offsets);
 	    free(c->local_bounds);
+	    c->data = NULL;
+	    c->global_bounds = NULL;
+	    c->global_offsets = NULL;
+	    c->local_bounds = NULL;
+	    free(c);
 	}
-    	v=v->next;
+	flexpath_var *tmp = v->next;	
+	free(v);
+	v = tmp;
+    	//v=v->next;
     }
     return 0;
 }
@@ -962,259 +1392,137 @@ int adios_read_flexpath_check_reads(const ADIOS_FILE* fp, ADIOS_VARCHUNK** chunk
 
 int adios_read_flexpath_perform_reads(const ADIOS_FILE *adiosfile, int blocking)
 {
-    flexpath_file_data * fp = (flexpath_file_data*)adiosfile->fh;
-    Flush_msg msg;
-    msg.rank = fp->rank;
-    msg.type = DATA;
-    msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-    int i;
+    fp_log("FUNC", "entering perform_reads.\n");
+    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    fp->data_read = 0;
+    int i,j;
     int num_sendees = fp->num_sendees;
-    for(i = 0; i<num_sendees; i++)
-    {
-	int sendee = fp->sendees[i];
-        fp_log("MSG","rank %d sending flush to %d\n", fp->rank, sendee);
-	EVsubmit(fp->bridges[sendee].flush_source, &msg, NULL);
-    }
-    if(blocking){    
-	CMCondition_wait(fp_read_data->fp_cm, msg.condition);
+    int total_sent = 0;
+    fp->time_in = 0.00;
+    double start_poll = MPI_Wtime();
+    for(i = 0; i<num_sendees; i++){
+	pthread_mutex_lock(&fp->data_mutex);
+	int sendee = fp->sendees[i];	
+	fp->pending_requests++;
+	total_sent++;
+	send_flush_msg(fp, sendee, DATA, 0);
+
+	if((total_sent % FP_BATCH_SIZE == 0) || (total_sent = num_sendees)){
+	    pthread_cond_wait(&fp->data_condition, &fp->data_mutex);
+	    pthread_mutex_unlock(&fp->data_mutex);
+	    fp->completed_requests = 0;
+	    fp->pending_requests = 0;
+	    total_sent = 0;
+	}
+
     }
+    double end_poll = MPI_Wtime();
+
+    free(fp->sendees);
+    fp->sendees = NULL;    
+    fp->num_sendees = 0;
+    fp_log("FUNC", "leaving perform_reads.\n");
     return 0;
 }
+
 int
 adios_read_flexpath_inq_var_blockinfo(const ADIOS_FILE* fp,
 				      ADIOS_VARINFO* varinfo)
 { /*log_debug( "flexpath:adios function inq var block info\n");*/ return 0; }
+
 int
 adios_read_flexpath_inq_var_stat(const ADIOS_FILE* fp,
 				 ADIOS_VARINFO* varinfo,
 				 int per_step_stat,
 				 int per_block_stat)
 { /*log_debug( "flexpath:adios function inq var stat\n");*/ return 0; }
-void adiosread_flexpath_release_step (ADIOS_FILE *fp);
-
-
-
-array_displacements*
-get_writer_displacements(int rank, const ADIOS_SELECTION * sel, global_var* gvar)
-{
-    int ndims = sel->u.bb.ndim;
-    array_displacements * displ = (array_displacements*)malloc(sizeof(array_displacements));
-    displ->writer_rank = rank;
-
-    displ->start = (int*)malloc(sizeof(int) * ndims);
-    displ->count = (int*)malloc(sizeof(int) * ndims);    
-    displ->ndims = ndims;
-    int * offsets = gvar->offsets[0].local_offsets;
-    int * local_dims = gvar->offsets[0].local_dimensions;
-    int pos = rank * gvar->offsets[0].offsets_per_rank;
-    // malloc of ndims size;
-    //for each dim
-    int i;
-    for(i=0; i<ndims; i++){	
-	if(sel->u.bb.start[i] >= offsets[pos+i]){
-	    int start = sel->u.bb.start[i] - offsets[pos+i];
-	    displ->start[i] = start;
-	}
-	if((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) <= (offsets[pos+i] + local_dims[pos+i] - 1)){	   
-	    int count = ((sel->u.bb.start[i] + sel->u.bb.count[i] - 1) - offsets[pos+i]) - displ->start[i] + 1;
-	    displ->count[i] = count;
-	    
-	}else{
-	    int count = (local_dims[pos+i] - 1) - displ->start[i] + 1;
-	    displ->count[i] = count;
-	}	
-    }
-    return displ;
-}
-
-int
-need_writer(flexpath_file_data *fp, int j, const ADIOS_SELECTION* sel, evgroup_ptr gp, char* varname) {    
-    /* if(!file_data_list->gp){ */
-    /* 	CMCondition_wait(fp_read_data->fp_cm, ackCondition); */
-    /* } */
-
-    while(!fp->gp)
-	CMsleep(fp_read_data->fp_cm, 1);
-    //select var from group
-    global_var * gvar = find_gbl_var(gp->vars, varname, gp->num_vars);
 
-    //for each dimension
-    int i=0;
-    offset_struct var_offsets = gvar->offsets[0];
-    for(i=0; i< var_offsets.offsets_per_rank; i++){
-        //select sel offsets
-        int sel_offset = sel->u.bb.start[i];
-        //grab sel dimensions(size)
-        int sel_size = sel->u.bb.count[i];        
-
-
-        //select rank offsets
-        int rank_offset = var_offsets.local_offsets[j*var_offsets.offsets_per_rank+i];
-        //grab rank dimencsions(size)
-        int rank_size =var_offsets.local_dimensions[j*var_offsets.offsets_per_rank+i];        
-
-        //if rank offset < selector offset and rank offset +size-1 > selector offset
-	
-        if((rank_offset <= sel_offset) && (rank_offset + rank_size - 1 >=sel_offset)) {
-	     log_debug("matched overlap type 1\n");
-        }
-        //if rank offset < selector offset + selector size -1 and rank offset+size-1 > selector offset +selector size -1
-        else if((rank_offset <= sel_offset + sel_size - 1) && \
-		(rank_offset+rank_size-1>=sel_offset+sel_size-1)) {
-            log_debug("matched overlap type 2\n");
-        } else {
-            log_debug("overlap not present\n\n");
-            return 0;
-        }
-    }
-    log_debug("overlap detected\n\n");
-    return 1;
-}
 
-
-int adios_read_flexpath_schedule_read_byid(const ADIOS_FILE * adiosfile,
-					   const ADIOS_SELECTION * sel,
-					   int varid,
-					   int from_steps,
-					   int nsteps,
-					   void * data)
+int 
+adios_read_flexpath_schedule_read_byid(const ADIOS_FILE *adiosfile,
+				       const ADIOS_SELECTION *sel,
+				       int varid,
+				       int from_steps,
+				       int nsteps,
+				       void *data)
 {   
-    flexpath_file_data * fp = (flexpath_file_data*)adiosfile->fh;
-    flexpath_var_info * v = fp->var_list;
-    while(v){
-        if(v->id == varid)
+    fp_log("FUNC", "entering schedule_read_byid\n");
+    flexpath_reader_file * fp = (flexpath_reader_file*)adiosfile->fh;
+    flexpath_var * var = fp->var_list;
+    while(var){
+        if(var->id == varid)
         	break;
         else
-    	v=v->next;
+	    var=var->next;
     }
-    if(!v){
+    if(!var){
         adios_error(err_invalid_varid,
-    		"Invalid variable id: %d\n",
-    		varid);
+		    "Invalid variable id: %d\n",
+		    varid);
         return err_invalid_varid;
     }    
     //store the user allocated buffer.
-    flexpath_var_chunk * chunk = &v->chunks[0];  
-    chunk->data = data;
-    v->was_scheduled = 1;
+    flexpath_var_chunk *chunk = &var->chunks[0];  
+    chunk->user_buf = data;
+    var->start_position = 0;
     if(nsteps != 1){
 	adios_error (err_invalid_timestep,
                      "Only one step can be read from a stream at a time. "
-                     "You requested % steps in adios_schedule_read()\n", nsteps);
+                     "You requested % steps in adios_schedule_read()\n", 
+		     nsteps);
         return err_invalid_timestep;
     }
-    v->sel = sel;
-    switch(sel->type)
+    // this is done so that the user can do multiple schedule_read/perform_reads
+    // within before doing release/advance step. Might need a better way to 
+    // manage the ADIOS selections.
+    if(var->sel){
+	free_selection(var->sel);
+    }
+    var->sel = copy_selection(sel);
+
+    switch(var->sel->type)
     {
     case ADIOS_SELECTION_WRITEBLOCK:
     {
-	int writer_index = sel->u.block.index;
+	int writer_index = var->sel->u.block.index;
 	if(writer_index > fp->num_bridges){
 	    adios_error(err_out_of_bound,
 			"No process exists on the writer side matching the index.\n");
+	    return err_out_of_bound;
 	}
-
-        int i = 0;
-        int found = 0;
-        for(i=0; i<fp->num_sendees; i++) {
-            if(fp->sendees[i]==writer_index) {
-                found=1;
-                break;
-            }
-        }
-        if(!found) {
-            fp->num_sendees+=1;
-            fp->sendees=realloc(fp->sendees, fp->num_sendees*sizeof(int));
-            fp->sendees[fp->num_sendees-1] = writer_index;
-        }
-        if(!fp->bridges[writer_index].created) {
-            build_bridge(&(fp->bridges[writer_index]));
-	}
-	if(!fp->bridges[writer_index].opened){
-	    fp->bridges[writer_index].opened = 1;
-            op_msg open_msg;
-            open_msg.process_id = fp->rank;
-            open_msg.file_name = fp->file_name;
-            open_msg.type = 1;
-            open_msg.step = 0;
-	    open_msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-            EVsubmit(fp->bridges[writer_index].op_source, &open_msg, NULL);
-            CMCondition_wait(fp_read_data->fp_cm, open_msg.condition);
-	}
-	Var_msg var;
-	var.rank = fp->rank;
-	var.var_name = strdup(v->varname);
-	EVsubmit(fp->bridges[writer_index].var_source, &var, NULL);    
+	send_var_message(fp, writer_index, var->varname);
 	break;
     }
     case ADIOS_SELECTION_BOUNDINGBOX:
-    {
-        fp_log("BOUNDING", "bounding box scheduled read\n");
-	if(!fp->gp){
-	    Flush_msg msg;
-	    msg.type = EVGROUP;
-	    msg.rank = fp->rank;
-	    msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-	    // maybe check to see if the bridge is create first.
-	    EVsubmit(fp->bridges[fp->writer_coordinator].flush_source, &msg, NULL);
-	    CMCondition_wait(fp_read_data->fp_cm, msg.condition);
-	}
+    {   
+	free_displacements(var->displ, var->num_displ);
+	var->displ = NULL;
         int j=0;
 	int need_count = 0;
-	array_displacements * all_disp = NULL;	
-        for(j=0; j<fp->size; j++) {
-            fp_log("BOUNDING", "checking writer %d\n", j);
-            int reader=0;	    	    
-            if(need_writer(fp, j, sel, fp->gp, v->varname)==1){
-                fp_log("BOUNDING", "yes it's neededi\n");		
+	array_displacements * all_disp = NULL;
+	uint64_t pos = 0;
+	double sched_start = MPI_Wtime();
+        for(j=0; j<fp->num_bridges; j++) {
+            int destination=0;	    	    
+            if(need_writer(fp, j, var->sel, fp->gp, var->varname)==1){           
+		uint64_t _pos = 0;
 		need_count++;
-                reader = j;
-		global_var * gvar = find_gbl_var(fp->gp->vars, v->varname, fp->gp->num_vars);
-		array_displacements * displ = get_writer_displacements(j, sel, gvar);
+                destination = j;
+		global_var *gvar = find_gbl_var(fp->gp->vars, var->varname, fp->gp->num_vars);
+		// TODO: memory leak here. have to free these at some point.
+		array_displacements *displ = get_writer_displacements(j, var->sel, gvar, &_pos);
+		displ->pos = pos;
+		_pos *= (uint64_t)var->type_size; 
+		pos += _pos;
+		
 		all_disp = realloc(all_disp, sizeof(array_displacements)*need_count);
 		all_disp[need_count-1] = *displ;
-            } else {
-                fp_log("BOUNDING", "no it's not\n");		
-                continue;
-            }
-            int i = 0;
-            int found = 0;
-            fp_log("BOUNDING", "remember who to read from\n");
-            for(i=0; i<fp->num_sendees; i++) {
-                if(fp->sendees[i]==reader) {
-                    found=1;
-                    break;
-                }
+		send_var_message(fp, j, var->varname);				
             }
-            if(!found) {
-                fp->num_sendees+=1;
-                fp->sendees=realloc(fp->sendees, fp->num_sendees*sizeof(int));
-                fp->sendees[fp->num_sendees-1] = reader;
-            }
-            if(!fp->bridges[reader].created) {
-                build_bridge(&(fp->bridges[reader]));
-	    }
-	    if(!fp->bridges[reader].opened){
-		op_msg open_msg;
-		open_msg.process_id = fp->rank;
-		open_msg.file_name = "hey";
-		open_msg.type = 1;
-		open_msg.step = adiosfile->current_step;
-		fp->bridges[reader].opened = 1;
-		open_msg.condition = CMCondition_get(fp_read_data->fp_cm, NULL);
-		EVsubmit(fp->bridges[reader].op_source, &open_msg, NULL);
-		CMCondition_wait(fp_read_data->fp_cm, open_msg.condition);
-	    }
-	
-	    Var_msg var;
-	    var.rank = fp->rank;
-	    var.var_name = strdup(v->varname);
-	    log_debug("1 sending %s from %d to %p aka %d\n", 
-		 var.var_name, var.rank, fp->bridges[reader].var_source, reader);
-	    EVsubmit(fp->bridges[reader].var_source, &var, NULL);            
 	}
-	v->displ = all_disp;
-	v->num_displ = need_count;
+	double sched_end = MPI_Wtime();
+	var->displ = all_disp;
+	var->num_displ = need_count;
         break;
     }
     case ADIOS_SELECTION_AUTO:
@@ -1230,105 +1538,87 @@ int adios_read_flexpath_schedule_read_byid(const ADIOS_FILE * adiosfile,
 	break;
     }
     }
-    log_debug("\t\tFLEXPATH READER LEAVING SCHEDULE_READ\n\n");
+    fp_log("FUNC", "entering schedule_read_byid\n");
     return 0;
 }
 
-int adios_read_flexpath_schedule_read(const ADIOS_FILE *adiosfile,
+int 
+adios_read_flexpath_schedule_read(const ADIOS_FILE *adiosfile,
 			const ADIOS_SELECTION * sel,
 			const char * varname,
 			int from_steps,
 			int nsteps,
 			void * data)
 {
+    fprintf(stderr, "schedule_read is called\n");
     return 0;
 }
 
-int adios_read_flexpath_fclose(ADIOS_FILE *adiosfile)
-{
-    //log_debug( "debug: adios_read_flexpath_fclose\n");
-    return 0;
-}
-
-int * adios_read_flexpath_gopen (ADIOS_FILE *adiosfile, const char *grpname)
-{
-    //log_debug( "debug: adios_read_flexpath_gopen\n");
-    return NULL;
-}
-
-int * adios_read_flexpath_gopen_byid (ADIOS_FILE *adiosfile, int grpid)
-{
-    //log_debug( "debug: adios_read_flexpath_gopen_byid\n");
-    return NULL;
-}
-
-int adios_read_flexpath_gclose (int *gp)
-{
-    log_debug( "adios_read_flexpath_gclose\n");
-    adios_errno = 0;
-    int i;
-//    free_namelist ((gp->var_namelist),gp->vars_count);
-    free(gp);
-    return 0;
-
-}
-
-int adios_read_flexpath_get_attr (int *gp, const char *attrname,
+int 
+adios_read_flexpath_get_attr (int *gp, const char *attrname,
                                  enum ADIOS_DATATYPES *type,
                                  int *size, void **data)
 {
     //log_debug( "debug: adios_read_flexpath_get_attr\n");
     // TODO: borrowed from dimes
-    adios_error(err_invalid_read_method, "adios_read_flexpath_get_attr is not implemented.");
+    adios_error(err_invalid_read_method, 
+		"adios_read_flexpath_get_attr is not implemented.");
     *size = 0;
     *type = adios_unknown;
     *data = 0;
     return adios_errno;
 }
 
-int adios_read_flexpath_get_attr_byid (const ADIOS_FILE *adiosfile, int attrid,
-                                      enum ADIOS_DATATYPES *type,
-                                      int *size, void **data)
+int 
+adios_read_flexpath_get_attr_byid (const ADIOS_FILE *adiosfile, int attrid,
+				   enum ADIOS_DATATYPES *type,
+				   int *size, void **data)
 {
 //    log_debug( "debug: adios_read_flexpath_get_attr_byid\n");
     // TODO: borrowed from dimes
-    adios_error(err_invalid_read_method, "adios_read_flexpath_get_attr_byid is not implemented.");
+    adios_error(err_invalid_read_method, 
+		"adios_read_flexpath_get_attr_byid is not implemented.");
     *size = 0;
     *type = adios_unknown;
     *data = 0;
     return adios_errno;
 }
 
-ADIOS_VARINFO* adios_read_flexpath_inq_var(const ADIOS_FILE * adiosfile, const char* varname)
+ADIOS_VARINFO* 
+adios_read_flexpath_inq_var(const ADIOS_FILE * adiosfile, const char* varname)
 {
-    log_debug("\t\tFLEXPATH READER CALLS INQ_VAR\n\n");
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
-    ADIOS_VARINFO* v = malloc(sizeof(ADIOS_VARINFO));
+    fp_log("FUNC", "entering flexpath_inq_var\n");
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    ADIOS_VARINFO *v = malloc(sizeof(ADIOS_VARINFO));
+
     if(!v) {
-        adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
-	log_debug("\t\tFLEXPATH INQ_VAR_ERROR\n\n");
+        adios_error(err_no_memory, 
+		    "Cannot allocate buffer in adios_read_datatap_inq_var()");
         return NULL;
     }
     memset(v, 0, sizeof(ADIOS_VARINFO));
     
-    flexpath_var_info *current_var = find_fp_var(fp->var_list, varname);
-    if(current_var) {
-	v = convert_file_info(current_var, v, varname, adiosfile);
-	log_debug("\t\tFLEXPATH READER LEAVING INQ_VAR\n");
+    flexpath_var *fpvar = find_fp_var(fp->var_list, varname);
+    if(fpvar) {
+	v = convert_var_info(fpvar, v, varname, adiosfile);
+	fp_log("FUNC", "leaving flexpath_inq_var\n");
 	return v;
     }
     else {
-	log_debug("\t\t%s OOOPS, line %d\n", __func__, __LINE__);
         adios_error(err_invalid_varname, "Cannot find var %s\n", varname);
         return NULL;
     }
 }
 
-ADIOS_VARINFO * adios_read_flexpath_inq_var_byid (const ADIOS_FILE * adiosfile, int varid)
+ADIOS_VARINFO* 
+adios_read_flexpath_inq_var_byid (const ADIOS_FILE * adiosfile, int varid)
 {
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
-    if(varid >= 0 && varid < adiosfile->nvars) {
-        return adios_read_flexpath_inq_var(adiosfile, adiosfile->var_namelist[varid]);
+    fp_log("FUNC", "entering flexpath_inq_var_byid\n");
+    flexpath_reader_file *fp = (flexpath_reader_file*)adiosfile->fh;
+    if(varid >= 0 && varid < adiosfile->nvars) {	
+	ADIOS_VARINFO *v = adios_read_flexpath_inq_var(adiosfile, adiosfile->var_namelist[varid]);
+	fp_log("FUNC", "leaving flexpath_inq_var_byid\n");
+	return v;
     }
     else {
         adios_error(err_invalid_varid, "FLEXPATH method: Cannot find var %d\n", varid);
@@ -1336,73 +1626,35 @@ ADIOS_VARINFO * adios_read_flexpath_inq_var_byid (const ADIOS_FILE * adiosfile,
     }
 }
 
-ADIOS_VARINFO* 
-convert_file_info(flexpath_var_info * current_var,
-				 ADIOS_VARINFO * v, const char* varname,
-				 const ADIOS_FILE *adiosfile)
-{
-    int i;
-    flexpath_file_data *fp = (flexpath_file_data*)adiosfile->fh;
-    current_var->type = v->type;
-    for(i = 0; i < adiosfile->nvars; i ++) {
-	if(!strcmp(adiosfile->var_namelist[i], varname)) {
-	    v->varid = i; // TODO: this may not be cmpatible with BP
-	    break;
-	}
-    }
-    v->type = current_var->type;
-    v->ndim = current_var->ndims;
-    //v->timedim = current_var->time_dim;
-    if(v->ndim == 0){    
-	//int value_size = common_read_type_size(v->type, current_var->chunks->data);
-	int value_size = current_var->data_size;
-	v->value = malloc(value_size);
-	if(!v->value) {
-	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
-	    return NULL;
-	}
-	flexpath_var_chunk * chunk = &current_var->chunks[0];
-	memcpy(v->value, chunk->data, value_size);
-    }else{ // arrays
-	v->dims = (uint64_t *) malloc(v->ndim * sizeof(uint64_t));
-	if(!v->dims) {
-	    adios_error(err_no_memory, "Cannot allocate buffer in adios_read_datatap_inq_var()");
-	    return NULL;
-	}
-	int k;
-	for(k = 0; k < v->ndim; k ++) {
-	    //v->dims[k] = ds->pgs[i].vars[j].global_bounds[k];
-	    v->dims[k] = current_var->chunks->global_bounds[k];
-	}
-    }
-    return v;
-}
-
-
-void adios_read_flexpath_free_varinfo (ADIOS_VARINFO *adiosvar)
+void 
+adios_read_flexpath_free_varinfo (ADIOS_VARINFO *adiosvar)
 {
     //log_debug( "debug: adios_read_flexpath_free_varinfo\n");
+    fprintf(stderr, "adios_read_flexpath_free_varinfo called\n");
     return;
 }
 
-int64_t adios_read_flexpath_read_var (int *gp, const char *varname,
-                                     const uint64_t *start, const uint64_t *count,
-                                     void *data)
-{
-    //log_debug( "debug: adios_read_flexpath_read_var\n");
-    return (int64_t)0;
+
+ADIOS_TRANSINFO* 
+adios_read_flexpath_inq_var_transinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi)
+{    
+    //adios_error(err_operation_not_supported, "Flexpath does not yet support transforms: var_transinfo.\n");
+    ADIOS_TRANSINFO *trans = malloc(sizeof(ADIOS_TRANSINFO));
+    memset(trans, 0, sizeof(ADIOS_TRANSINFO));
+    trans->transform_type = adios_transform_none;
+    return trans;
 }
 
-int64_t adios_read_flexpath_read_var_byid (int *gp, int varid,
-                                          const uint64_t *start,
-                                          const uint64_t *count,
-                                          void *data)
+
+int 
+adios_read_flexpath_inq_var_trans_blockinfo(const ADIOS_FILE *gp, const ADIOS_VARINFO *vi, ADIOS_TRANSINFO *ti)
 {
-    //log_debug( "debug: adios_read_flexpath_read_var_byid\n");
+    adios_error(err_operation_not_supported, "Flexpath does not yet support transforms: trans_blockinfo.\n");
     return (int64_t)0;
 }
 
-void adios_read_flexpath_reset_dimension_order (const ADIOS_FILE *adiosfile, int is_fortran)
+void 
+adios_read_flexpath_reset_dimension_order (const ADIOS_FILE *adiosfile, int is_fortran)
 {
     //log_debug( "debug: adios_read_flexpath_reset_dimension_order\n");
     adios_error(err_invalid_read_method, "adios_read_flexpath_reset_dimension_order is not implemented.");
diff --git a/src/read/read_nssi.c b/src/read/read_nssi.c
index 4744d91..78975c3 100644
--- a/src/read/read_nssi.c
+++ b/src/read/read_nssi.c
@@ -649,5 +649,5 @@ int64_t adios_read_nssi_read_local_var (ADIOS_GROUP * gp, const char * varname,
                                       const uint64_t * count, void * data)
 {  
     adios_error (err_operation_not_supported, "adios_read_local_var() is not supported with NSSI method.");
-    return -adios_errno;
+    return adios_errno;
 }
diff --git a/src/transforms/Makefile.plugins b/src/transforms/Makefile.plugins
new file mode 100644
index 0000000..1a7db30
--- /dev/null
+++ b/src/transforms/Makefile.plugins
@@ -0,0 +1,27 @@
+# Identity plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_identity_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_identity_read.c
+
+# Zlib plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_zlib_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_zlib_read.c
+
+# Bzip2 plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_bzip2_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_bzip2_read.c
+
+# Szip plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_szip_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_szip_read.c
+
+# ISOBAR plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_isobar_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_isobar_read.c
+
+# APLOD plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_aplod_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_aplod_read.c
+
+# ALACRITY plugin:
+transforms_write_method_SOURCES += transforms/adios_transform_alacrity_write.c
+transforms_read_method_SOURCES += transforms/adios_transform_alacrity_read.c
diff --git a/src/transforms/adios_transform_alacrity_read.c b/src/transforms/adios_transform_alacrity_read.c
new file mode 100644
index 0000000..68ffdf4
--- /dev/null
+++ b/src/transforms/adios_transform_alacrity_read.c
@@ -0,0 +1,79 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "util.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef ALACRITY
+
+#include "alacrity.h"
+
+int adios_transform_alacrity_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                    adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_alacrity_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                                adios_transform_pg_read_request *pg_reqgroup,
+                                                                adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+
+
+adios_datablock * adios_transform_alacrity_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                                 adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    //uint64_t raw_size = (uint64_t)completed_pg_reqgroup->raw_var_length;
+    void* raw_buff = completed_pg_reqgroup->subreqs->data;
+
+    uint64_t orig_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+        orig_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+
+    void* orig_buff = malloc(orig_size);
+
+    ALPartitionData output_partition;
+    uint64_t numElements = 0;
+
+    // Decompress into output_partition from compressed_buf
+    memstream_t ms = memstreamInitReturn (raw_buff);
+
+    // Deserialize the ALPartitionData from memstream
+    ALDeserializePartitionData (&output_partition, &ms);
+
+    // Decode ALPartitionData into decompresed buffer
+    int rtn = ALDecode (&output_partition, orig_buff, &numElements);
+    if (ALErrorNone != rtn)
+        return NULL;
+
+    ALPartitionDataDestroy(&output_partition);
+
+    return adios_datablock_new(reqgroup->transinfo->orig_type,
+                               completed_pg_reqgroup->timestep,
+                               completed_pg_reqgroup->pg_bounds_sel,
+                               orig_buff);
+}
+
+adios_datablock * adios_transform_alacrity_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(alacrity);
+
+#endif
+
diff --git a/src/transforms/adios_transform_alacrity_write.c b/src/transforms/adios_transform_alacrity_write.c
new file mode 100644
index 0000000..0609127
--- /dev/null
+++ b/src/transforms/adios_transform_alacrity_write.c
@@ -0,0 +1,187 @@
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef ALACRITY
+
+#include "alacrity.h"
+#include "alacrity-serialization-debug.h"
+
+uint16_t adios_transform_alacrity_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return (3 * sizeof(uint64_t));
+}
+
+uint64_t adios_transform_alacrity_calc_vars_transformed_size(struct adios_transform_spec *transform_spec, uint64_t orig_size, int num_vars)
+{
+    return (uint64_t)(1.75 * orig_size);
+}
+
+int adios_transform_alacrity_apply(struct adios_file_struct *fd,
+                                   struct adios_var_struct *var,
+                                   uint64_t *transformed_len,
+                                   int use_shared_buffer,
+                                   int *wrote_to_shared_buffer)
+{
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff = var->data;
+
+    ALEncoderConfig config;
+    uint32_t numElements = 0;
+
+    if (var->pre_transform_type == adios_real) {
+        assert (sizeof (DATATYPE_FLOAT32) == sizeof (adios_real));
+        ALEncoderConfigure(&config, 16, DATATYPE_FLOAT32, ALInvertedIndex);
+        numElements = input_size / sizeof (float);
+    } else if (var->pre_transform_type == adios_double) {
+        assert (sizeof (DATATYPE_FLOAT64) == sizeof (adios_double));
+        ALEncoderConfigure(&config, 16, DATATYPE_FLOAT64, ALInvertedIndex);
+        numElements = input_size / sizeof (double);
+    } else {
+        log_error("Can index only real datatypes. \n");
+        return 0;
+    }
+
+    // Longest parameter-parsing code ever.
+    // parse the parameter relating to sigbits, with index compression
+    // Read all ALACRITY parameters here
+    /*// Old, pre-specparse parameter parsing
+    if(var->transform_type_param) {
+        char transform_param [1024];
+        char *transform_param_ptr       = 0;
+        uint16_t transform_param_length = 0;
+
+        char transform_param_option [256];
+
+        uint16_t idx = 0;
+
+        strcpy (transform_param, var->transform_type_param);
+        transform_param_ptr     = transform_param;
+        transform_param_length  = strlen (transform_param);
+
+        // Change all the delimiters to a space
+        while (idx < transform_param_length) {
+            if (transform_param [idx] == ':') {
+                transform_param [idx] = ' ';
+            }
+            idx ++;
+        }
+
+        // For each option in the transform parameter,
+        // get its key and possibly its value.
+        idx = 0;
+        while (idx < transform_param_length) {
+            // Get the first key, value pair
+            sscanf (transform_param_ptr, "%s", transform_param_option);
+
+            // Advance the pointer
+            idx += strlen (transform_param_option) + 1;
+            transform_param_ptr = transform_param + idx;
+
+            // Get the key
+            char *key = strtok (transform_param_option, "=");
+
+            if (strcmp (key, "indexForm") == 0) {
+                char *value = strtok (NULL, "=");
+                if (strcmp (value, "ALCompressedInvertedIndex") == 0) {
+                    config.indexForm = ALCompressedInvertedIndex;
+                } else if (strcmp (value, "ALInvertedIndex") == 0) {
+                    config.indexForm = ALInvertedIndex;
+                }
+
+            } else if (strcmp (key, "sigBits") == 0) {
+                char *value = strtok (NULL, "=");
+                int significantBits = 0;
+                sscanf (value, "%d", &(significantBits));
+                config.significantBits = significantBits;
+            } else {
+                printf ("Option %s not found. \n", key);
+            }
+        }
+    }
+    */
+    int i;
+    for (i = 0; i < var->transform_spec->param_count; i++) {
+        const struct adios_transform_spec_kv_pair * const param = &var->transform_spec->params[i];
+        if (strcmp(param->key, "indexForm") == 0) {
+            if (strcmp(param->value, "ALCompressedInvertedIndex") == 0)
+                config.indexForm = ALCompressedInvertedIndex;
+            else if (strcmp (param->value, "ALInvertedIndex") == 0)
+                config.indexForm = ALInvertedIndex;
+        } else if (strcmp(param->key, "sigBits") == 0) {
+            config.significantBits = atoi(param->value);
+        }
+    }
+
+    // decide the output buffer
+    uint64_t output_size = 0;
+    void* output_buff = NULL;
+    ALPartitionData output_partition;
+
+    if (config.indexForm == ALInvertedIndex) {
+        ALEncode (&config, input_buff, numElements, &output_partition);
+    } else if (config.indexForm == ALCompressedInvertedIndex) {
+        config.indexForm = ALInvertedIndex;
+        ALEncode (&config, input_buff, numElements, &output_partition);
+        ALConvertIndexForm (&output_partition.metadata, &output_partition.index, ALCompressedInvertedIndex);
+    } else {
+        log_error("Error on indexing %s\n", var->name);
+        return 0;
+    }
+
+    output_size = ALGetPartitionDataSize (&output_partition);
+
+    if (use_shared_buffer) {
+        // If shared buffer is permitted, serialize to there
+        assert(shared_buffer_reserve(fd, output_size));
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    } else { // Else, fall back to var->data memory allocation
+        output_buff = malloc(output_size);
+        assert(output_buff);
+    }
+    *wrote_to_shared_buffer = use_shared_buffer;
+
+    memstream_t ms = memstreamInitReturn (output_buff);
+    ALSerializePartitionData (&output_partition, &ms);
+
+    // Check this for later. What do you intend to add in the metadata
+    if(var->transform_metadata && var->transform_metadata_len > 0) {
+        ((uint64_t * ) (var->transform_metadata)) [0] = ALGetMetadataSize (& (output_partition.metadata));
+        ((uint64_t * ) (var->transform_metadata)) [1] = ALGetIndexSize (& (output_partition.index), & (output_partition.metadata));
+        ((uint64_t * ) (var->transform_metadata)) [2] = ALGetDataSize  (& (output_partition.data), & (output_partition.metadata));
+    }
+
+    assert(output_size == ((char*)ms.ptr - (char*)ms.buf)); // Make sure we computed the output size right
+
+    ALPartitionDataDestroy (&output_partition);
+    memstreamDestroy(&ms, false);
+
+    // Wrap up, depending on buffer mode
+    if (*wrote_to_shared_buffer) {
+        shared_buffer_mark_written(fd, output_size);
+    } else {
+        var->data = output_buff;
+        var->data_size = output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    *transformed_len = output_size; // Return the size of the data buffer
+
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(alacrity)
+
+#endif
+
diff --git a/src/transforms/adios_transform_aplod_read.c b/src/transforms/adios_transform_aplod_read.c
new file mode 100644
index 0000000..f75e5a8
--- /dev/null
+++ b/src/transforms/adios_transform_aplod_read.c
@@ -0,0 +1,192 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "util.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef APLOD
+
+#include <stdint.h>
+
+#include "aplod.h"
+#include "adios_transform_identity_read.h"
+
+#define MAX_COMPONENTS 16
+
+typedef struct {
+    int numComponents;
+    int32_t components[MAX_COMPONENTS];
+} aplod_meta_t;
+
+void parse_aplod_meta(char *transform_metadata, aplod_meta_t *metaout) {
+    transform_metadata += sizeof (uint64_t);
+
+    metaout->numComponents = *(int8_t*)transform_metadata;
+    transform_metadata += sizeof(int8_t);
+
+    memcpy(metaout->components, transform_metadata, metaout->numComponents * sizeof(int32_t));
+    transform_metadata += metaout->numComponents * sizeof(int32_t);
+}
+
+typedef struct {
+    uint64_t numElements;
+    uint64_t startOff;
+
+    int numComponentsToUse;
+
+    char *outputBuf;
+} aplod_read_meta_t;
+
+int adios_transform_aplod_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                    adios_transform_pg_read_request *pg_reqgroup)
+{
+    int i;
+
+    // Retrieve APLOD metadata, determine how many components to use
+    aplod_meta_t aplodmeta;
+    parse_aplod_meta(reqgroup->transinfo->transform_metadata, &aplodmeta);
+
+    int numComponentsToUse;
+    if (!reqgroup->read_param || strcmp(reqgroup->read_param, "") == 0)
+        numComponentsToUse = aplodmeta.numComponents;
+    else
+        numComponentsToUse = atoi(reqgroup->read_param);
+
+    assert(numComponentsToUse > 0);
+    int totalComponentsSize = 0;
+    for (i = 0; i < numComponentsToUse; i++)
+        totalComponentsSize += aplodmeta.components[i];
+
+    //
+    const int fulltypelen = adios_get_type_size(reqgroup->transinfo->orig_type, NULL);
+    const uint64_t totalElementsInPG = pg_reqgroup->raw_var_length / fulltypelen; // We can do this because APLOD leaves PG size unchanged
+    uint64_t start_off = 0, end_off = totalElementsInPG;
+
+    char *buf;
+
+    // Determine if we should sieve or not. Current heuristic: only if using 1 component (sieving is always better in this case)
+    if (numComponentsToUse == 1) {
+        // Sieve
+        compute_sieving_offsets_for_pg_selection(pg_reqgroup->pg_intersection_sel, &pg_reqgroup->pg_bounds_sel->u.bb, &start_off, &end_off);
+
+        const uint64_t sieveElemCount = end_off - start_off;
+        buf = malloc(sieveElemCount * totalComponentsSize);
+
+        int numByteColsDone = 0;
+
+        // Read the element start_pos..end_pos sieving segment from each column
+        for (i = 0; i < numComponentsToUse; i++) {
+            adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_byte_segment(
+                    pg_reqgroup,
+                    totalElementsInPG * numByteColsDone + start_off * aplodmeta.components[i],
+                    sieveElemCount * aplodmeta.components[i],
+                    buf + sieveElemCount * numByteColsDone);
+            adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+            numByteColsDone += aplodmeta.components[i];
+        }
+    } else {
+        // Don't sieve
+        buf = malloc(totalElementsInPG * totalComponentsSize);
+
+        adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_byte_segment(
+                pg_reqgroup,
+                0,
+                totalElementsInPG * totalComponentsSize,
+                buf);
+        adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    }
+
+    // Set up some temp metadata to help us remember stuff for when the data is available
+    aplod_read_meta_t *arm = (aplod_read_meta_t*)malloc(sizeof(aplod_read_meta_t));
+    *arm = (aplod_read_meta_t){ .numElements = end_off - start_off, .outputBuf = buf,
+                                .startOff = start_off, .numComponentsToUse = numComponentsToUse };
+    pg_reqgroup->transform_internal = arm; // Store it for later use
+
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_aplod_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                            adios_transform_pg_read_request *pg_reqgroup,
+                                                            adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+
+
+adios_datablock * adios_transform_aplod_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                             adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint32_t elementSize = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+
+    aplod_read_meta_t *arm = (aplod_read_meta_t *)completed_pg_reqgroup->transform_internal;
+    completed_pg_reqgroup->transform_internal = NULL;
+    uint64_t raggedOffset = arm->startOff;
+    void *compressed_buff = arm->outputBuf;
+
+    uint32_t numElements = arm->numElements;
+    uint64_t decompressed_len = numElements * elementSize;
+    void* decompressed_buff = malloc (decompressed_len);
+
+    int8_t numComponents = 0;
+    int32_t *componentVector = 0;
+
+    aplod_meta_t aplodmeta;
+    parse_aplod_meta(reqgroup->transinfo->transform_metadata, &aplodmeta);
+
+    APLODConfig_t *config;
+                                                                                                                                                                                                                                            
+    if (reqgroup->transinfo->orig_type == adios_double) {
+        config = APLODConfigure (aplodmeta.components, aplodmeta.numComponents, APLOD_DOUBLE, APLOD_LITTLE_E);                                                                                                                              
+    } else if (reqgroup->transinfo->orig_type == adios_real){
+        config = APLODConfigure (aplodmeta.components, aplodmeta.numComponents, APLOD_FLOAT, APLOD_LITTLE_E);                                                                                                                               
+    }
+
+    // config->blockLengthElts = numElements; // Bug workaround, disable chunking
+    config->blockLengthElts = (numElements >= 65536 ? 65536: numElements); 
+
+    APLODReconstructComponents  (config,
+                                    numElements,
+                                    0,
+                                    arm->numComponentsToUse, //aplodmeta.numComponents,
+                                    1, // use mask
+                                    0, // mask = 0
+                                    decompressed_buff,
+                                    compressed_buff
+                                );
+
+    APLODDestroy(config);
+
+    // Clear the buffer pointers for all raw read requests, because they all point
+    // to the same buffer, and would be free'd by the framework if we didn't clear here
+    adios_transform_raw_read_request *rrr = completed_pg_reqgroup->subreqs;
+    for (; rrr; rrr = rrr->next)
+        rrr->data = NULL;
+
+    // Free the actual buffer, and the special metadata container we added
+    free (arm->outputBuf);
+    free (arm);
+
+    return adios_datablock_new_ragged_offset(reqgroup->transinfo->orig_type,
+                                             completed_pg_reqgroup->timestep,
+                                             completed_pg_reqgroup->pg_bounds_sel,
+                                             raggedOffset,
+                                             decompressed_buff);
+}
+
+adios_datablock * adios_transform_aplod_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(aplod);
+
+#endif
+
diff --git a/src/transforms/adios_transform_aplod_write.c b/src/transforms/adios_transform_aplod_write.c
new file mode 100644
index 0000000..2f7cad9
--- /dev/null
+++ b/src/transforms/adios_transform_aplod_write.c
@@ -0,0 +1,197 @@
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef APLOD
+
+#include "aplod.h"
+
+const int MAX_COMPONENTS = 8;
+
+uint16_t adios_transform_aplod_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    // Write the component vector here
+    // No more than 8 components per variable
+    return (sizeof (uint64_t) + sizeof (int8_t) + 8 * sizeof(int32_t));
+}
+
+uint64_t adios_transform_aplod_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars)
+{
+    return orig_size;
+}
+
+int adios_transform_aplod_apply(struct adios_file_struct *fd,
+                                struct adios_var_struct *var,
+                                uint64_t *transformed_len,
+                                int use_shared_buffer,
+                                int *wrote_to_shared_buffer)
+{
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff = var->data;
+
+    // max size supported is long double
+    int32_t componentVector[MAX_COMPONENTS];
+    int8_t numComponents = 0;
+    int32_t componentTotals = 0;
+
+    // printf ("[%s] byte = %d, real = %d, double = %d, this = %d\n", var->name, adios_byte, adios_real, adios_double, var->pre_transform_type);
+    // parse the aplod component vector parameters
+    /* Old, pre-specparse parameter parsing
+    if(var->transform_type_param)
+    {
+        char transform_param [1024];
+        char *transform_param_ptr       = 0;
+        uint16_t transform_param_length = 0;
+
+        char transform_param_option [256];
+
+        uint16_t idx = 0;
+
+        strcpy (transform_param, var->transform_type_param);
+        transform_param_ptr     = transform_param;
+        transform_param_length  = strlen (transform_param);
+
+        // Get the key
+        char *key = strtok (transform_param, "=");
+
+        if (strcmp (key, "CV") == 0) {
+
+            char *value = strtok (key, ",");
+            int32_t componentID = 0;
+
+            while (value) {
+                int32_t component = atoi (value);
+                if (component <= 0) {
+                    numComponents = 0;
+                    break ;
+                }
+
+                componentVector [componentID] = component;
+                componentTotals += component;
+                componentID ++;
+            }
+        }
+    }
+    */
+    int i;
+    int paramError = 0;
+    for (i = 0; i < var->transform_spec->param_count; i++) {
+        const char *comp = var->transform_spec->params[i].key;
+
+        int compInt = atoi(comp);
+
+        // Error if any component is non-positive
+        if (compInt <= 0 || numComponents >= MAX_COMPONENTS) {
+            numComponents = 0;
+            paramError = 1;
+            break;
+        }
+        componentVector[numComponents++] = compInt;
+        componentTotals += compInt;
+    }
+
+    uint32_t pre_transform_type_size = bp_get_type_size (var->pre_transform_type, "");
+
+    // Error if components were specified, and the components don't sum to the type size
+    if ((numComponents > 0) && (componentTotals != pre_transform_type_size)) {
+        paramError = 1;
+    }
+
+    if (paramError) {
+        fprintf(stderr, "Warning: at least one APLOD byte component is a non-positive integer, or all components do not sum to the type size (%d) for variable %s/%s. Using default APLOD configuration instead.\n",
+                bp_get_type_size (var->pre_transform_type, ""), var->path, var->name);
+    }
+
+    if ((numComponents == 0) || (componentTotals != pre_transform_type_size)) {
+        if (var->pre_transform_type == adios_double) {
+            componentVector [0] = 2;
+            componentVector [1] = 2;
+            componentVector [2] = 2;
+            componentVector [3] = 2;
+            numComponents = 4;
+        } else if (var->pre_transform_type == adios_real) {
+            componentVector [0] = 2;
+            componentVector [1] = 2;
+            numComponents = 2;
+        } else {
+            numComponents = 0;
+
+            while (componentTotals < pre_transform_type_size - 2) {
+                componentVector [numComponents ++] = 2;
+                componentTotals += 2;
+            }
+
+            componentVector [numComponents ++] = pre_transform_type_size - componentTotals;
+        }
+    }
+
+    // decide the output buffer
+    uint64_t output_size = input_size;
+    void* output_buff = NULL;
+
+    if (use_shared_buffer) {
+        // If shared buffer is permitted, serialize to there
+        assert(shared_buffer_reserve(fd, output_size));
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    } else { // Else, fall back to var->data memory allocation
+        output_buff = malloc(output_size);
+        assert(output_buff);
+    }
+    *wrote_to_shared_buffer = use_shared_buffer;
+
+    // APLOD specific code - Start
+    uint32_t numElements = input_size / bp_get_type_size (var->pre_transform_type, "");
+
+    APLODConfig_t *config;
+
+    if (var->pre_transform_type == adios_double) {                                                                                                                                                                                          
+        config = APLODConfigure (componentVector, numComponents, APLOD_DOUBLE, APLOD_LITTLE_E);
+    } else if (var->pre_transform_type == adios_real) {                                                                                                                                                                                     
+        config = APLODConfigure (componentVector, numComponents, APLOD_FLOAT, APLOD_LITTLE_E);
+    }                                                                                                                                                                                                                                                             
+    // config->blockLengthElts = numElements; // Bug workaround, disable chunking
+    config->blockLengthElts = (numElements >= 65536 ? 65536: numElements);
+
+    APLODShuffleComponents (config, numElements, 0, numComponents, input_buff, output_buff);
+    // APLOD specific code - End
+
+    // Wrap up, depending on buffer mode
+    if (*wrote_to_shared_buffer) {
+        shared_buffer_mark_written(fd, output_size);
+    } else {
+        var->data = output_buff;
+        var->data_size = output_size;
+        var->free_data = adios_flag_yes;
+    }
+    *transformed_len = output_size; // Return the size of the data buffer
+
+    // Do I copy the PLODHandle_t object as the metadata or do I serialize it into the buffer as well
+    if(var->transform_metadata && var->transform_metadata_len > 0)
+    {
+        memcpy (var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy (var->transform_metadata + sizeof (uint64_t), &numComponents, sizeof (numComponents));
+        memcpy (var->transform_metadata + sizeof (uint64_t) + sizeof (numComponents), componentVector, numComponents * sizeof (int32_t));
+
+    }
+
+    // Cleanup time
+    APLODDestroy(config);
+
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(aplod)
+
+#endif
+
diff --git a/src/transforms/adios_transform_bzip2_read.c b/src/transforms/adios_transform_bzip2_read.c
new file mode 100755
index 0000000..2e75924
--- /dev/null
+++ b/src/transforms/adios_transform_bzip2_read.c
@@ -0,0 +1,118 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+#include <limits.h>
+#include "util.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef BZIP2
+
+#include "bzlib.h"
+
+int decompress_bzip2_pre_allocated(const void* input_data, const uint64_t input_len,
+                                    void* output_data, uint64_t* output_len)
+{
+    // bzip2 only support input size of 32 bit integer
+
+    assert(input_data != NULL
+            && input_len > 0 && input_len <= UINT_MAX
+            && output_data != NULL
+            && output_len != NULL && *output_len > 0 && *output_len < UINT_MAX);
+
+    unsigned int input_len_32 = (unsigned int)input_len;
+    unsigned int output_len_32 = (unsigned int)(*output_len);
+
+    int bz_rtn = BZ2_bzBuffToBuffDecompress((char*)output_data, &output_len_32,
+                                                (char*)input_data, input_len_32,
+                                                0, 0 );
+
+    if(bz_rtn != BZ_OK)
+    {
+        printf("BZ2_bzBuffToBuffDecompress error %d\n", bz_rtn);
+        return -1;
+    }
+
+    *output_len = output_len_32;
+    return 0;
+}
+
+int adios_transform_bzip2_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                       adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    assert(buf);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_bzip2_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                                adios_transform_pg_read_request *pg_reqgroup,
+                                                                adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+adios_datablock * adios_transform_bzip2_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                                adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint64_t compressed_size = (uint64_t)completed_pg_reqgroup->raw_var_length;
+    void* compressed_data = completed_pg_reqgroup->subreqs->data;
+    
+    uint64_t uncompressed_size_meta = *((uint64_t*)reqgroup->transinfo->transform_metadata);
+    char compress_ok = *((char*)(reqgroup->transinfo->transform_metadata + sizeof(uint64_t)));
+
+    uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+    {
+        uncompressed_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+    }
+    
+    if(uncompressed_size_meta != uncompressed_size)
+    {
+        printf("WARNING: possible wrong data size or corrupted metadata\n");
+    }
+    
+    void* uncompressed_data = malloc(uncompressed_size);
+    if(!uncompressed_data)
+    {
+        return NULL;
+    }
+
+    if(compress_ok == 1)    // compression is successful
+    {
+        
+        int rtn = decompress_bzip2_pre_allocated(compressed_data, compressed_size, uncompressed_data, &uncompressed_size);
+        if(rtn != 0)
+        {
+            return NULL;
+        }
+    }
+    else    // just copy the buffer since data is not compressed
+    {
+        // printf("compression failed before, fall back to memory copy\n");
+        memcpy(uncompressed_data, compressed_data, compressed_size);
+    }
+
+    return adios_datablock_new(reqgroup->transinfo->orig_type,
+                               completed_pg_reqgroup->timestep,
+                               completed_pg_reqgroup->pg_bounds_sel,
+                               uncompressed_data);
+}
+
+adios_datablock * adios_transform_bzip2_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(bzip2);
+
+#endif
+
diff --git a/src/transforms/adios_transform_bzip2_write.c b/src/transforms/adios_transform_bzip2_write.c
new file mode 100755
index 0000000..b4118a3
--- /dev/null
+++ b/src/transforms/adios_transform_bzip2_write.c
@@ -0,0 +1,156 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef BZIP2
+
+#include "bzlib.h"
+
+int compress_bzip2_pre_allocated(const void* input_data,
+                                    const uint64_t input_len,
+                                    void* output_data,
+                                    uint64_t* output_len,
+                                    int blockSize100k)
+{
+    // bzip2 only support input size of 32 bit integer
+
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    unsigned int input_len_32 = (unsigned int)input_len;
+    unsigned int output_len_32 = (unsigned int)(*output_len);
+
+    int bz_rtn = BZ2_bzBuffToBuffCompress((char*)output_data,
+                                            &output_len_32,
+                                            (char*)input_data,
+                                            input_len_32,
+                                            blockSize100k,
+                                            0,
+                                            30);
+
+    if(bz_rtn != BZ_OK)
+        return -1;
+
+    *output_len = output_len_32;
+    return 0;
+}
+
+uint16_t adios_transform_bzip2_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return (sizeof(uint64_t) + sizeof(char));    // metadata: original data size (uint64_t) + compression succ flag (char)
+}
+
+uint64_t adios_transform_bzip2_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars)
+{
+    return (orig_size);
+}
+
+int adios_transform_bzip2_apply(struct adios_file_struct *fd,
+                                struct adios_var_struct *var,
+                                uint64_t *transformed_len,
+                                int use_shared_buffer,
+                                int *wrote_to_shared_buffer)
+{
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff = var->data;
+
+    // parse the compressiong parameter
+    /* Pre-specparse code
+    if(var->transform_type_param
+        && strlen(var->transform_type_param) > 0
+        && is_digit_str(var->transform_type_param))
+    {
+        compress_level = atoi(var->transform_type_param);
+        if(compress_level > 9 || compress_level < 1)
+        {
+            compress_level = 9;
+        }
+    }
+    */
+    int compress_level = 9;
+    if (var->transform_spec->param_count > 0) {
+        compress_level = atoi(var->transform_spec->params[0].key);
+        if (compress_level < 1 || compress_level > 9)
+            compress_level = 9;
+    }
+
+
+    // decide the output buffer
+    uint64_t output_size = adios_transform_bzip2_calc_vars_transformed_size(adios_transform_bzip2, input_size, 1);
+    void* output_buff = NULL;
+
+    if (use_shared_buffer)    // If shared buffer is permitted, serialize to there
+    {
+        *wrote_to_shared_buffer = 1;
+        if (!shared_buffer_reserve(fd, output_size))
+        {
+            log_error("Out of memory allocating %llu bytes for %s for bzip2 transform\n", output_size, var->name);
+            return 0;
+        }
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    }
+    else    // Else, fall back to var->data memory allocation
+    {
+        *wrote_to_shared_buffer = 0;
+        output_buff = malloc(output_size);
+        if (!output_buff)
+        {
+            log_error("Out of memory allocating %llu bytes for %s for bzip2 transform\n", output_size, var->name);
+            return 0;
+        }
+    }
+
+    uint64_t actual_output_size = output_size;
+    char compress_ok = 1;
+
+    int rtn = compress_bzip2_pre_allocated(input_buff, input_size, output_buff, &actual_output_size, compress_level);
+
+    if(0 != rtn                     // compression failed for some reason, then just copy the buffer
+        || actual_output_size > input_size)  // or size after compression is even larger (not likely to happen since compression lib will return non-zero in this case)
+    {
+        // printf("compression failed, fall back to memory copy\n");
+        memcpy(output_buff, input_buff, input_size);
+        actual_output_size = input_size;
+        compress_ok = 0;    // succ sign set to 0
+    }
+
+    // Wrap up, depending on buffer mode
+    if (use_shared_buffer)
+    {
+        shared_buffer_mark_written(fd, actual_output_size);
+    }
+    else
+    {
+        var->data = output_buff;
+        var->data_size = actual_output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    // copy the metadata, simply the original size before compression
+    if(var->transform_metadata && var->transform_metadata_len > 0)
+    {
+        memcpy(var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy(var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
+    }
+
+    *transformed_len = actual_output_size; // Return the size of the data buffer
+
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(bzip2)
+
+#endif
+
diff --git a/src/transforms/adios_transform_identity_read.c b/src/transforms/adios_transform_identity_read.c
new file mode 100644
index 0000000..646201a
--- /dev/null
+++ b/src/transforms/adios_transform_identity_read.c
@@ -0,0 +1,124 @@
+/*
+ * adios_transform_identity_read.c
+ *
+ * An implementation of the "identity" transform, which does nothing, but
+ * exercises the transform framework for testing.
+ *
+ *  Created on: Jul 31, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include "util.h"
+#include "adios_subvolume.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+// Implementation of the "identity" transform, which does nothing to
+// the data, but exercises the transform framework for testing.
+
+#define MAX_DIMS 32
+
+void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_sel,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgbb,
+                                              uint64_t *start_off_ptr, uint64_t *end_off_ptr) {
+    uint64_t i;
+    uint64_t tmp_point[MAX_DIMS]; // For scratchwork
+
+    uint64_t start_off, end_off; // Start/end byte offsets to read between
+    switch (intersect_sel->type) {
+    case ADIOS_SELECTION_BOUNDINGBOX:
+    {
+        const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *bb = &intersect_sel->u.bb;
+
+        vector_sub(bb->ndim, tmp_point, bb->start, pgbb->start); // Selection box start relative to PG
+        start_off = compute_linear_offset_in_volume(bb->ndim, tmp_point, pgbb->count);
+
+        vector_add(bb->ndim, tmp_point, tmp_point, bb->count); // Selection box end relative to PG
+        for (i = 0; i < bb->ndim; i++)
+            tmp_point[i]--; // Reduce all by 1 because bb->start+bb->count is exclusive
+        end_off = compute_linear_offset_in_volume(bb->ndim, tmp_point, pgbb->count) + 1; // Add 1 because this offset points to the last element, and we want one past that since end_off is exclusive
+
+        break;
+    }
+    case ADIOS_SELECTION_POINTS:
+    {
+        const ADIOS_SELECTION_POINTS_STRUCT *pts = &intersect_sel->u.points;
+
+        start_off = UINT64_MAX; // Set it to max so that the first point brings it down
+        end_off = 0;
+        for (i = 0; i < pts->npoints; i++) {
+            vector_sub(pts->ndim, tmp_point, pts->points + i * pts->ndim, pgbb->start);
+
+            const uint64_t point_off = compute_linear_offset_in_volume(pts->ndim, tmp_point, pgbb->count);
+            if (point_off < start_off)
+                start_off = point_off;
+            if (point_off > end_off)
+                end_off = point_off;
+        }
+
+        end_off++; // Advance past the last element to make it exclusive
+
+        break;
+    }
+    }
+
+    *start_off_ptr = start_off;
+    *end_off_ptr = end_off;
+}
+
+int adios_transform_identity_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                       adios_transform_pg_read_request *pg_reqgroup) {
+
+    uint64_t start_off, end_off; // Start/end byte offsets to read between
+    compute_sieving_offsets_for_pg_selection(pg_reqgroup->pg_intersection_sel, &pg_reqgroup->pg_bounds_sel->u.bb, &start_off, &end_off);
+
+    int datum_size = adios_get_type_size(reqgroup->transinfo->orig_type, NULL); // Get the data type size
+
+    // Allocate a buffer for the read, and create a raw read request for it
+    const uint64_t buflen = (end_off - start_off) * datum_size;
+    void *buf = malloc(buflen);
+    adios_transform_raw_read_request *subreq =
+            adios_transform_raw_read_request_new_byte_segment(pg_reqgroup, start_off * datum_size, buflen, buf);
+
+    // Store the ragged start offset
+    subreq->transform_internal = malloc(sizeof(uint64_t));
+    *(uint64_t*)subreq->transform_internal = start_off;
+
+    // Append the raw read request
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_identity_subrequest_completed(
+                    adios_transform_read_request *reqgroup,
+                    adios_transform_pg_read_request *pg_reqgroup,
+                    adios_transform_raw_read_request *completed_subreq) {
+    return NULL;
+}
+
+adios_datablock * adios_transform_identity_pg_reqgroup_completed(
+        adios_transform_read_request *reqgroup,
+        adios_transform_pg_read_request *completed_pg_reqgroup) {
+
+    // Transfer ownership of the data buffer
+    void *pg_data = completed_pg_reqgroup->subreqs->data;
+    completed_pg_reqgroup->subreqs->data = NULL;
+
+    uint64_t ragged_offset = *(uint64_t*)completed_pg_reqgroup->subreqs->transform_internal;
+
+    return adios_datablock_new_ragged_offset(reqgroup->transinfo->orig_type,
+                                            completed_pg_reqgroup->timestep,
+                                            completed_pg_reqgroup->pg_bounds_sel,
+                                            ragged_offset,
+                                            pg_data);
+}
+
+adios_datablock * adios_transform_identity_reqgroup_completed(
+        adios_transform_read_request *completed_reqgroup) {
+    return NULL;
+}
diff --git a/src/transforms/adios_transform_identity_read.h b/src/transforms/adios_transform_identity_read.h
new file mode 100644
index 0000000..03a2b28
--- /dev/null
+++ b/src/transforms/adios_transform_identity_read.h
@@ -0,0 +1,27 @@
+/*
+ * adios_transform_identity_read.h
+ *
+ *  Created on: Apr 12, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#ifndef ADIOS_TRANSFORM_IDENTITY_READ_H_
+#define ADIOS_TRANSFORM_IDENTITY_READ_H_
+
+// This function is shared with APLOD
+/*
+ * Computes the linearized element start and end offsets of a selection (intersect_sel) within
+ * a PG (bounded by pgbb). If all elements between these two offsets is read, and then
+ * returned as a datablock with ragged offset equal to the start offset returned here,
+ * all data within intersect_sel will be present and results patching will work.
+ * @param intersect_sel the intersecting portion of some global read selection with a PG. It must
+ *        be fully contained in the PG bounds, as specified by pgbb.
+ * @param pgbb the bounds of the PG
+ * @param start_off_ptr a pointer to where the start offset will be stored
+ * @param end_off_ptr a pointer to where the end offset will be stored
+ */
+void compute_sieving_offsets_for_pg_selection(const ADIOS_SELECTION *intersect_sel,
+                                              const ADIOS_SELECTION_BOUNDINGBOX_STRUCT *pgbb,
+                                              uint64_t *start_off_ptr, uint64_t *end_off_ptr);
+
+#endif /* ADIOS_TRANSFORM_IDENTITY_READ_H_ */
diff --git a/src/transforms/adios_transform_identity_write.c b/src/transforms/adios_transform_identity_write.c
new file mode 100644
index 0000000..b1570d9
--- /dev/null
+++ b/src/transforms/adios_transform_identity_write.c
@@ -0,0 +1,33 @@
+/*
+ * adios_transform_identity_write.c
+ *
+ * An implementation of the "identity" transform, which does nothing, but
+ * exercises the transform framework for testing.
+ *
+ *  Created on: Jul 31, 2012
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdint.h>
+#include <assert.h>
+
+#include "adios_internals.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+
+
+uint16_t adios_transform_identity_get_metadata_size(struct adios_transform_spec *transform_spec) {
+    return 0;
+}
+
+uint64_t adios_transform_identity_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars) {
+    return orig_size;
+}
+int adios_transform_identity_apply(struct adios_file_struct *fd, struct adios_var_struct *var, uint64_t *transformed_len,
+                                   int use_shared_buffer, int *wrote_to_shared_buffer) {
+    // Just use what is already in var->data; size remains the same, and no
+    // shared buffer is used
+    *transformed_len = adios_transform_get_pre_transform_var_size(fd->group, var);
+    *wrote_to_shared_buffer = 0;
+    return 1;
+}
diff --git a/src/transforms/adios_transform_isobar_read.c b/src/transforms/adios_transform_isobar_read.c
new file mode 100755
index 0000000..076fb62
--- /dev/null
+++ b/src/transforms/adios_transform_isobar_read.c
@@ -0,0 +1,131 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "util.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef ISOBAR
+
+#include "isobar.h"
+
+#define ELEMENT_BYTES    8
+
+int decompress_isobar_pre_allocated(const void* input_data, const uint64_t input_len,
+                                    void* output_data, uint64_t* output_len)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    enum ISOBAR_status status;
+    struct isobar_stream i_strm;
+
+    status = isobarInflateInit(&i_strm, ELEMENT_BYTES);
+    if(status != ISOBAR_SUCCESS)
+    {
+        printf("isobarInflateInit error\n");
+        return -1;
+    }
+
+    i_strm.next_in = (void*) input_data;
+    i_strm.avail_in = input_len;
+    i_strm.next_out = (void*) output_data;
+    i_strm.avail_out = *output_len;;
+
+    status = isobarInflate(&i_strm, ISOBAR_FINISH);
+    if(status != ISOBAR_SUCCESS)
+    {
+        printf("isobarInflate error\n");
+        return -1;
+    }
+
+    status = isobarInflateEnd(&i_strm);
+    if(status != ISOBAR_SUCCESS)
+    {
+        printf("isobarInflateEnd error\n");
+        return -1;
+    }
+
+    return 0;
+}
+
+int adios_transform_isobar_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                    adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    assert(buf);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_isobar_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                            adios_transform_pg_read_request *pg_reqgroup,
+                                                            adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+
+
+adios_datablock * adios_transform_isobar_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                             adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint64_t compressed_size = (uint64_t)completed_pg_reqgroup->raw_var_length;
+    void* compressed_data = completed_pg_reqgroup->subreqs->data;
+    
+    uint64_t uncompressed_size_meta = *((uint64_t*)reqgroup->transinfo->transform_metadata);
+    char compress_ok = *((char*)(reqgroup->transinfo->transform_metadata + sizeof(uint64_t)));
+
+    uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+    {
+        uncompressed_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+    }
+
+    if(uncompressed_size_meta != uncompressed_size)
+    {
+        printf("WARNING: possible wrong data size or corrupted metadata\n");
+    }
+    
+    void* uncompressed_data = malloc(uncompressed_size);
+    if(!uncompressed_data)
+    {
+        return NULL;
+    }
+
+    if(compress_ok == 1)    // compression is successful
+    {
+        int rtn = decompress_isobar_pre_allocated(compressed_data, compressed_size, uncompressed_data, &uncompressed_size);
+        if(0 != rtn)
+        {
+            return NULL;
+        }
+    }
+    else    // just copy the buffer since data is not compressed
+    {
+        // printf("compression failed before, fall back to memory copy\n");
+        memcpy(uncompressed_data, compressed_data, compressed_size);
+    }
+
+    return adios_datablock_new(reqgroup->transinfo->orig_type,
+                               completed_pg_reqgroup->timestep,
+                               completed_pg_reqgroup->pg_bounds_sel,
+                               uncompressed_data);
+}
+
+adios_datablock * adios_transform_isobar_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(isobar);
+
+#endif
+
diff --git a/src/transforms/adios_transform_isobar_write.c b/src/transforms/adios_transform_isobar_write.c
new file mode 100755
index 0000000..e9a47ff
--- /dev/null
+++ b/src/transforms/adios_transform_isobar_write.c
@@ -0,0 +1,190 @@
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef ISOBAR
+
+#include "isobar.h"
+
+#define ELEMENT_BYTES    8
+
+static int is_digit_str(char* input_str)
+{
+    if(strlen(input_str) > 2)    // at most 2 digits for isobar
+    {
+        return 0;
+    }
+
+    int i = 0;
+    for(i = 0; i < strlen(input_str); i++)
+    {
+        if(input_str[i] > '9' || input_str[i] < '0')
+        {
+            return 0;
+        }
+    }
+    return 1;
+}
+
+int compress_isobar_pre_allocated(const void* input_data, const uint64_t input_len,
+                                  void* output_data, uint64_t* output_len, int compress_level)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    enum ISOBAR_status status;
+    struct isobar_stream i_strm;
+
+    status = isobarDeflateInit(&i_strm, ELEMENT_BYTES, compress_level);
+    if(status != ISOBAR_SUCCESS)
+    {
+        return -1;
+    }
+
+    i_strm.next_in = (void*) input_data;
+    i_strm.avail_in = input_len;
+
+    status = isobarDeflateAnalysis(&i_strm);
+    if(status != ISOBAR_SUCCESS)
+    {
+        return -1;
+    }
+
+    i_strm.next_out = (void*) output_data;
+    i_strm.avail_out = input_len;
+
+    status = isobarDeflate(&i_strm, ISOBAR_FINISH);
+    if(status != ISOBAR_SUCCESS)
+    {
+        return -1;
+    }
+
+    status = isobarDeflateEnd(&i_strm);
+    if(status != ISOBAR_SUCCESS)
+    {
+        return -1;
+    }
+
+    *output_len = input_len - i_strm.avail_out;
+    return 0;
+}
+
+uint16_t adios_transform_isobar_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return (sizeof(uint64_t) + sizeof(char));    // metadata: original data size (uint64_t) + compression succ flag (char)
+}
+
+uint64_t adios_transform_isobar_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars)
+{
+    return orig_size;
+}
+
+int adios_transform_isobar_apply(struct adios_file_struct *fd,
+                                 struct adios_var_struct *var,
+                                 uint64_t *transformed_len,
+                                 int use_shared_buffer,
+                                 int *wrote_to_shared_buffer)
+{
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff = var->data;
+
+    // parse the compressiong parameter
+    /* pre-specparse code
+    int compress_level = ISOBAR_SPEED;
+    if(var->transform_type_param
+        && strlen(var->transform_type_param) > 0
+        && is_digit_str(var->transform_type_param))
+    {
+        compress_level = atoi(var->transform_type_param);
+        if(compress_level > 9 || compress_level < 1)
+        {
+            compress_level = ISOBAR_SPEED;
+        }
+    }
+    */
+    int compress_level = ISOBAR_SPEED;
+    if (var->transform_spec->param_count > 0) {
+        compress_level = atoi(var->transform_spec->params[0].key);
+        if (compress_level < 1 || compress_level > 9)
+            compress_level = ISOBAR_SPEED;
+    }
+
+    // decide the output buffer
+    uint64_t output_size = adios_transform_isobar_calc_vars_transformed_size(adios_transform_isobar, input_size, 1); 
+
+    void* output_buff = NULL;
+
+    if (use_shared_buffer)    // If shared buffer is permitted, serialize to there
+    {
+        *wrote_to_shared_buffer = 1;
+        if (!shared_buffer_reserve(fd, output_size))
+        {
+            log_error("Out of memory allocating %llu bytes for %s for isobar transform\n", output_size, var->name);
+            return 0;
+        }
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    }
+    else    // Else, fall back to var->data memory allocation
+    {
+        *wrote_to_shared_buffer = 0;
+        output_buff = malloc(output_size);
+        if (!output_buff)
+        {
+            log_error("Out of memory allocating %llu bytes for %s for isobar transform\n", output_size, var->name);
+            return 0;
+        }
+    }
+
+    uint64_t actual_output_size = output_size;
+    char compress_ok = 1;
+
+    // compress it
+    int rtn = compress_isobar_pre_allocated(input_buff, input_size, output_buff, &actual_output_size, compress_level);
+
+    if(0 != rtn                     // compression failed for some reason, then just copy the buffer
+        || actual_output_size > input_size)  // or size after compression is even larger (not likely to happen since compression lib will return non-zero in this case)
+    {
+        // printf("compression failed, fall back to memory copy\n");
+        memcpy(output_buff, input_buff, input_size);
+        actual_output_size = input_size;
+        compress_ok = 0;    // succ sign set to 0
+    }
+
+    // Wrap up, depending on buffer mode
+    if (use_shared_buffer)
+    {
+        shared_buffer_mark_written(fd, actual_output_size);
+    }
+    else
+    {
+        var->data = output_buff;
+        var->data_size = actual_output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    // copy the metadata, simply the original size before compression
+    if(var->transform_metadata && var->transform_metadata_len > 0)
+    {
+        memcpy(var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy(var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
+    }
+
+    *transformed_len = actual_output_size; // Return the size of the data buffer
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(isobar)
+
+#endif
+
diff --git a/src/transforms/adios_transform_szip.h b/src/transforms/adios_transform_szip.h
new file mode 100644
index 0000000..09757a9
--- /dev/null
+++ b/src/transforms/adios_transform_szip.h
@@ -0,0 +1,139 @@
+
+#include <stdio.h>
+#include "szlib.h"
+
+#define MIN(a,b)    (((a)<(b)) ? (a) : (b))
+
+#define VERIFY_INPUT_PRE() assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0)
+
+enum COMPRESS_TYPE
+{
+     compress_type_unknown         = -1
+    ,compress_type_none            = 0
+    ,compress_type_zlib            = 1
+    ,compress_type_bzlib2          = 2
+    ,compress_type_szip            = 3
+    ,num_compress_types            = 4 // Not counting unknown; KEEP THIS UPDATED
+};
+
+
+static const struct
+{
+    const char *alias;                // A possible name for a compres method
+    enum COMPRESS_TYPE type;    // The corresponding COMPRESS_TYPE
+} COMPRESS_TYPE_NAMES[] = {
+     { "unknown"    , compress_type_unknown }
+
+    ,{ "none"        , compress_type_none }
+    ,{ "no"            , compress_type_none }
+    ,{ "raw"        , compress_type_none }
+    ,{ ""            , compress_type_none }
+
+    ,{ "zlib"    , compress_type_zlib }
+    ,{ "zip"    , compress_type_zlib }
+
+    ,{ "bzlib2"    , compress_type_bzlib2 }
+    ,{ "bzip2"    , compress_type_bzlib2 }
+
+    ,{ "szlib"    , compress_type_szip }
+    ,{ "szip"    , compress_type_szip }
+};
+
+
+// #define EXPAND_SIZE(s) (((double)(s)*1.01)+12)
+
+#define EXPAND_SIZE(s) (s)
+
+/////////////// initilization for szip ///////////////
+
+enum
+{
+    O32_LITTLE_ENDIAN = 0x03020100ul,
+    O32_BIG_ENDIAN = 0x00010203ul,
+    O32_PDP_ENDIAN = 0x01000302ul
+};
+
+static const union { unsigned char bytes[4]; uint32_t value; } o32_host_order =
+    { { 0, 1, 2, 3 } };
+
+#define O32_HOST_ORDER (o32_host_order.value)        
+
+// #define H5_SZIP_ALLOW_K13_OPTION_MASK   1
+// #define H5_SZIP_CHIP_OPTION_MASK        2
+// #define H5_SZIP_EC_OPTION_MASK          4
+// #define H5_SZIP_NN_OPTION_MASK          32
+// #define H5_SZIP_MAX_PIXELS_PER_BLOCK    32
+
+static int init_szip_parameters(SZ_com_t* p_sz_param, const uint32_t ndims, const uint64_t* dim)
+{
+    assert(p_sz_param && ndims > 0 && dim);
+    p_sz_param->options_mask = SZ_NN_OPTION_MASK;
+    
+    p_sz_param->options_mask &= (~SZ_CHIP_OPTION_MASK);
+    p_sz_param->options_mask |= SZ_ALLOW_K13_OPTION_MASK;
+
+    /* Always set "raw" (no szip header) flag for data */
+    p_sz_param->options_mask |= SZ_RAW_OPTION_MASK;
+
+    /* Mask off the LSB and MSB options, if they were given */
+    /* (The HDF5 library sets them internally, as needed) */
+    p_sz_param->options_mask &= ~(SZ_LSB_OPTION_MASK|SZ_MSB_OPTION_MASK);
+    
+    p_sz_param->options_mask &= ~(SZ_LSB_OPTION_MASK|SZ_MSB_OPTION_MASK);
+    switch(O32_HOST_ORDER) 
+    {
+        case O32_LITTLE_ENDIAN:      /* Little-endian byte order */
+            // printf("little endian\n");
+            p_sz_param->options_mask |= SZ_LSB_OPTION_MASK;
+            break;
+
+        case O32_BIG_ENDIAN:      /* Big-endian byte order */
+            p_sz_param->options_mask |= SZ_MSB_OPTION_MASK;
+            break;
+
+        default:
+            p_sz_param->options_mask |= SZ_LSB_OPTION_MASK;
+            break;
+    } /* end switch */
+    
+    p_sz_param->bits_per_pixel = 64;
+    p_sz_param->pixels_per_block = 32;
+    
+    uint32_t npoints = 1;
+    uint32_t i = 0;
+    for(i = 0; i < ndims; i++)
+    {
+        npoints *= dim[i];
+    }
+    
+    uint32_t scanline = dim[ndims - 1];
+    
+    if(scanline < p_sz_param->pixels_per_block) 
+    {
+
+        if(npoints < 0 || npoints < p_sz_param->pixels_per_block)
+        {
+            printf("buffer too small for szip compression %d\n", npoints);
+            return -1;
+        }
+        
+        scanline = MIN((p_sz_param->pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE), npoints);
+    }
+    else 
+    {
+        if(scanline <= SZ_MAX_PIXELS_PER_SCANLINE)
+        {
+            scanline = MIN((p_sz_param->pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE), scanline);
+        }
+        else
+        {
+            scanline = p_sz_param->pixels_per_block * SZ_MAX_BLOCKS_PER_SCANLINE;
+        }
+    }
+    
+    p_sz_param->pixels_per_scanline = scanline;
+    return 0;
+}
+////////////////////////////////////////////////////////////
+
+
diff --git a/src/transforms/adios_transform_szip_read.c b/src/transforms/adios_transform_szip_read.c
new file mode 100644
index 0000000..b9a7df2
--- /dev/null
+++ b/src/transforms/adios_transform_szip_read.c
@@ -0,0 +1,95 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include "util.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef SZIP
+
+#include "adios_transform_szip.h"
+
+int decompress_szip_pre_allocated(const void* input_data, const uint64_t input_len,
+                                    void* output_data, uint64_t* output_len,
+                                    const uint32_t ndims, const uint64_t* dim)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    SZ_com_t sz_param;
+
+    int sz_rtn = init_szip_parameters(&sz_param, ndims, dim);
+    if(sz_rtn != 0)
+    {
+        return -1;
+    }
+
+    size_t temp_len = *output_len;
+
+    sz_rtn = SZ_BufftoBuffDecompress(output_data, &temp_len, input_data, input_len, &sz_param);
+    if(sz_rtn != SZ_OK)
+    {
+        printf("SZ_BufftoBuffDecompress error %d\n", sz_rtn);
+        return -1;
+    }
+
+    *output_len = (uint64_t)(temp_len);
+
+    return 0;
+}
+
+int adios_transform_szip_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_szip_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                            adios_transform_pg_read_request *pg_reqgroup,
+                                                            adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+adios_datablock * adios_transform_szip_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                                adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint64_t raw_size = (uint64_t)completed_pg_reqgroup->raw_var_length;
+    void* raw_buff = completed_pg_reqgroup->subreqs->data;
+
+    uint64_t orig_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+        orig_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+
+    void* orig_buff = malloc(orig_size);
+
+    int ndims = 1;
+    uint64_t dim[1] = {orig_size / sizeof(double)};
+    int rtn = decompress_szip_pre_allocated(raw_buff, raw_size, orig_buff, &orig_size, ndims, dim);
+    if(rtn != 0)
+    {
+        return NULL;
+    }
+
+    return adios_datablock_new(reqgroup->transinfo->orig_type,
+                               completed_pg_reqgroup->timestep,
+                               completed_pg_reqgroup->pg_bounds_sel,
+                               orig_buff);
+}
+
+adios_datablock * adios_transform_szip_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(szip);
+
+#endif
+
diff --git a/src/transforms/adios_transform_szip_write.c b/src/transforms/adios_transform_szip_write.c
new file mode 100755
index 0000000..bdb6b2e
--- /dev/null
+++ b/src/transforms/adios_transform_szip_write.c
@@ -0,0 +1,116 @@
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef SZIP
+
+#include "adios_transform_szip.h"
+
+// assume double precision only
+int compress_szip_pre_allocated(const void* input_data, const uint64_t input_len,
+                                void* output_data, uint64_t* output_len,
+                                const int ndims, const uint64_t* dim)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    int rtn = 0;
+
+    SZ_com_t sz_param;
+
+    rtn = init_szip_parameters(&sz_param, ndims, dim);
+    if (rtn != 0)
+    {
+        return -1;
+    }
+
+    size_t temp = *output_len;
+
+    rtn = SZ_BufftoBuffCompress(output_data, &temp, input_data, input_len, &sz_param);
+    if (SZ_OK != rtn)
+    {
+        // printf("SZ_BufftoBuffCompress error %d\n", rtn);
+        return -1;
+    }
+
+    *output_len = temp;
+
+    return 0;
+}
+
+uint16_t adios_transform_szip_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return 0;
+}
+
+uint64_t adios_transform_szip_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars) {
+    return orig_size;
+}
+
+int adios_transform_szip_apply(struct adios_file_struct *fd,
+                                    struct adios_var_struct *var,
+                                    uint64_t *transformed_len,
+                                    int use_shared_buffer,
+                                    int *wrote_to_shared_buffer)
+{
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff = var->data;
+
+    // decide the output buffer
+    uint64_t output_size = adios_transform_szip_calc_vars_transformed_size(adios_transform_szip, input_size, 1);
+    void* output_buff = NULL;
+
+    if (use_shared_buffer) {
+        // If shared buffer is permitted, serialize to there
+        assert(shared_buffer_reserve(fd, output_size));
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    } else { // Else, fall back to var->data memory allocation
+        output_buff = malloc(output_size);
+        assert(output_buff);
+    }
+    *wrote_to_shared_buffer = use_shared_buffer;
+
+    // compress it
+    int ndims = 1;
+    uint64_t dim[1] = {input_size/sizeof(double)};
+
+    // double d1 = dclock();
+    int rtn = compress_szip_pre_allocated(input_buff, input_size, output_buff, &output_size, ndims, dim);
+    // double d2 = dclock();
+
+    if(0 != rtn                     // compression failed for some reason, then just copy the buffer
+        || output_size > input_size)  // or size after compression is even larger (not likely to happen since compression lib will return non-zero in this case)
+    {
+        return 0;
+    }
+
+    // printf("compress_szip_succ|%d|%d|%d|%f\n", rtn, input_size, actual_output_size, d2 - d1);
+
+    // Wrap up, depending on buffer mode
+    if (*wrote_to_shared_buffer) {
+        shared_buffer_mark_written(fd, output_size);
+    } else {
+        var->data = output_buff;
+        var->data_size = output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    *transformed_len = output_size; // Return the size of the data buffer
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(szip)
+
+#endif
+
diff --git a/src/transforms/adios_transform_zlib_read.c b/src/transforms/adios_transform_zlib_read.c
new file mode 100755
index 0000000..521f36f
--- /dev/null
+++ b/src/transforms/adios_transform_zlib_read.c
@@ -0,0 +1,114 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "util.h"
+#include "adios_logger.h"
+#include "adios_transforms_hooks_read.h"
+#include "adios_transforms_reqgroup.h"
+
+#ifdef ZLIB
+
+#include "zlib.h"
+
+int decompress_zlib_pre_allocated(const void* input_data, 
+                                  const uint64_t input_len,
+                                  void* output_data, 
+                                  uint64_t* output_len)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    uLongf dest_temp = *output_len;
+
+    int z_rtn = uncompress((Bytef*)output_data, &dest_temp, (Bytef*)input_data, input_len);
+    if(z_rtn != Z_OK)
+    {
+        // printf("zlib uncompress error %d\n", z_rtn);
+        return -1;
+    }
+
+    *output_len = (uint64_t)dest_temp;
+
+    return 0;
+}
+
+int adios_transform_zlib_generate_read_subrequests(adios_transform_read_request *reqgroup,
+                                                    adios_transform_pg_read_request *pg_reqgroup)
+{
+    void *buf = malloc(pg_reqgroup->raw_var_length);
+    assert(buf);
+    adios_transform_raw_read_request *subreq = adios_transform_raw_read_request_new_whole_pg(pg_reqgroup, buf);
+    adios_transform_raw_read_request_append(pg_reqgroup, subreq);
+    return 0;
+}
+
+// Do nothing for individual subrequest
+adios_datablock * adios_transform_zlib_subrequest_completed(adios_transform_read_request *reqgroup,
+                                                            adios_transform_pg_read_request *pg_reqgroup,
+                                                            adios_transform_raw_read_request *completed_subreq)
+{
+    return NULL;
+}
+
+
+
+adios_datablock * adios_transform_zlib_pg_reqgroup_completed(adios_transform_read_request *reqgroup,
+                                                             adios_transform_pg_read_request *completed_pg_reqgroup)
+{
+    uint64_t compressed_size = (uint64_t)completed_pg_reqgroup->raw_var_length;
+    void* compressed_data = completed_pg_reqgroup->subreqs->data;
+    
+    uint64_t uncompressed_size_meta = *((uint64_t*)reqgroup->transinfo->transform_metadata);
+    char compress_ok = *((char*)(reqgroup->transinfo->transform_metadata + sizeof(uint64_t)));
+
+    uint64_t uncompressed_size = adios_get_type_size(reqgroup->transinfo->orig_type, "");
+    int d = 0;
+    for(d = 0; d < reqgroup->transinfo->orig_ndim; d++)
+    {
+        uncompressed_size *= (uint64_t)(completed_pg_reqgroup->orig_varblock->count[d]);
+    }
+    
+    if(uncompressed_size_meta != uncompressed_size)
+    {
+        printf("WARNING: possible wrong data size or corrupted metadata\n");
+    }
+
+    void* uncompressed_data = malloc(uncompressed_size);
+    if(!uncompressed_data)
+    {
+        return NULL;
+    }
+    
+    if(compress_ok == 1)    // compression is successful
+    {
+        int rtn = decompress_zlib_pre_allocated(compressed_data, compressed_size, uncompressed_data, &uncompressed_size);
+        if(0 != rtn)
+        {
+            return NULL;
+        }
+    }
+    else    // just copy the buffer since data is not compressed
+    {
+        // printf("compression failed before, fall back to memory copy\n");
+        memcpy(uncompressed_data, compressed_data, compressed_size);
+    }
+    
+    return adios_datablock_new(reqgroup->transinfo->orig_type,
+                               completed_pg_reqgroup->timestep,
+                               completed_pg_reqgroup->pg_bounds_sel,
+                               uncompressed_data);
+}
+
+adios_datablock * adios_transform_zlib_reqgroup_completed(adios_transform_read_request *completed_reqgroup)
+{
+    return NULL;
+}
+
+
+#else
+
+DECLARE_TRANSFORM_READ_METHOD_UNIMPL(zlib);
+
+#endif
+
diff --git a/src/transforms/adios_transform_zlib_write.c b/src/transforms/adios_transform_zlib_write.c
new file mode 100755
index 0000000..15a18de
--- /dev/null
+++ b/src/transforms/adios_transform_zlib_write.c
@@ -0,0 +1,176 @@
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+#include <sys/time.h>
+
+#include "adios_logger.h"
+#include "adios_transforms_common.h"
+#include "adios_transforms_write.h"
+#include "adios_transforms_hooks_write.h"
+#include "adios_transforms_util.h"
+
+#ifdef ZLIB
+
+#include "zlib.h"
+
+static int is_digit_str(char* input_str)
+{
+    if(strlen(input_str) > 2)    // at most 2 digits for zlib
+    {
+        return 0;
+    }
+
+    int i = 0;
+    for(i = 0; i < strlen(input_str); i++)
+    {
+        if(input_str[i] > '9' || input_str[i] < '0')
+        {
+            return 0;
+        }
+    }
+    return 1;
+}
+
+int compress_zlib_pre_allocated(const void* input_data,
+                                const uint64_t input_len,
+                                void* output_data,
+                                uint64_t* output_len,
+                                int compress_level)
+{
+    assert(input_data != NULL && input_len > 0 && output_data != NULL && output_len != NULL && *output_len > 0);
+
+    uLongf temp = *output_len;
+    int zerr = compress2((Bytef*)(output_data),
+                            &temp,
+                            (Bytef*)input_data,
+                            (uLongf)input_len,
+                            compress_level);
+
+    *output_len = (uint64_t)temp;
+
+    if(zerr != Z_OK)
+    {
+        // printf("zlib compress2 error %d\n", zerr);
+        return -1;
+    }
+    return 0;
+}
+
+uint16_t adios_transform_zlib_get_metadata_size(struct adios_transform_spec *transform_spec)
+{
+    return (sizeof(uint64_t) + sizeof(char));    // metadata: original data size (uint64_t) + compression succ flag (char)
+}
+
+uint64_t adios_transform_zlib_calc_vars_transformed_size(enum ADIOS_TRANSFORM_TYPE type, uint64_t orig_size, int num_vars)
+{
+    return (orig_size);
+}
+
+int adios_transform_zlib_apply(struct adios_file_struct *fd,
+                                struct adios_var_struct *var,
+                                uint64_t *transformed_len,
+                                int use_shared_buffer,
+                                int *wrote_to_shared_buffer)
+{
+    // Assume this function is only called for ZLIB transform type
+    assert(var->transform_type == adios_transform_zlib);
+
+    // Get the input data and data length
+    const uint64_t input_size = adios_transform_get_pre_transform_var_size(fd->group, var);
+    const void *input_buff= var->data;
+
+    // parse the compressiong parameter
+    /* pre-specparse code
+    int compress_level = Z_DEFAULT_COMPRESSION;
+    if(var->transform_type_param
+        && strlen(var->transform_type_param) > 0
+        && is_digit_str(var->transform_type_param))    // all conditions should satisfy, or just use default compression level
+    {
+        compress_level = atoi(var->transform_type_param);
+        if(compress_level > 9 || compress_level < 1) // out of range, use default
+        {
+            compress_level = Z_DEFAULT_COMPRESSION;
+        }
+    }
+    */
+    int compress_level = Z_DEFAULT_COMPRESSION;
+    if (var->transform_spec->param_count > 0) {
+        compress_level = atoi(var->transform_spec->params[0].key);
+        if (compress_level < 1 || compress_level > 9)
+            compress_level = Z_DEFAULT_COMPRESSION;
+    }
+
+
+    // decide the output buffer
+    uint64_t output_size = input_size; // for compression, at most the original data size
+    void* output_buff = NULL;
+
+    uint64_t mem_allowed = 0;
+    if (use_shared_buffer)    // If shared buffer is permitted, serialize to there
+    {
+        *wrote_to_shared_buffer = 1;
+        if (!shared_buffer_reserve(fd, output_size))
+        {
+            log_error("Out of memory allocating %llu bytes for %s for zlib transform\n", output_size, var->name);
+            return 0;
+        }
+
+        // Write directly to the shared buffer
+        output_buff = fd->buffer + fd->offset;
+    }
+    else    // Else, fall back to var->data memory allocation
+    {
+        *wrote_to_shared_buffer = 0;
+        output_buff = malloc(output_size);
+        if (!output_buff)
+        {
+            log_error("Out of memory allocating %llu bytes for %s for zlib transform\n", output_size, var->name);
+            return 0;
+        }
+    }
+
+    // compress it
+    uint64_t actual_output_size = output_size;
+    char compress_ok = 1;
+
+    int rtn = compress_zlib_pre_allocated(input_buff, input_size, output_buff, &actual_output_size, compress_level);
+
+    if(0 != rtn                     // compression failed for some reason, then just copy the buffer
+        || actual_output_size > input_size)  // or size after compression is even larger (not likely to happen since compression lib will return non-zero in this case)
+    {
+        // printf("compression failed, fall back to memory copy\n");
+        memcpy(output_buff, input_buff, input_size);
+        actual_output_size = input_size;
+        compress_ok = 0;    // succ sign set to 0
+    }
+
+    // Wrap up, depending on buffer mode
+    if (use_shared_buffer)
+    {
+        shared_buffer_mark_written(fd, actual_output_size);
+    }
+    else
+    {
+        var->data = output_buff;
+        var->data_size = actual_output_size;
+        var->free_data = adios_flag_yes;
+    }
+
+    // copy the metadata, simply the original size before compression
+    if(var->transform_metadata && var->transform_metadata_len > 0)
+    {
+        memcpy(var->transform_metadata, &input_size, sizeof(uint64_t));
+        memcpy(var->transform_metadata + sizeof(uint64_t), &compress_ok, sizeof(char));
+    }
+
+    *transformed_len = actual_output_size; // Return the size of the data buffer
+
+    return 1;
+}
+
+#else
+
+DECLARE_TRANSFORM_WRITE_METHOD_UNIMPL(zlib)
+
+#endif
+
diff --git a/src/transforms/transform_plugins.h b/src/transforms/transform_plugins.h
new file mode 100644
index 0000000..0ee1938
--- /dev/null
+++ b/src/transforms/transform_plugins.h
@@ -0,0 +1,14 @@
+/*
+ * This file contains a registry of all transform plugins to be compiled into ADIOS.
+ * If you wish to add a new transform plugin, you must add a line here.
+ */
+
+// Arguments: type ID (C identifier), in-XML name, method UID, human-readable description
+REGISTER_TRANSFORM_PLUGIN(identity, "identity", "identity", "Identity transform")
+REGISTER_TRANSFORM_PLUGIN(zlib, "zlib", "zlib", "zlib compression")
+REGISTER_TRANSFORM_PLUGIN(bzip2, "bzip2", "bzip2", "bzip2 compression")
+REGISTER_TRANSFORM_PLUGIN(szip, "szip", "szip", "szip compression")
+REGISTER_TRANSFORM_PLUGIN(isobar, "isobar", "ncsu-isobar", "ISOBAR compression")
+REGISTER_TRANSFORM_PLUGIN(aplod, "aplod", "ncsu-aplod", "APLOD byte-columnar precision-level-of-detail access format")
+REGISTER_TRANSFORM_PLUGIN(alacrity, "alacrity", "ncsu-alacrity", "ALACRITY indexing")
+
diff --git a/src/write/adios_dataspaces.c b/src/write/adios_dataspaces.c
index 8142b25..0e5aacd 100644
--- a/src/write/adios_dataspaces.c
+++ b/src/write/adios_dataspaces.c
@@ -33,6 +33,11 @@ static int adios_dataspaces_initialized = 0;
 static char ds_var_name[MAX_DS_NAMELEN];
 static unsigned int adios_dataspaces_verbose = 3;
 
+struct adios_dspaces_file_info {
+    char *name;
+    int time_index;
+};
+
 struct adios_ds_data_struct
 {
     int rank;   // dataspaces rank or MPI rank if MPI is available
@@ -40,6 +45,7 @@ struct adios_ds_data_struct
     int appid;  // from xml parameter or 1
     int time_index; // versioning in DataSpaces, start from 0
     int n_writes; // how many times adios_write has been called
+    struct adios_dspaces_file_info file_info[MAX_NUM_OF_FILES];
 #if HAVE_MPI
     MPI_Comm mpi_comm;
 #endif
@@ -48,59 +54,45 @@ struct adios_ds_data_struct
     int  fversions[MAX_NUM_OF_FILES];   // last steps of files (needed at finalize)
 };
 
-
-
-static int get_dim_rank_value(struct adios_dimension_item_struct * dim_info, struct adios_group_struct *group)
+static int init_dspaces_file_info(struct adios_ds_data_struct *p)
 {
-    if(!dim_info)
-       return 0;
+    int i;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        p->file_info[i].name = NULL;
+        p->file_info[i].time_index = 0;
+    }
+}
 
-    if(dim_info->id != 0)
-    {
-        struct adios_var_struct *dim_var = NULL;
-        dim_var = adios_find_var_by_id(group->vars, dim_info->id);
-        if(!dim_var || !dim_var->data)
-           return 0;
-        
-        int rank = 0;
-        switch ( dim_var->type )
-        {
-        case adios_unsigned_byte:
-             rank = (*(uint8_t*) dim_var->data);
-             break;
-        case adios_byte:
-             rank = (*(int8_t*) dim_var->data);
-             break;
-        case adios_unsigned_short:
-             rank = (*(uint16_t*) dim_var->data);
-             break;
-        case adios_short:
-             rank = (*(int16_t*) dim_var->data);
-             break;
-        case adios_unsigned_integer:
-             rank = (*(uint32_t*) dim_var->data);
-             break;
-        case adios_integer:
-             rank = (*(int32_t*) dim_var->data);
-             break;
-        case adios_unsigned_long:
-             rank = (*(uint64_t*) dim_var->data);
-             break;
-        case adios_long:
-             rank = (*(int64_t*) dim_var->data);
-             break;
-
-        default: break;
+static void free_dspaces_file_info(struct adios_ds_data_struct *p)
+{
+    int i;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name) {
+            free(p->file_info[i].name);
         }
+    }
 
-        return rank;
+    return;
+}
+
+static struct adios_dspaces_file_info* lookup_dspaces_file_info(struct adios_ds_data_struct *p, const char* fname)
+{
+    int i;    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name != NULL &&
+            strcmp(p->file_info[i].name, fname) == 0) {
+            return &p->file_info[i];
+        }
     }
-    else
-    {
-        return dim_info->rank;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name == NULL) {
+            p->file_info[i].name = malloc(strlen(fname)+1);
+            strcpy(p->file_info[i].name, fname);
+            return &p->file_info[i];
+        }
     }
-}
 
+    return NULL;
+}
 
 static int connect_to_dspaces (struct adios_ds_data_struct * p, MPI_Comm comm)
 {
@@ -134,8 +126,9 @@ static int connect_to_dspaces (struct adios_ds_data_struct * p, MPI_Comm comm)
 #endif
 
         log_debug ("adios_dataspaces: rank=%d connected to DATASPACES: peers=%d\n", p->rank, p->peers);        
-        globals_adios_set_dataspaces_connected_from_writer();
     }
+
+    globals_adios_set_dataspaces_connected_from_writer();
     return ret;
 }
 
@@ -166,6 +159,7 @@ void adios_dataspaces_init (const PairStruct * parameters,
 #endif
     p->num_of_files = 0;
 
+    init_dspaces_file_info(p);
     connect_to_dspaces (p, method->init_comm);
 
     log_info ("adios_dataspaces_init: done\n");
@@ -182,9 +176,9 @@ int adios_dataspaces_open (struct adios_file_struct * fd,
     int ret = 0;
     struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
                                                 method->method_data;
-  
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
     log_info ("adios_dataspaces_open: open %s, mode=%d, time_index=%d \n",
-                        fd->name, fd->mode, p->time_index);
+                        fd->name, fd->mode, info->time_index);
 
 #if HAVE_MPI
     // if we have MPI and a communicator, we can get the exact size of this application
@@ -244,6 +238,7 @@ void adios_dataspaces_write (struct adios_file_struct * fd
     struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
                                                             method->method_data;
     struct adios_group_struct *group = fd->group;
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
     //Get var size
     //  FIXME: type size of a string >2GB does not fit to int. 
     //  adios_get_type_size returns uint64_t but dspaces_put handles only int
@@ -264,9 +259,9 @@ void adios_dataspaces_write (struct adios_file_struct * fd
     // Calculate lower and upper bounds for each available dimension (up to 3 dims)
     while( var_dimensions && ndims < 3)
     {
-        dims[ndims] = get_dim_rank_value(&(var_dimensions->dimension), group);
-        gdims[ndims] = get_dim_rank_value(&(var_dimensions->global_dimension), group);
-        lb[ndims] = get_dim_rank_value(&(var_dimensions->local_offset), group);
+        dims[ndims] = adios_get_dim_value (&(var_dimensions->dimension));
+        gdims[ndims] = adios_get_dim_value (&(var_dimensions->global_dimension));
+        lb[ndims] = adios_get_dim_value (&(var_dimensions->local_offset));
         if (dims[ndims] > 0)  {
             ub[ndims] = lb[ndims] + dims[ndims] - 1;
             ndims++;
@@ -281,13 +276,15 @@ void adios_dataspaces_write (struct adios_file_struct * fd
 #ifdef DATASPACES_NO_VERSIONING
     version = 0;              /* Update/overwrite data in DataSpaces  (we write time_index as a variable at close)*/
 #else
-    version = p->time_index;  /* Add new data as separate to DataSpaces */
+    version = info->time_index;  /* Add new data as separate to DataSpaces */
 #endif
     
     if (v->path != NULL && v->path[0] != '\0' && strcmp(v->path,"/")) 
         snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s/%s/%s", fd->name, fd->group->name, v->path, v->name);
-    else 
+    else if (!strcmp(v->path,"/")) 
         snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s//%s", fd->name, fd->group->name, v->name);
+    else 
+        snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s/%s", fd->name, fd->group->name, v->name);
 
     //snprintf(dspaces_type_var_name, MAX_DS_NAMELEN, "TYPE@%s", ds_var_name);
     
@@ -422,8 +419,8 @@ void adios_dataspaces_read (struct adios_file_struct * fd
     memset(offset2, 0, 3*sizeof(int));
     memset(dim_size, 0, 3*sizeof(int));
 
-    version = p->time_index;
-
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
+    version = info->time_index;
     //dspaces_lock_on_read_();
 
     //dspaces_get
@@ -434,25 +431,20 @@ void adios_dataspaces_read (struct adios_file_struct * fd
 /* Gather var/attr indices from all processes to rank 0 */
 static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
                                ,struct adios_method_struct * method
-                               ,struct adios_index_process_group_struct_v1 **pg_root 
-                               ,struct adios_index_var_struct_v1 **vars_root
-                               ,struct adios_index_attribute_struct_v1 ** attrs_root
+                               ,struct adios_index_struct_v1 * index
                                )
 {
     struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
                                                 method->method_data;
-    struct adios_index_process_group_struct_v1 * my_pg_root = 0;
-    struct adios_index_var_struct_v1 * my_vars_root = 0;
-    struct adios_index_attribute_struct_v1 * my_attrs_root = 0;
     struct adios_index_process_group_struct_v1 * new_pg_root = 0;
     struct adios_index_var_struct_v1 * new_vars_root = 0;
     struct adios_index_attribute_struct_v1 * new_attrs_root = 0;
     
     // build local index first appending to any existing index
-    adios_build_index_v1 (fd, &my_pg_root, &my_vars_root, &my_attrs_root);
+    adios_build_index_v1 (fd, index);
 
     log_debug ("%s index after first build is pg=%x vars=%x attrs=%x\n", 
-                __func__, my_pg_root, my_vars_root, my_attrs_root);
+                __func__, index->pg_root, index->vars_root, index->attrs_root);
 #if 0
 #if HAVE_MPI
     // gather all on rank 0
@@ -495,17 +487,12 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
                 adios_parse_process_group_index_v1 (&b
                         ,&new_pg_root
                         );
-                adios_parse_vars_index_v1 (&b, &new_vars_root);
+                adios_parse_vars_index_v1 (&b, &new_vars_root, NULL, NULL);
                 adios_parse_attributes_index_v1 (&b
                         ,&new_attrs_root
                         );
-                adios_merge_index_v1 (&my_pg_root
-                        ,&my_vars_root
-                        ,&my_attrs_root
-                        ,new_pg_root, new_vars_root
-                        ,new_attrs_root
-                        );
-                adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
+                adios_merge_index_v1 (index, new_pg_root, 
+                                      new_vars_root, new_attrs_root);
                 new_pg_root = 0;
                 new_vars_root = 0;
                 new_attrs_root = 0;
@@ -522,7 +509,7 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
             uint64_t buffer_offset = 0;
 
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                    ,0, my_pg_root ,my_vars_root ,my_attrs_root);
+                    ,0, index);
 
             uint32_t tmp_buffer_size = (uint32_t) buffer_size;
             MPI_Gather (&tmp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
@@ -539,20 +526,19 @@ static void adios_dataspaces_gather_indices (struct adios_file_struct * fd
 #endif
 #endif
 
-    *pg_root = my_pg_root;
-    *vars_root = my_vars_root;
-    *attrs_root = my_attrs_root;
     log_debug ("%s index after gathering is pg=%x vars=%x attrs=%x\n", 
-                __func__, my_pg_root, my_vars_root, my_attrs_root);
+                __func__, index->pg_root, index->vars_root, index->attrs_root);
 }
 
 static int ds_get_full_name_len (char * path, char * name)
 {
     int len;
     // make full name
-    if (!path || !path[0] || !strcmp (path, "/")) { 
-        // no path, just name + leading /
-        len = strlen(name) + 1;
+    if (!path || !path[0]) { 
+        // no path, just name
+        len = strlen(name);
+    } else if (!strcmp (path, "/")) {
+        len = strlen(name)+1;
     } else {
         len = strlen(path) + strlen(name) + 1;
     }
@@ -565,9 +551,12 @@ static int ds_get_full_name (char * path, char * name, int maxlen,
     int len;
     // make full name
     if (!path || !path[0] || !strcmp (path, "/")) { 
-        // no path, just name + leading /
-        len = strlen(name) + 1;
-        out[0] = '/';
+        // no path, just name 
+        len = strlen(name);
+        strncpy(out, name, maxlen);
+    } else if (!strcmp (path, "/")) {
+        len = strlen(name)+1;
+        out[0]='/';
         strncpy(out+1, name, maxlen-1);
     } else {
         len = strlen(path);
@@ -580,16 +569,15 @@ static int ds_get_full_name (char * path, char * name, int maxlen,
 }
 
 void ds_pack_group_info (struct adios_file_struct *fd
-                                  ,struct adios_method_struct * method
-                                  ,struct adios_index_var_struct_v1 *vars_root
-                                  ,struct adios_index_attribute_struct_v1 * attrs_root
-                                  ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
-                                  )
+                        ,struct adios_method_struct * method
+                        ,struct adios_index_struct_v1 *index
+                        ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
+                        )
 {
     struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
                                                 method->method_data;
-    struct adios_index_var_struct_v1 * v = vars_root;
-    struct adios_index_attribute_struct_v1 * a = attrs_root;
+    struct adios_index_var_struct_v1 * v = index->vars_root;
+    struct adios_index_attribute_struct_v1 * a = index->attrs_root;
     int size;
     int ndims; // whatever the type of v->characteristics->dims.count is, we write an int to buffer
     int hastime; // true if variable has time dimension
@@ -644,8 +632,8 @@ void ds_pack_group_info (struct adios_file_struct *fd
     *buffer_size = size;
 
     /* Second cycle: fill up the buffer */
-    v = vars_root;
-    a = attrs_root;
+    v = index->vars_root;
+    a = index->attrs_root;
     char * b = *buffer;
     int i, j, namelen;
     char name[256];
@@ -814,10 +802,9 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 {
     struct adios_ds_data_struct *p = (struct adios_ds_data_struct *)
                                                 method->method_data;
-    struct adios_index_process_group_struct_v1 * pg_root;
-    struct adios_index_var_struct_v1 * vars_root;
-    struct adios_index_attribute_struct_v1 * attrs_root;
+    struct adios_index_struct_v1 * index = adios_alloc_index_v1(1);
     struct adios_attribute_struct * a = fd->group->attributes;
+    struct adios_dspaces_file_info *info = lookup_dspaces_file_info(p,fd->name);
     int lb[3], ub[3], didx[3]; // for reordering DS dimensions
     unsigned int version;
 
@@ -831,7 +818,7 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 
         //adios_write_close_vars_v1 (fd);
         /* Gather var/attr indices from all processes to rank 0 */
-        adios_dataspaces_gather_indices (fd, method, &pg_root, &vars_root ,&attrs_root);
+        adios_dataspaces_gather_indices (fd, method, index);
 
         // make sure all processes have finished putting data to the space 
         // before we put metadata from rank 0
@@ -844,14 +831,14 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 #ifdef DATASPACES_NO_VERSIONING
             version = 0;              /* Update/overwrite data in DataSpaces */
 #else
-            version = p->time_index;  /* Add new data as separate to DataSpaces */
+            version = info->time_index;  /* Add new data as separate to DataSpaces */
 #endif
 
             /* Make metadata from indices */
             char * indexbuf;
             int    indexlen;
             int    nvars, nattrs;
-            ds_pack_group_info (fd, method, vars_root, attrs_root, 
+            ds_pack_group_info (fd, method, index, 
                                    &indexbuf, &indexlen, &nvars, &nattrs);
 
             
@@ -868,8 +855,8 @@ void adios_dataspaces_close (struct adios_file_struct * fd
             char * file_info_buf; /* store FILE at fn's group list */
             int    file_info_buf_len; /* = 128 currently */
             snprintf (ds_var_name, MAX_DS_NAMELEN, "FILE@%s", fd->name);
-            ds_pack_file_info (p->time_index, nvars, nattrs, indexlen, fd->group->name, 
-                               &file_info_buf, &file_info_buf_len);
+            ds_pack_file_info (info->time_index, nvars, nattrs, indexlen,
+                          fd->group->name, &file_info_buf, &file_info_buf_len);
             log_debug ("%s: put %s = buflen=%d time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
                 __func__, ds_var_name, 
                 *(int*)file_info_buf, *(int*)(file_info_buf+4), 
@@ -920,7 +907,8 @@ void adios_dataspaces_close (struct adios_file_struct * fd
 
 
         // free allocated index lists
-        adios_clear_index_v1 (pg_root, vars_root, attrs_root);
+        adios_clear_index_v1 (index);
+        adios_free_index_v1 (index);
 
         // rank=0 may be in put_sync when others call unlock, which is a global op
         MPI_Barrier (p->mpi_comm); 
@@ -935,7 +923,7 @@ void adios_dataspaces_close (struct adios_file_struct * fd
     } 
 
     /* Increment the time index */
-    p->time_index++;
+    info->time_index++;
 
 
     log_info ("%s: exit\n", __func__);
@@ -952,6 +940,8 @@ void adios_dataspaces_finalize (int mype, struct adios_method_struct * method)
     int didx[3]; // for reordering DS dimensions
     int value[2] = {0, 1}; // integer to be written to space (terminated=1)
 
+    free_dspaces_file_info(p);
+
     // tell the readers which files are finalized
     ds_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
     for (i=0; i<p->num_of_files; i++) {
diff --git a/src/write/adios_datatap.c b/src/write/adios_datatap.c
index e68f555..4e9b8c3 100644
--- a/src/write/adios_datatap.c
+++ b/src/write/adios_datatap.c
@@ -32,25 +32,25 @@ int rank = -1;
 
 typedef struct nametable_
 {
-	char *originalname;
-	char *mangledname;
-	  LIST_ENTRY(nametable_) entries;
+    char *originalname;
+    char *mangledname;
+    LIST_ENTRY(nametable_) entries;
 } nametable;
 
 
 
 typedef struct altname_
 {
-	char *name;
-	FMField *field;											   //contains the field list
-	  LIST_ENTRY(altname_) entries;
+    char *name;
+    FMField *field;                                               //contains the field list
+    LIST_ENTRY(altname_) entries;
 } altname;
 
 typedef struct dimnames_
 {
-	char *name;
-	  LIST_HEAD(alts, altname_) altlist;
-	  LIST_ENTRY(dimnames_) entries;
+    char *name;
+    LIST_HEAD(alts, altname_) altlist;
+    LIST_ENTRY(dimnames_) entries;
 } dimnames;
 
 
@@ -58,26 +58,26 @@ int mpisize  = 1;
 
 struct fm_structure
 {
-	FMFormatRec *format;
-	int size;												   //in bytes - no padding
-	unsigned char *buffer;
-	int snd_count;
-	IOhandle *s;
-	FMFormat ioformat;
-	attr_list alist;	
-
-	LIST_HEAD(tablehead, nametable_) namelist;
-	LIST_HEAD(dims, dimnames_) dimlist;
+    FMFormatRec *format;
+    int size;                                                   //in bytes - no padding
+    unsigned char *buffer;
+    int snd_count;
+    IOhandle *s;
+    FMFormat ioformat;
+    attr_list alist;    
+
+    LIST_HEAD(tablehead, nametable_) namelist;
+    LIST_HEAD(dims, dimnames_) dimlist;
 };
 
 
 typedef struct datatap_method_data
 {
-	int opencount;
-	int initialized;
-	int cycle_id;
-	char *pfile;
-	struct fm_structure *fm;
+    int opencount;
+    int initialized;
+    int cycle_id;
+    char *pfile;
+    struct fm_structure *fm;
 } dmd;
 
 MPI_Comm adios_mpi_comm_world = MPI_COMM_WORLD;
@@ -87,33 +87,33 @@ int initialized = 0;
 static char *
 getFixedName(char *name)
 {
-	char *tempname = (char *) malloc(sizeof(char) * 255);
-	tempname = strdup(name);
+    char *tempname = (char *) malloc(sizeof(char) * 255);
+    tempname = strdup(name);
 
 
-	char *oldname = strdup(name);
-	char *loc = NULL;
-	int i;
+    char *oldname = strdup(name);
+    char *loc = NULL;
+    int i;
 
-	do
-	{
-		for (i = 0; i < OPLEN; i++)
-		{
-	//checking operator OP[i]
-			loc = strchr(oldname, OP[i]);
-			if (loc == NULL)
-				continue;
-			*loc = 0;
-			snprintf(tempname, 255, "%s%s%s", oldname, OP_REP[i], &loc[1]);
-			free(oldname);
-			oldname = strdup(tempname);
-		}
-	}
-	while (loc != NULL);
+    do
+    {
+        for (i = 0; i < OPLEN; i++)
+        {
+    //checking operator OP[i]
+            loc = strchr(oldname, OP[i]);
+            if (loc == NULL)
+                continue;
+            *loc = 0;
+            snprintf(tempname, 255, "%s%s%s", oldname, OP_REP[i], &loc[1]);
+            free(oldname);
+            oldname = strdup(tempname);
+        }
+    }
+    while (loc != NULL);
 
 
 
-	return tempname;
+    return tempname;
 }
 
 
@@ -122,10 +122,10 @@ getFixedName(char *name)
 static char **
 getAltName(char *variable, int *count)
 {
-	if (count == NULL)
-		return NULL;
+    if (count == NULL)
+        return NULL;
 
-	return NULL;
+    return NULL;
 
 }
 
@@ -133,535 +133,535 @@ getAltName(char *variable, int *count)
 static char *
 findFixedName(struct fm_structure *fm, char *name)
 {
-	nametable *node;
+    nametable *node;
 
-	for (node = fm->namelist.lh_first; node != NULL;
-		 node = node->entries.le_next)
-	{
-		if (!strcmp(node->originalname, name))
-		{
-	//matched
-			return node->mangledname;
-		}
+    for (node = fm->namelist.lh_first; node != NULL;
+         node = node->entries.le_next)
+    {
+        if (!strcmp(node->originalname, name))
+        {
+    //matched
+            return node->mangledname;
+        }
 
-	}
+    }
 
-	return name;
+    return name;
 }
 
 
 extern void
 adios_datatap_init(const PairStruct *params, struct adios_method_struct *method)
 {
-	if (method->method_data != NULL)
-	{
-		dmd *mdata = (dmd *) method->method_data;
-		if (mdata->initialized == 1)
-			return;
-	}
-
-	method->method_data = (void *) malloc(sizeof(struct datatap_method_data));
-	dmd *mdata = (dmd *) method->method_data;
-	memset(mdata, 0, sizeof(dmd));
-
-	mdata->opencount = 0;
-	mdata->initialized = 1;
-	if (md->parameters != NULL && strlen(md->parameters) > 1)
-	{
+    if (method->method_data != NULL)
+    {
+        dmd *mdata = (dmd *) method->method_data;
+        if (mdata->initialized == 1)
+            return;
+    }
+
+    method->method_data = (void *) malloc(sizeof(struct datatap_method_data));
+    dmd *mdata = (dmd *) method->method_data;
+    memset(mdata, 0, sizeof(dmd));
+
+    mdata->opencount = 0;
+    mdata->initialized = 1;
+    if (md->parameters != NULL && strlen(md->parameters) > 1)
+    {
 //contains the file name of the file to read?
-		mdata->pfile = strdup(md->parameters);
-	}
-	else
-		mdata->pfile = strdup("params");
+        mdata->pfile = strdup(md->parameters);
+    }
+    else
+        mdata->pfile = strdup("params");
 
-	MPI_Comm_rank(adios_mpi_comm_world, &rank);
-	MPI_Comm_size(adios_mpi_comm_world, &mpisize);
+    MPI_Comm_rank(adios_mpi_comm_world, &rank);
+    MPI_Comm_size(adios_mpi_comm_world, &mpisize);
 
-	fflush(stderr);
+    fflush(stderr);
 
 }
 
 static altname *
 findAltName(struct fm_structure *current_fm, char *dimname, char *varname)
 {
-	int len = strlen(dimname) + strlen(varname) + 2;
-	char *aname = (char *) malloc(sizeof(char) * len);
-	strcpy(aname, dimname);
-	strcat(aname, "_");
-	strcat(aname, varname);
-	dimnames *d = NULL;
-
-	for (d = current_fm->dimlist.lh_first; d != NULL; d = d->entries.le_next)
-	{
-		if (!strcmp(d->name, dimname))
-		{
-	//matched
-			break;
-		}
-
-	}
-
-	if (d == NULL)
-	{
-		d = (dimnames *) malloc(sizeof(dimnames));
-		d->name = dimname;
-		LIST_INIT(&d->altlist);
-		LIST_INSERT_HEAD(&current_fm->dimlist, d, entries);
-	}
-
-	FMField *field = (FMField *) malloc(sizeof(FMField));
-
-	altname *a = (altname *) malloc(sizeof(altname));
-	a->name = aname;
-	a->field = field;
-	field->field_name = strdup(aname);
-	field->field_type = strdup("integer");
-	field->field_size = sizeof(int);
-	field->field_offset = -1;
-
-
-	LIST_INSERT_HEAD(&d->altlist, a, entries);
-
-	return a;
+    int len = strlen(dimname) + strlen(varname) + 2;
+    char *aname = (char *) malloc(sizeof(char) * len);
+    strcpy(aname, dimname);
+    strcat(aname, "_");
+    strcat(aname, varname);
+    dimnames *d = NULL;
+
+    for (d = current_fm->dimlist.lh_first; d != NULL; d = d->entries.le_next)
+    {
+        if (!strcmp(d->name, dimname))
+        {
+    //matched
+            break;
+        }
+
+    }
+
+    if (d == NULL)
+    {
+        d = (dimnames *) malloc(sizeof(dimnames));
+        d->name = dimname;
+        LIST_INIT(&d->altlist);
+        LIST_INSERT_HEAD(&current_fm->dimlist, d, entries);
+    }
+
+    FMField *field = (FMField *) malloc(sizeof(FMField));
+
+    altname *a = (altname *) malloc(sizeof(altname));
+    a->name = aname;
+    a->field = field;
+    field->field_name = strdup(aname);
+    field->field_type = strdup("integer");
+    field->field_size = sizeof(int);
+    field->field_offset = -1;
+
+
+    LIST_INSERT_HEAD(&d->altlist, a, entries);
+
+    return a;
 }
 
 
 
 extern int
 adios_datatap_open(struct adios_file_struct *fd,
-		   struct adios_method_struct *method, void*comm)
+           struct adios_method_struct *method, void*comm)
 {
-	if (fd == NULL || method == NULL)
-	{
-		fprintf(stderr, "Bad input parameters\n");
-		return -1;
-	}
-
-	dmd *mdata = (dmd *) method->method_data;
-
-	if (mdata != NULL)
-	{
-		if (mdata->initialized == 0)
-		{
-			fprintf(stderr, "method not initialized properly\n");
-			return;
-		}
-	}
-	else
-	{
-		fprintf(stderr, "method not initialized\n");
-		return -1;
-	}
-
-	if (mdata->fm != NULL)
-	{
-		return -1;
-	}
-
-
-
-	struct adios_group_struct *t = method->group;
-	if (t == NULL)
-	{
-		fprintf(stderr, "group is not initialized properly\n");
-		return -1;
-	}
-
-	struct adios_var_struct *fields = t->vars;
-	if (fields == NULL)
-	{
-		fprintf(stderr, "adios vars not initalized properly in the group\n");
-		return -1;
-	}
+    if (fd == NULL || method == NULL)
+    {
+        fprintf(stderr, "Bad input parameters\n");
+        return -1;
+    }
+
+    dmd *mdata = (dmd *) method->method_data;
+
+    if (mdata != NULL)
+    {
+        if (mdata->initialized == 0)
+        {
+            fprintf(stderr, "method not initialized properly\n");
+            return;
+        }
+    }
+    else
+    {
+        fprintf(stderr, "method not initialized\n");
+        return -1;
+    }
+
+    if (mdata->fm != NULL)
+    {
+        return -1;
+    }
+
+
+
+    struct adios_group_struct *t = method->group;
+    if (t == NULL)
+    {
+        fprintf(stderr, "group is not initialized properly\n");
+        return -1;
+    }
+
+    struct adios_var_struct *fields = t->vars;
+    if (fields == NULL)
+    {
+        fprintf(stderr, "adios vars not initalized properly in the group\n");
+        return -1;
+    }
 
 //iterate through all the types
 //create a format rec
-	FMFormatRec *format = (FMFormatRec *) malloc(sizeof(FMFormatRec) * 2);
-	if (format == NULL)
-	{
-		perror("memory allocation failed");
-		return -1;
-	}
+    FMFormatRec *format = (FMFormatRec *) malloc(sizeof(FMFormatRec) * 2);
+    if (format == NULL)
+    {
+        perror("memory allocation failed");
+        return -1;
+    }
 
-	memset(format, 0, sizeof(FMFormatRec) * 2);
+    memset(format, 0, sizeof(FMFormatRec) * 2);
 
 
-	struct fm_structure *current_fm =
-		(struct fm_structure *) malloc(sizeof(struct fm_structure));
-	if (current_fm == NULL)
-	{
-		perror("memory allocation failed");
-		return -1;
-	}
+    struct fm_structure *current_fm =
+        (struct fm_structure *) malloc(sizeof(struct fm_structure));
+    if (current_fm == NULL)
+    {
+        perror("memory allocation failed");
+        return -1;
+    }
 
-	memset(current_fm, 0, sizeof(struct fm_structure));
-	current_fm->alist = create_attr_list();
-	set_int_attr(current_fm->alist, attr_atom_from_string("mpisize"), mpisize);
-	
+    memset(current_fm, 0, sizeof(struct fm_structure));
+    current_fm->alist = create_attr_list();
+    set_int_attr(current_fm->alist, attr_atom_from_string("mpisize"), mpisize);
+    
 
-	LIST_INIT(&current_fm->namelist);
-	LIST_INIT(&current_fm->dimlist);
+    LIST_INIT(&current_fm->namelist);
+    LIST_INIT(&current_fm->dimlist);
 
 
 
 //associate the FMFormat rec with the fm_structure
-	current_fm->format = format;
-	format->format_name = strdup(t->name);
+    current_fm->format = format;
+    format->format_name = strdup(t->name);
 
 //allocate field list
-	if (t->var_count == 0)
-	{
-		fprintf(stderr, "no variables in this group - possibly an error\n");
-		return -1;
+    if (t->var_count == 0)
+    {
+        fprintf(stderr, "no variables in this group - possibly an error\n");
+        return -1;
 
-	}
+    }
 
-	int altvarcount = 0;
+    int altvarcount = 0;
 
-	FMFieldList field_list =
-		(FMFieldList) malloc(sizeof(FMField) * (t->var_count + 1));
-	if (field_list == NULL)
-	{
-		perror("memory allocation failed");
-		return -1;
-	}
+    FMFieldList field_list =
+        (FMFieldList) malloc(sizeof(FMField) * (t->var_count + 1));
+    if (field_list == NULL)
+    {
+        perror("memory allocation failed");
+        return -1;
+    }
 
 //keep count of the total number of fields
-	int fieldno = 0;
+    int fieldno = 0;
 
 
 //for each type look through all the fields
-	struct adios_var_struct *f;
-	for (f = t->vars; f != NULL; f = f->next, fieldno++)
-	{
+    struct adios_var_struct *f;
+    for (f = t->vars; f != NULL; f = f->next, fieldno++)
+    {
 //make the field list
 //check name for + - * / (operators) and replace them
-		char *tempname = getFixedName(f->name);
+        char *tempname = getFixedName(f->name);
 
 
-		if (strcmp(tempname, f->name))
-		{
-	//strings don't match
-	//add to name list
-			nametable *namenode = (nametable *) malloc(sizeof(nametable));
-			namenode->originalname = strdup(f->name);
-			namenode->mangledname = strdup(tempname);
+        if (strcmp(tempname, f->name))
+        {
+    //strings don't match
+    //add to name list
+            nametable *namenode = (nametable *) malloc(sizeof(nametable));
+            namenode->originalname = strdup(f->name);
+            namenode->mangledname = strdup(tempname);
 
-			LIST_INSERT_HEAD(&current_fm->namelist, namenode, entries);
-		}
+            LIST_INSERT_HEAD(&current_fm->namelist, namenode, entries);
+        }
 
 
 //
-		field_list[fieldno].field_name = strdup(tempname);
-		free(tempname);
-
-		if (!f->dimensions)
-		{
-			switch (f->type)
-			{
-			case adios_unknown:
-				fprintf(stderr, "bad type error\n");
-				fieldno--;
-				break;
-
-			case adios_integer:
-				field_list[fieldno].field_type = strdup("integer");
-				field_list[fieldno].field_size = sizeof(int);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(int);
-				break;
-
-			case adios_real:
-				field_list[fieldno].field_type = strdup("float");
-				field_list[fieldno].field_size = sizeof(float);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(float);
-				break;
-
-			case adios_string:
-				field_list[fieldno].field_type = strdup("string");
-				field_list[fieldno].field_size = sizeof(char);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(unsigned char *);
-				break;
-
-			case adios_double:
-				field_list[fieldno].field_type = strdup("float");
-				field_list[fieldno].field_size = sizeof(double);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(double);
-				break;
-
-
-			case adios_byte:
-				field_list[fieldno].field_type = strdup("char");
-				field_list[fieldno].field_size = sizeof(char);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(char);
-				break;
-
-			default:
-				fprintf(stderr, "unknown type error %d\n", f->type);
-				fieldno--;
-				break;
-			}
-		}
-		else
-		{
-	//its a vector!
-	//find out the dimensions by walking the dimension list
-			struct adios_dimension_struct *d = f->dimensions;
+        field_list[fieldno].field_name = strdup(tempname);
+        free(tempname);
+
+        if (!f->dimensions)
+        {
+            switch (f->type)
+            {
+            case adios_unknown:
+                fprintf(stderr, "bad type error\n");
+                fieldno--;
+                break;
+
+            case adios_integer:
+                field_list[fieldno].field_type = strdup("integer");
+                field_list[fieldno].field_size = sizeof(int);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(int);
+                break;
+
+            case adios_real:
+                field_list[fieldno].field_type = strdup("float");
+                field_list[fieldno].field_size = sizeof(float);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(float);
+                break;
+
+            case adios_string:
+                field_list[fieldno].field_type = strdup("string");
+                field_list[fieldno].field_size = sizeof(char);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(unsigned char *);
+                break;
+
+            case adios_double:
+                field_list[fieldno].field_type = strdup("float");
+                field_list[fieldno].field_size = sizeof(double);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(double);
+                break;
+
+
+            case adios_byte:
+                field_list[fieldno].field_type = strdup("char");
+                field_list[fieldno].field_size = sizeof(char);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(char);
+                break;
+
+            default:
+                fprintf(stderr, "unknown type error %d\n", f->type);
+                fieldno--;
+                break;
+            }
+        }
+        else
+        {
+    //its a vector!
+    //find out the dimensions by walking the dimension list
+            struct adios_dimension_struct *d = f->dimensions;
 #define DIMSIZE 10240
-			char dims[DIMSIZE] = { 0 };
+            char dims[DIMSIZE] = { 0 };
 #define ELSIZE 256
-			char el[ELSIZE] = { 0 };
-
-
-	//create the dimension thingy
-			for (; d != NULL; d = d->next)
-			{
-				//for each dimension just take the upper_bound
-				if (d->dimension.id)
-				{
-				    //findFixedName returns the mangled name from the original name
-				    struct adios_var_struct *tmp_var = adios_find_var_by_id(t->vars, d->dimension.id);
-				    char *name =
-					findFixedName(current_fm, 
-						      tmp_var->name);
-				    //create the alternate name for this variable and the array its defining
-				    altname *a = findAltName(current_fm, name,
-							     (char*)field_list[fieldno].field_name);
-				    //altname is a new variable that we need to add to the field list
-				    altvarcount++;
-
-				    snprintf(el, ELSIZE, "[%s]", a->name);
-//					fprintf(stderr, "%s\t", el);
-				    //offset_increment is just the size of the pointer
-
-				}
-				else			//its a number
-				{
-					//if its a number the offset_increment will be the size of the variable*rank
-					snprintf(el, ELSIZE, "[%d]", d->dimension.rank);
-				}
-				strncat(dims, el, DIMSIZE);
-			}
-// 			fprintf(stderr, "%s\n", dims);
-
-			while(current_fm->size % 8 != 0)
-			{
-				current_fm->size ++;					
-			}
-
-			switch (f->type)
-			{
-			case adios_unknown:
-				fprintf(stderr, "bad type error\n");
-				fieldno--;
-				break;
-
-			case adios_integer:
-				field_list[fieldno].field_type =
-					(char *) malloc(sizeof(char) * 255);
-				snprintf((char *) field_list[fieldno].field_type, 255,
-						 "integer%s", dims);
-				field_list[fieldno].field_size = sizeof(int);
-				
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(void *);
-				break;
-
-			case adios_real:
-				field_list[fieldno].field_type =
-					(char *) malloc(sizeof(char) * 255);
-				snprintf((char *) field_list[fieldno].field_type, 255,
-						 "float%s", dims);
-				field_list[fieldno].field_size = sizeof(float);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(void *);
-				break;
-
-			case adios_string:
-				field_list[fieldno].field_type = strdup("string");
-				field_list[fieldno].field_size = sizeof(char);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(void *);
-				break;
-
-			case adios_double:
-				field_list[fieldno].field_type =
-					(char *) malloc(sizeof(char) * 255);
-				snprintf((char *) field_list[fieldno].field_type, 255,
-						 "float%s", dims);
-				field_list[fieldno].field_size = sizeof(double);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(void *);
-				break;
-
-			case adios_byte:
-				field_list[fieldno].field_type =
-					(char *) malloc(sizeof(char) * 255);
-				snprintf((char *) field_list[fieldno].field_type, 255, "char%s",
-						 dims);
-				field_list[fieldno].field_size = sizeof(char);
-				field_list[fieldno].field_offset = current_fm->size;
-				current_fm->size += sizeof(void *);
-				break;
-
-			default:
-				fprintf(stderr, "unknown type error %d\n", f->type);
-				fieldno--;
-				break;
-			}
-
-		}
+            char el[ELSIZE] = { 0 };
+
+
+    //create the dimension thingy
+            for (; d != NULL; d = d->next)
+            {
+                //for each dimension just take the upper_bound
+                if (d->dimension.id)
+                {
+                    //findFixedName returns the mangled name from the original name
+                    struct adios_var_struct *tmp_var = adios_find_var_by_id(t->vars, d->dimension.id);
+                    char *name =
+                    findFixedName(current_fm, 
+                              tmp_var->name);
+                    //create the alternate name for this variable and the array its defining
+                    altname *a = findAltName(current_fm, name,
+                                 (char*)field_list[fieldno].field_name);
+                    //altname is a new variable that we need to add to the field list
+                    altvarcount++;
+
+                    snprintf(el, ELSIZE, "[%s]", a->name);
+//                    fprintf(stderr, "%s\t", el);
+                    //offset_increment is just the size of the pointer
+
+                }
+                else            //its a number
+                {
+                    //if its a number the offset_increment will be the size of the variable*rank
+                    snprintf(el, ELSIZE, "[%d]", d->dimension.rank);
+                }
+                strncat(dims, el, DIMSIZE);
+            }
+//             fprintf(stderr, "%s\n", dims);
+
+            while(current_fm->size % 8 != 0)
+            {
+                current_fm->size ++;                    
+            }
+
+            switch (f->type)
+            {
+            case adios_unknown:
+                fprintf(stderr, "bad type error\n");
+                fieldno--;
+                break;
+
+            case adios_integer:
+                field_list[fieldno].field_type =
+                    (char *) malloc(sizeof(char) * 255);
+                snprintf((char *) field_list[fieldno].field_type, 255,
+                         "integer%s", dims);
+                field_list[fieldno].field_size = sizeof(int);
+                
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(void *);
+                break;
+
+            case adios_real:
+                field_list[fieldno].field_type =
+                    (char *) malloc(sizeof(char) * 255);
+                snprintf((char *) field_list[fieldno].field_type, 255,
+                         "float%s", dims);
+                field_list[fieldno].field_size = sizeof(float);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(void *);
+                break;
+
+            case adios_string:
+                field_list[fieldno].field_type = strdup("string");
+                field_list[fieldno].field_size = sizeof(char);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(void *);
+                break;
+
+            case adios_double:
+                field_list[fieldno].field_type =
+                    (char *) malloc(sizeof(char) * 255);
+                snprintf((char *) field_list[fieldno].field_type, 255,
+                         "float%s", dims);
+                field_list[fieldno].field_size = sizeof(double);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(void *);
+                break;
+
+            case adios_byte:
+                field_list[fieldno].field_type =
+                    (char *) malloc(sizeof(char) * 255);
+                snprintf((char *) field_list[fieldno].field_type, 255, "char%s",
+                         dims);
+                field_list[fieldno].field_size = sizeof(char);
+                field_list[fieldno].field_offset = current_fm->size;
+                current_fm->size += sizeof(void *);
+                break;
+
+            default:
+                fprintf(stderr, "unknown type error %d\n", f->type);
+                fieldno--;
+                break;
+            }
+
+        }
 
 //      fprintf(formatfile, "%s, %s, %d, %d\n", field_list[fieldno].field_name, field_list[fieldno].field_type,field_list[fieldno].field_size,field_list[fieldno].field_offset); 
 
 
-	}
+    }
 
-	dimnames *d = NULL;
-// 	fprintf(stderr,
-// 			"============================\n\tdims and alts\n============================\n");
-// 	fprintf(stderr, "altvarcount = %d\n", altvarcount);
-	field_list =
-		(FMFieldList) realloc(field_list,
-							  sizeof(FMField) * (altvarcount + t->var_count +
-												 1));
+    dimnames *d = NULL;
+//     fprintf(stderr,
+//             "============================\n\tdims and alts\n============================\n");
+//     fprintf(stderr, "altvarcount = %d\n", altvarcount);
+    field_list =
+        (FMFieldList) realloc(field_list,
+                              sizeof(FMField) * (altvarcount + t->var_count +
+                                                 1));
 
-	for (d = current_fm->dimlist.lh_first; d != NULL; d = d->entries.le_next)
-	{
-// 		fprintf(stderr, "%s\t", d->name);
-		altname *a = NULL;
-		for (a = d->altlist.lh_first; a != NULL; a = a->entries.le_next)
-		{
-// 			fprintf(stderr, "%s\t", a->name);
-			a->field->field_offset = current_fm->size;
-			current_fm->size += sizeof(int);
-			memcpy(&field_list[fieldno], a->field, sizeof(FMField));
-			fieldno++;
+    for (d = current_fm->dimlist.lh_first; d != NULL; d = d->entries.le_next)
+    {
+//         fprintf(stderr, "%s\t", d->name);
+        altname *a = NULL;
+        for (a = d->altlist.lh_first; a != NULL; a = a->entries.le_next)
+        {
+//             fprintf(stderr, "%s\t", a->name);
+            a->field->field_offset = current_fm->size;
+            current_fm->size += sizeof(int);
+            memcpy(&field_list[fieldno], a->field, sizeof(FMField));
+            fieldno++;
 
-		}
-// 		fprintf(stderr, "\n");
+        }
+//         fprintf(stderr, "\n");
 
-	}
+    }
 
-// 	fprintf(stderr,
-// 			"============================\n\tdims and alts\n============================\n");
+//     fprintf(stderr,
+//             "============================\n\tdims and alts\n============================\n");
 
 
 
 //terminate the the fieldlist
-	for (; fieldno < (t->var_count + 1+altvarcount); fieldno++)
-	{
-		field_list[fieldno].field_type = NULL;
-		field_list[fieldno].field_name = NULL;
-		field_list[fieldno].field_offset = 0;
-		field_list[fieldno].field_size = 0;
-	}
+    for (; fieldno < (t->var_count + 1+altvarcount); fieldno++)
+    {
+        field_list[fieldno].field_type = NULL;
+        field_list[fieldno].field_name = NULL;
+        field_list[fieldno].field_offset = 0;
+        field_list[fieldno].field_size = 0;
+    }
 
-// 	fprintf(stderr, "=======================\n");
+//     fprintf(stderr, "=======================\n");
 
 
 //dump field list to check
-	{
+    {
 
-		FMField *f = field_list;
-		int x = 0;
+        FMField *f = field_list;
+        int x = 0;
 
-		for (x = 0; x < fieldno; x++)
-		{
-			f = &field_list[x];
-			if (f == NULL || f->field_name == NULL || f->field_size == 0)
-				break;
+        for (x = 0; x < fieldno; x++)
+        {
+            f = &field_list[x];
+            if (f == NULL || f->field_name == NULL || f->field_size == 0)
+                break;
 
-//  			fprintf(stderr, "%d: %s %s %d %d\n",
-//  					x, f->field_name, f->field_type, f->field_size,
-//  					f->field_offset);
+//              fprintf(stderr, "%d: %s %s %d %d\n",
+//                      x, f->field_name, f->field_type, f->field_size,
+//                      f->field_offset);
 
-		}
+        }
 
-	}
+    }
 
 //associate field list
-	format->field_list = field_list;
+    format->field_list = field_list;
 
-	current_fm->format->struct_size = current_fm->size;
-	current_fm->buffer = (unsigned char *) malloc(current_fm->size);
-	memset(current_fm->buffer, 0, current_fm->size);
+    current_fm->format->struct_size = current_fm->size;
+    current_fm->buffer = (unsigned char *) malloc(current_fm->size);
+    memset(current_fm->buffer, 0, current_fm->size);
 
 #if HAVE_PORTALS == 1
 //defined(__CRAYXT_COMPUTE_LINUX_TARGET)
-	current_fm->s = InitIOFromFile("param", rank);
-	current_fm->s->rank = rank;
-	current_fm->ioformat = register_data(current_fm->s, current_fm->format);
+    current_fm->s = InitIOFromFile("param", rank);
+    current_fm->s->rank = rank;
+    current_fm->ioformat = register_data(current_fm->s, current_fm->format);
 #elif HAVE_INFINIBAND == 1
-	current_fm->s = EVthin_ib_InitIOFile("param", 1, rank);
-	current_fm->ioformat =
-		EVthin_ib_registerData(current_fm->s, current_fm->format);
-	{
-		//we can read the code from here
- 		char codebuffer[1024*1024];
-		char readbuffer[1024*1024];
-		
-		char *filename = getenv("FILTER");
-		
-		if(filename != NULL)
-		{
-			FILE *codefile  = fopen(filename, "r");
-			if(codefile != NULL) 
-			{
-				fread(readbuffer, sizeof(char), 1024*1024, codefile);
-				fclose(codefile);
-			}
-		
-			if(!strcmp(filename, "warp_stat.c"))
-			{	
-//				sprintf(codebuffer, readbuffer, 0);						
-				set_code(current_fm->s, readbuffer);
-			}
-			else if(!strcmp(filename, "warp_bb.c"))
-			{
-//				sprintf(codebuffer, readbuffer);						
-				set_code(current_fm->s, readbuffer);				
-			}
-			else if(!strcmp(filename, "warp_order.c"))
-			{
-				set_code(current_fm->s, readbuffer);											
-			}
-			else if(!strcmp(filename, "warp_tag.c"))
-			{
-				set_code(current_fm->s, readbuffer);											
-			}
-			else if(!strcmp(filename, "warp_bbs.c"))
-			{
-				set_code(current_fm->s, readbuffer);											
-			}
-
-		}
-	}
-	
+    current_fm->s = EVthin_ib_InitIOFile("param", 1, rank);
+    current_fm->ioformat =
+        EVthin_ib_registerData(current_fm->s, current_fm->format);
+    {
+        //we can read the code from here
+         char codebuffer[1024*1024];
+        char readbuffer[1024*1024];
+        
+        char *filename = getenv("FILTER");
+        
+        if(filename != NULL)
+        {
+            FILE *codefile  = fopen(filename, "r");
+            if(codefile != NULL) 
+            {
+                fread(readbuffer, sizeof(char), 1024*1024, codefile);
+                fclose(codefile);
+            }
+        
+            if(!strcmp(filename, "warp_stat.c"))
+            {    
+//                sprintf(codebuffer, readbuffer, 0);                        
+                set_code(current_fm->s, readbuffer);
+            }
+            else if(!strcmp(filename, "warp_bb.c"))
+            {
+//                sprintf(codebuffer, readbuffer);                        
+                set_code(current_fm->s, readbuffer);                
+            }
+            else if(!strcmp(filename, "warp_order.c"))
+            {
+                set_code(current_fm->s, readbuffer);                                            
+            }
+            else if(!strcmp(filename, "warp_tag.c"))
+            {
+                set_code(current_fm->s, readbuffer);                                            
+            }
+            else if(!strcmp(filename, "warp_bbs.c"))
+            {
+                set_code(current_fm->s, readbuffer);                                            
+            }
+
+        }
+    }
+    
 #endif
 
-	current_fm->snd_count = 0;
+    current_fm->snd_count = 0;
 
-	mdata->fm = current_fm;
+    mdata->fm = current_fm;
 
-	return 0;
-	
+    return 0;
+    
 }
 
 static FMField *
 internal_find_field(char *name, FMFieldList flist)
 {
-	FMField *f = flist;
-	while (f->field_name != NULL && strcmp(f->field_name, name))
-	{
-		f++;
-	}
+    FMField *f = flist;
+    while (f->field_name != NULL && strcmp(f->field_name, name))
+    {
+        f++;
+    }
 
-	return f;
+    return f;
 }
  
 extern enum ADIOS_FLAG adios_datatap_should_buffer (struct adios_file_struct * fd
@@ -671,141 +671,141 @@ extern enum ADIOS_FLAG adios_datatap_should_buffer (struct adios_file_struct * f
 
 extern void
 adios_datatap_write(struct adios_file_struct *fd,
-					struct adios_var_struct *f,
-					void *data, struct adios_method_struct *method)
+                    struct adios_var_struct *f,
+                    void *data, struct adios_method_struct *method)
 {
-	struct fm_structure *fm;
-	dmd *mdata = (dmd *) method->method_data;
-
-
-	struct adios_group_struct *group = method->group;
-
-	fm = mdata->fm;
-
-	if (group == NULL || fm == NULL)
-	{
-		fprintf(stderr, "group or fm is null - improperly initialized\n");
-		return;
-
-	}
-
-
-	FMFieldList flist = fm->format->field_list;
-	FMField *field = NULL;
-
-	char *fixedname = findFixedName(fm, f->name);
-
-	field = internal_find_field(fixedname, flist);
-	if (field != NULL)
-	{
-		if (!f->dimensions)
-		{
-			//scalar quantity
-			if (data)
-			{
-				//why wouldn't it have data?
-				memcpy(&fm->buffer[field->field_offset], data,
-					   field->field_size);
-
-				//scalar quantities can have altnames also so assign those
-				if(field->field_name != NULL)
-				{
-					
-					dimnames *d = NULL;
-					for (d = fm->dimlist.lh_first; d != NULL;
-						 d = d->entries.le_next)
-					{
-						if (!strcmp(d->name, field->field_name))
-						{
-							//matches
-							//check if there are altnames
-							altname *a = NULL;
-							for (a = d->altlist.lh_first; a != NULL;
-								 a = a->entries.le_next)
-							{
-								//use the altname field to get the data into the buffer
-								memcpy(&fm->buffer[a->field->field_offset], data,
-									   a->field->field_size);
-								//debug
-//  								int *testingint = (int*)&fm->buffer[a->field->field_offset];
-								
-//   								fprintf(stderr, "writing %s to %s at %d %d\n",
-//   										f->name, a->name, a->field->field_offset,
-//  										(int)*testingint);
-
-							}
-						}
-					}
-				}
-			}
-
-			else
-			{
-				fprintf(stderr, "no data for  scalar %s\n", f->name);
-
-			}
-
-
-		}
-		else
-		{
-			//vector quantity
-			if (data)
-			{
-				//we just need to copy the pointer stored in f->data
-				memcpy(&fm->buffer[field->field_offset], &data, sizeof(void *));
-
-			}
-			else
-			{
-				fprintf(stderr, "no data for vector %s\n", f->name);
-			}
-		}
-	}
+    struct fm_structure *fm;
+    dmd *mdata = (dmd *) method->method_data;
+
+
+    struct adios_group_struct *group = method->group;
+
+    fm = mdata->fm;
+
+    if (group == NULL || fm == NULL)
+    {
+        fprintf(stderr, "group or fm is null - improperly initialized\n");
+        return;
+
+    }
+
+
+    FMFieldList flist = fm->format->field_list;
+    FMField *field = NULL;
+
+    char *fixedname = findFixedName(fm, f->name);
+
+    field = internal_find_field(fixedname, flist);
+    if (field != NULL)
+    {
+        if (!f->dimensions)
+        {
+            //scalar quantity
+            if (data)
+            {
+                //why wouldn't it have data?
+                memcpy(&fm->buffer[field->field_offset], data,
+                       field->field_size);
+
+                //scalar quantities can have altnames also so assign those
+                if(field->field_name != NULL)
+                {
+                    
+                    dimnames *d = NULL;
+                    for (d = fm->dimlist.lh_first; d != NULL;
+                         d = d->entries.le_next)
+                    {
+                        if (!strcmp(d->name, field->field_name))
+                        {
+                            //matches
+                            //check if there are altnames
+                            altname *a = NULL;
+                            for (a = d->altlist.lh_first; a != NULL;
+                                 a = a->entries.le_next)
+                            {
+                                //use the altname field to get the data into the buffer
+                                memcpy(&fm->buffer[a->field->field_offset], data,
+                                       a->field->field_size);
+                                //debug
+//                                  int *testingint = (int*)&fm->buffer[a->field->field_offset];
+                                
+//                                   fprintf(stderr, "writing %s to %s at %d %d\n",
+//                                           f->name, a->name, a->field->field_offset,
+//                                          (int)*testingint);
+
+                            }
+                        }
+                    }
+                }
+            }
+
+            else
+            {
+                fprintf(stderr, "no data for  scalar %s\n", f->name);
+
+            }
+
+
+        }
+        else
+        {
+            //vector quantity
+            if (data)
+            {
+                //we just need to copy the pointer stored in f->data
+                memcpy(&fm->buffer[field->field_offset], &data, sizeof(void *));
+
+            }
+            else
+            {
+                fprintf(stderr, "no data for vector %s\n", f->name);
+            }
+        }
+    }
 }
 
 static void internal_adios_datatap_write(struct adios_file_struct *fd,
-										 struct adios_method_struct *method);
+                                         struct adios_method_struct *method);
 
 extern void
 adios_datatap_close(struct adios_file_struct *fd,
-					struct adios_method_struct *method)
+                    struct adios_method_struct *method)
 {
 
-	dmd *mdata = method->method_data;
+    dmd *mdata = method->method_data;
 
 
-	if (!mdata->initialized)
-	{
-		return;
-	}
+    if (!mdata->initialized)
+    {
+        return;
+    }
 
 
-	if (fd->mode & adios_mode_write)
-	{
-		internal_adios_datatap_write(fd, method);
-	}
+    if (fd->mode & adios_mode_write)
+    {
+        internal_adios_datatap_write(fd, method);
+    }
 
 }
 
 
 void
 internal_adios_datatap_write(struct adios_file_struct *fd,
-							 struct adios_method_struct *method)
+                             struct adios_method_struct *method)
 {
 
 
-	if (fd == NULL)
-	{
-		fprintf(stderr, "fd is null\n");
+    if (fd == NULL)
+    {
+        fprintf(stderr, "fd is null\n");
 
-		return;
-	}
+        return;
+    }
 
-	dmd *mdata = method->method_data;
+    dmd *mdata = method->method_data;
 
 
-	struct adios_group_struct *t = method->group;
+    struct adios_group_struct *t = method->group;
 
 
 
@@ -813,18 +813,18 @@ internal_adios_datatap_write(struct adios_file_struct *fd,
 
 //iterate through all the types
 //find the correct format by name
-	struct fm_structure *fm = mdata->fm;
+    struct fm_structure *fm = mdata->fm;
 
-	if (t == NULL || fm == NULL)
-	{
-		fprintf(stderr, "improperly initialized for write\n");
+    if (t == NULL || fm == NULL)
+    {
+        fprintf(stderr, "improperly initialized for write\n");
 
-		return;
+        return;
 
-	}
+    }
 
-// 	fprintf(stderr, "\t---\n");
-// 	fflush(stderr);
+//     fprintf(stderr, "\t---\n");
+//     fflush(stderr);
 
 
 //          FMContext src_context = create_local_FMcontext(NULL);
@@ -838,30 +838,30 @@ internal_adios_datatap_write(struct adios_file_struct *fd,
 
 //#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
 #if HAVE_PORTALS == 1
-	if (fm->snd_count > 0)
-	{
-		send_end(fm->s);
-	}
+    if (fm->snd_count > 0)
+    {
+        send_end(fm->s);
+    }
 #elif HAVE_INFINIBAND == 1
-	if (fm->snd_count > 0)
-	{
-		EVthin_ib_endSend(fm->s);
-	}
+    if (fm->snd_count > 0)
+    {
+        EVthin_ib_endSend(fm->s);
+    }
 #endif
 
 
 //now that we have all the info lets call write on each of these data types
 //#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
 #if HAVE_PORTALS == 1
-	start_send(fm->s, fm->buffer, fm->size, fm->ioformat, NULL);
+    start_send(fm->s, fm->buffer, fm->size, fm->ioformat, NULL);
 
 #elif HAVE_INFINIBAND == 1
-// 	fprintf(stderr, "size = %d\n", fm->size);
-	
-	EVthin_ib_startSend(fm->s, fm->buffer, fm->size, fm->ioformat, fm->alist);
+//     fprintf(stderr, "size = %d\n", fm->size);
+    
+    EVthin_ib_startSend(fm->s, fm->buffer, fm->size, fm->ioformat, fm->alist);
 #endif
 
-	fm->snd_count++;
+    fm->snd_count++;
 
 
 }
@@ -870,10 +870,10 @@ extern void
 adios_datatap_finalize(int mype, struct adios_method_struct *method)
 {
 
-	dmd *mdata = method->method_data;
+    dmd *mdata = method->method_data;
 
 
-	struct adios_group_struct *t = method->group;
+    struct adios_group_struct *t = method->group;
 
 
 
@@ -881,38 +881,38 @@ adios_datatap_finalize(int mype, struct adios_method_struct *method)
 
 //iterate through all the types
 //find the correct format by name
-	struct fm_structure *fm = mdata->fm;
+    struct fm_structure *fm = mdata->fm;
 
-	if (t == NULL || fm == NULL)
-	{
-		fprintf(stderr, "improperly initialized for finalize %p %p\n", t, fm);
+    if (t == NULL || fm == NULL)
+    {
+        fprintf(stderr, "improperly initialized for finalize %p %p\n", t, fm);
 
-		return;
+        return;
 
-	}
+    }
 
 #if HAVE_PORTALS == 1
-	if (fm->snd_count > 0)
-	{
-		char buffer[128];
-		sprintf(buffer, "client-%d", rank);
+    if (fm->snd_count > 0)
+    {
+        char buffer[128];
+        sprintf(buffer, "client-%d", rank);
 
-		outputTimingInfo(buffer);
+        outputTimingInfo(buffer);
 
-		send_end(fm->s);
+        send_end(fm->s);
 
-	}
+    }
 #elif HAVE_INFINIBAND == 1
-	if (fm->snd_count > 0)
-	{
+    if (fm->snd_count > 0)
+    {
 
-		char buffer[128];
-		sprintf(buffer, "client-%d", rank);
+        char buffer[128];
+        sprintf(buffer, "client-%d", rank);
 
-		EVthin_ib_outputTimingInfo(buffer);
+        EVthin_ib_outputTimingInfo(buffer);
 
-		EVthin_ib_endSend(fm->s);
-	}
+        EVthin_ib_endSend(fm->s);
+    }
 #endif
 
 }
@@ -921,39 +921,39 @@ adios_datatap_finalize(int mype, struct adios_method_struct *method)
 extern void
 adios_datatap_end_iteration(struct adios_method_struct *method)
 {
-	struct fm_structure *fm;
-	dmd *mdata = (dmd *) method->method_data;
-	fm = mdata->fm;
+    struct fm_structure *fm;
+    dmd *mdata = (dmd *) method->method_data;
+    fm = mdata->fm;
 
-	if (fm == NULL)
-		return;
+    if (fm == NULL)
+        return;
 
 
 #if HAVE_PORTALS == 1
-	startIter(fm->s);
+    startIter(fm->s);
 #elif HAVE_INFINIBAND == 1
-	EVthin_ib_startIter(fm->s);
+    EVthin_ib_startIter(fm->s);
 #endif
 
-	mdata->cycle_id = 0;
+    mdata->cycle_id = 0;
 
 }
 
 extern void
 adios_datatap_start_calculation(struct adios_method_struct *method)
 {
-	struct fm_structure *fm;
-	dmd *mdata = (dmd *) method->method_data;
-	fm = mdata->fm;
+    struct fm_structure *fm;
+    dmd *mdata = (dmd *) method->method_data;
+    fm = mdata->fm;
 
-	if (fm == NULL)
-		return;
+    if (fm == NULL)
+        return;
 
 
 #if HAVE_PORTALS == 1
-	startCompute(fm->s, mdata->cycle_id);
+    startCompute(fm->s, mdata->cycle_id);
 #elif HAVE_INFINIBAND == 1
-	EVthin_ib_startCompute(fm->s, mdata->cycle_id);
+    EVthin_ib_startCompute(fm->s, mdata->cycle_id);
 #endif
 
 
@@ -962,41 +962,41 @@ adios_datatap_start_calculation(struct adios_method_struct *method)
 extern void
 adios_datatap_stop_calculation(struct adios_method_struct *method)
 {
-	struct fm_structure *fm;
-	dmd *mdata = (dmd *) method->method_data;
-	fm = mdata->fm;
+    struct fm_structure *fm;
+    dmd *mdata = (dmd *) method->method_data;
+    fm = mdata->fm;
 
-	if (fm == NULL)
-		return;
+    if (fm == NULL)
+        return;
 
 
 #if HAVE_PORTALS == 1
-	endCompute(fm->s, mdata->cycle_id);
+    endCompute(fm->s, mdata->cycle_id);
 #elif HAVE_INFINIBAND == 1
-	EVthin_ib_endCompute(fm->s, mdata->cycle_id);
+    EVthin_ib_endCompute(fm->s, mdata->cycle_id);
 #endif
 
-	mdata->cycle_id++;
+    mdata->cycle_id++;
 
 }
 
 extern void
 adios_datatap_get_write_buffer(struct adios_file_struct *fd,
-			       struct adios_var_struct *f,
-			       uint64_t *size,
-			       void **buffer,
-			       struct adios_method_struct *method)
+                   struct adios_var_struct *f,
+                   uint64_t *size,
+                   void **buffer,
+                   struct adios_method_struct *method)
 {
-	fprintf(stderr, "adios_datatap_write_get_buffer: datatap disabled, "
-			"no portals support\n");
+    fprintf(stderr, "adios_datatap_write_get_buffer: datatap disabled, "
+            "no portals support\n");
 }
 
 
 void
 adios_datatap_read(struct adios_file_struct *fd,
-		   struct adios_var_struct *f,
-		   void *buffer, uint64_t buffer_size,
-		   struct adios_method_struct *method)
+           struct adios_var_struct *f,
+           void *buffer, uint64_t buffer_size,
+           struct adios_method_struct *method)
 {
 
 }
@@ -1006,18 +1006,18 @@ adios_datatap_read(struct adios_file_struct *fd,
 
 void
 adios_datatap_read(struct adios_file_struct *fd,
-				   struct adios_var_struct *f,
-				   void *buffer, struct adios_method_struct *method)
+                   struct adios_var_struct *f,
+                   void *buffer, struct adios_method_struct *method)
 {
 
 }
 
 extern void
 adios_datatap_get_write_buffer(struct adios_file_struct *fd,
-							   struct adios_var_struct *f,
-							   unsigned long long *size,
-							   void **buffer,
-							   struct adios_method_struct *method)
+                               struct adios_var_struct *f,
+                               unsigned long long *size,
+                               void **buffer,
+                               struct adios_method_struct *method)
 {
 }
 
@@ -1043,20 +1043,20 @@ adios_datatap_finalize(int mype, struct adios_method_struct *method)
 
 extern void
 adios_datatap_close(struct adios_file_struct *fd,
-					struct adios_method_struct *method)
+                    struct adios_method_struct *method)
 {
 }
 
 extern void
 adios_datatap_write(struct adios_file_struct *fd,
-					struct adios_var_struct *f,
-					void *data, struct adios_method_struct *method)
+                    struct adios_var_struct *f,
+                    void *data, struct adios_method_struct *method)
 {
 }
 
 extern void
 adios_datatap_open(struct adios_file_struct *fd,
-				   struct adios_method_struct *method)
+                   struct adios_method_struct *method)
 {
 }
 
@@ -1071,12 +1071,12 @@ enum ADIOS_FLAG adios_datatap_should_buffer (struct adios_file_struct * fd
 }
 #endif
 
-/*	FILE *formatfile = fopen("/tmp/formatfile","a+");
-	if(formatfile == NULL) {
-		fprintf(stderr, "can not open format file\n");
-		exit(0);
-	}
-	fprintf(formatfile, "\n\n\n");
-	fclose(formatfile);
+/*    FILE *formatfile = fopen("/tmp/formatfile","a+");
+    if(formatfile == NULL) {
+        fprintf(stderr, "can not open format file\n");
+        exit(0);
+    }
+    fprintf(formatfile, "\n\n\n");
+    fclose(formatfile);
 
 */
diff --git a/src/write/adios_dimes.c b/src/write/adios_dimes.c
index 909e502..caf61e2 100644
--- a/src/write/adios_dimes.c
+++ b/src/write/adios_dimes.c
@@ -22,6 +22,7 @@
 #include "core/ds_metadata.h"
 #include "core/adios_logger.h"
 
+#include "dimes_interface.h"
 #include "dataspaces.h"
 
 /*#define DATASPACES_NO_VERSIONING  define it at configure as -DDATASPACES_NO_VERSIONING in CFLAGS */
@@ -32,6 +33,12 @@ static int adios_dimes_initialized = 0;
 static char ds_var_name[MAX_DS_NAMELEN];
 static unsigned int adios_dimes_verbose = 3;
 
+struct adios_dimes_file_info
+{
+    char *name;
+    int time_index;
+};
+
 struct adios_dimes_data_struct
 {
     int rank;   // dataspaces rank or MPI rank if MPI is available
@@ -45,61 +52,50 @@ struct adios_dimes_data_struct
     int  num_of_files; // how many files do we have with this method
     char *fnames[MAX_NUM_OF_FILES];  // names of files (needed at finalize)
     int  fversions[MAX_NUM_OF_FILES];   // last steps of files (needed at finalize)
+    struct adios_dimes_file_info file_info[MAX_NUM_OF_FILES]; // keep track of time index for each opened file
 };
 
-
-
-static int get_dim_rank_value(struct adios_dimension_item_struct * dim_info, struct adios_group_struct *group)
+static int init_dimes_file_info(struct adios_dimes_data_struct *p)
 {
-    if(!dim_info)
-       return 0;
+    int i;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        p->file_info[i].name = NULL;
+        p->file_info[i].time_index = 0;
+    }
+}
 
-    if(dim_info->id != 0)
-    {
-        struct adios_var_struct *dim_var = NULL;
-        dim_var = adios_find_var_by_id(group->vars, dim_info->id);
-        if(!dim_var || !dim_var->data)
-           return 0;
-        
-        int rank = 0;
-        switch ( dim_var->type )
-        {
-        case adios_unsigned_byte:
-             rank = (*(uint8_t*) dim_var->data);
-             break;
-        case adios_byte:
-             rank = (*(int8_t*) dim_var->data);
-             break;
-        case adios_unsigned_short:
-             rank = (*(uint16_t*) dim_var->data);
-             break;
-        case adios_short:
-             rank = (*(int16_t*) dim_var->data);
-             break;
-        case adios_unsigned_integer:
-             rank = (*(uint32_t*) dim_var->data);
-             break;
-        case adios_integer:
-             rank = (*(int32_t*) dim_var->data);
-             break;
-        case adios_unsigned_long:
-             rank = (*(uint64_t*) dim_var->data);
-             break;
-        case adios_long:
-             rank = (*(int64_t*) dim_var->data);
-             break;
-
-        default: break;
+static void free_dimes_file_info(struct adios_dimes_data_struct *p)
+{
+    int i;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name) {
+            free(p->file_info[i].name);
         }
+    }
+
+    return;
+}
 
-        return rank;
+static struct adios_dimes_file_info* lookup_dimes_file_info(struct adios_dimes_data_struct *p, const char* fname)
+{
+    int i;
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name != NULL &&
+            strcmp(p->file_info[i].name, fname) == 0) {
+            return &p->file_info[i];
+        }
     }
-    else
-    {
-        return dim_info->rank;
+
+    for (i = 0; i < MAX_NUM_OF_FILES; i++) {
+        if (p->file_info[i].name == NULL) {
+            p->file_info[i].name = malloc(strlen(fname)+1);
+            strcpy(p->file_info[i].name, fname);
+            return &p->file_info[i];
+        }
     }
-}
 
+    return NULL;
+}
 
 static int connect_to_dimes (struct adios_dimes_data_struct * p, MPI_Comm comm)
 {
@@ -133,8 +129,9 @@ static int connect_to_dimes (struct adios_dimes_data_struct * p, MPI_Comm comm)
 #endif
 
         log_debug ("adios_dimes: rank=%d connected to DATASPACES: peers=%d\n", p->rank, p->peers);        
-        globals_adios_set_dimes_connected_from_writer();
     }
+
+    globals_adios_set_dimes_connected_from_writer();
     return ret;
 }
 
@@ -165,6 +162,7 @@ void adios_dimes_init (const PairStruct * parameters,
 #endif
     p->num_of_files = 0;
 
+    init_dimes_file_info(p);
     connect_to_dimes (p, method->init_comm);
 
     log_info ("adios_dimes_init: done\n");
@@ -181,9 +179,9 @@ int adios_dimes_open (struct adios_file_struct * fd,
     int ret = 0;
     struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-  
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
     log_info ("adios_dimes_open: open %s, mode=%d, time_index=%d \n",
-                        fd->name, fd->mode, p->time_index);
+                        fd->name, fd->mode, info->time_index);
 
 #if HAVE_MPI
     // if we have MPI and a communicator, we can get the exact size of this application
@@ -196,10 +194,11 @@ int adios_dimes_open (struct adios_file_struct * fd,
     if (fd->mode == adios_mode_write || fd->mode == adios_mode_append)
     {
         log_debug ("adios_dimes_open: rank=%d call write lock...\n", p->rank);       
-	// Block till all previously allocated RDMA buffers are fetched. 
-	dimes_put_sync_all();
         dspaces_lock_on_write (fd->name, &p->mpi_comm);  
         log_debug ("adios_dimes_open: rank=%d got write lock\n", p->rank);        
+        // Free data objects written in the previous steps
+        dimes_put_sync_group(fd->name, info->time_index);
+        dimes_put_set_group(fd->name, info->time_index);    
     }
     else if (fd->mode == adios_mode_read)
     {
@@ -237,6 +236,7 @@ void adios_dimes_write (struct adios_file_struct * fd
     struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
                                                             method->method_data;
     struct adios_group_struct *group = fd->group;
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
     //Get var size
     //  FIXME: type size of a string >2GB does not fit to int. 
     //  adios_get_type_size returns uint64_t but dspaces_put handles only int
@@ -257,9 +257,9 @@ void adios_dimes_write (struct adios_file_struct * fd
     // Calculate lower and upper bounds for each available dimension (up to 3 dims)
     while( var_dimensions && ndims < 3)
     {
-        dims[ndims] = get_dim_rank_value(&(var_dimensions->dimension), group);
-        gdims[ndims] = get_dim_rank_value(&(var_dimensions->global_dimension), group);
-        lb[ndims] = get_dim_rank_value(&(var_dimensions->local_offset), group);
+        dims[ndims] = adios_get_dim_value (&(var_dimensions->dimension));
+        gdims[ndims] = adios_get_dim_value (&(var_dimensions->global_dimension));
+        lb[ndims] = adios_get_dim_value (&(var_dimensions->local_offset));
         if (dims[ndims] > 0)  {
             ub[ndims] = lb[ndims] + dims[ndims] - 1;
             ndims++;
@@ -274,13 +274,15 @@ void adios_dimes_write (struct adios_file_struct * fd
 #ifdef DATASPACES_NO_VERSIONING
     version = 0;              /* Update/overwrite data in DataSpaces  (we write time_index as a variable at close)*/
 #else
-    version = p->time_index;  /* Add new data as separate to DataSpaces */
+    version = info->time_index;  /* Add new data as separate to DataSpaces */
 #endif
     
     if (v->path != NULL && v->path[0] != '\0' && strcmp(v->path,"/")) 
         snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s/%s/%s", fd->name, fd->group->name, v->path, v->name);
-    else 
+    else if (!strcmp(v->path,"/"))
         snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s//%s", fd->name, fd->group->name, v->name);
+    else
+        snprintf(ds_var_name, MAX_DS_NAMELEN, "%s/%s/%s", fd->name, fd->group->name, v->name);
 
     //snprintf(dspaces_type_var_name, MAX_DS_NAMELEN, "TYPE@%s", ds_var_name);
     
@@ -414,31 +416,27 @@ void adios_dimes_read (struct adios_file_struct * fd
     memset(offset2, 0, 3*sizeof(int));
     memset(dim_size, 0, 3*sizeof(int));
 
-    version = p->time_index;
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
+    version = info->time_index;
 }
 
 /* Gather var/attr indices from all processes to rank 0 */
 static void adios_dimes_gather_indices (struct adios_file_struct * fd
                                ,struct adios_method_struct * method
-                               ,struct adios_index_process_group_struct_v1 **pg_root 
-                               ,struct adios_index_var_struct_v1 **vars_root
-                               ,struct adios_index_attribute_struct_v1 ** attrs_root
+                               ,struct adios_index_struct_v1 * index
                                )
 {
     struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-    struct adios_index_process_group_struct_v1 * my_pg_root = 0;
-    struct adios_index_var_struct_v1 * my_vars_root = 0;
-    struct adios_index_attribute_struct_v1 * my_attrs_root = 0;
     struct adios_index_process_group_struct_v1 * new_pg_root = 0;
     struct adios_index_var_struct_v1 * new_vars_root = 0;
     struct adios_index_attribute_struct_v1 * new_attrs_root = 0;
     
     // build local index first appending to any existing index
-    adios_build_index_v1 (fd, &my_pg_root, &my_vars_root, &my_attrs_root);
+    adios_build_index_v1 (fd, index);
 
     log_debug ("%s index after first build is pg=%x vars=%x attrs=%x\n", 
-                __func__, my_pg_root, my_vars_root, my_attrs_root);
+                __func__, index->pg_root, index->vars_root, index->attrs_root);
 #if 0
 #if HAVE_MPI
     // gather all on rank 0
@@ -481,17 +479,12 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
                 adios_parse_process_group_index_v1 (&b
                         ,&new_pg_root
                         );
-                adios_parse_vars_index_v1 (&b, &new_vars_root);
+                adios_parse_vars_index_v1 (&b, &new_vars_root, NULL, NULL);
                 adios_parse_attributes_index_v1 (&b
                         ,&new_attrs_root
                         );
-                adios_merge_index_v1 (&my_pg_root
-                        ,&my_vars_root
-                        ,&my_attrs_root
-                        ,new_pg_root, new_vars_root
-                        ,new_attrs_root
-                        );
-                adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
+                adios_merge_index_v1 (index, new_pg_root, 
+                                      new_vars_root, new_attrs_root);
                 new_pg_root = 0;
                 new_vars_root = 0;
                 new_attrs_root = 0;
@@ -508,7 +501,7 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
             uint64_t buffer_offset = 0;
 
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                    ,0, my_pg_root ,my_vars_root ,my_attrs_root);
+                    ,0, index);
 
             uint32_t tmp_buffer_size = (uint32_t) buffer_size;
             MPI_Gather (&tmp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
@@ -525,20 +518,19 @@ static void adios_dimes_gather_indices (struct adios_file_struct * fd
 #endif
 #endif
 
-    *pg_root = my_pg_root;
-    *vars_root = my_vars_root;
-    *attrs_root = my_attrs_root;
     log_debug ("%s index after gathering is pg=%x vars=%x attrs=%x\n", 
-                __func__, my_pg_root, my_vars_root, my_attrs_root);
+                __func__, index->pg_root, index->vars_root, index->attrs_root);
 }
 
 static int dimes_get_full_name_len (char * path, char * name)
 {
     int len;
     // make full name
-    if (!path || !path[0] || !strcmp (path, "/")) { 
+    if (!path || !path[0]) { 
         // no path, just name + leading /
-        len = strlen(name) + 1;
+        len = strlen(name);
+    } else if (!strcmp (path, "/")) {
+        len = strlen(name)+1;
     } else {
         len = strlen(path) + strlen(name) + 1;
     }
@@ -550,8 +542,11 @@ static int dimes_get_full_name (char * path, char * name, int maxlen,
 {
     int len;
     // make full name
-    if (!path || !path[0] || !strcmp (path, "/")) { 
+    if (!path || !path[0]) { 
         // no path, just name + leading /
+        len = strlen(name);
+        strncpy(out, name, maxlen);
+    } else if (!strcmp (path, "/")) {
         len = strlen(name) + 1;
         out[0] = '/';
         strncpy(out+1, name, maxlen-1);
@@ -567,15 +562,14 @@ static int dimes_get_full_name (char * path, char * name, int maxlen,
 
 void dimes_pack_group_info (struct adios_file_struct *fd
                                   ,struct adios_method_struct * method
-                                  ,struct adios_index_var_struct_v1 *vars_root
-                                  ,struct adios_index_attribute_struct_v1 * attrs_root
+                                  ,struct adios_index_struct_v1 *index
                                   ,char ** buffer, int *buffer_size, int *nvars, int *nattrs
                                   )
 {
     struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-    struct adios_index_var_struct_v1 * v = vars_root;
-    struct adios_index_attribute_struct_v1 * a = attrs_root;
+    struct adios_index_var_struct_v1 * v = index->vars_root;
+    struct adios_index_attribute_struct_v1 * a = index->attrs_root;
     int size;
     int ndims; // whatever the type of v->characteristics->dims.count is, we write an int to buffer
     int hastime; // true if variable has time dimension
@@ -630,8 +624,8 @@ void dimes_pack_group_info (struct adios_file_struct *fd
     *buffer_size = size;
 
     /* Second cycle: fill up the buffer */
-    v = vars_root;
-    a = attrs_root;
+    v = index->vars_root;
+    a = index->attrs_root;
     char * b = *buffer;
     int i, j, namelen;
     char name[256];
@@ -800,10 +794,9 @@ void adios_dimes_close (struct adios_file_struct * fd
 {
     struct adios_dimes_data_struct *p = (struct adios_dimes_data_struct *)
                                                 method->method_data;
-    struct adios_index_process_group_struct_v1 * pg_root;
-    struct adios_index_var_struct_v1 * vars_root;
-    struct adios_index_attribute_struct_v1 * attrs_root;
+    struct adios_index_struct_v1 * index = adios_alloc_index_v1(1);
     struct adios_attribute_struct * a = fd->group->attributes;
+    struct adios_dimes_file_info *info = lookup_dimes_file_info(p, fd->name);
     int lb[3], ub[3], didx[3]; // for reordering DS dimensions
     unsigned int version;
 
@@ -817,7 +810,7 @@ void adios_dimes_close (struct adios_file_struct * fd
 
         //adios_write_close_vars_v1 (fd);
         /* Gather var/attr indices from all processes to rank 0 */
-        adios_dimes_gather_indices (fd, method, &pg_root, &vars_root ,&attrs_root);
+        adios_dimes_gather_indices (fd, method, index);
 
         // make sure all processes have finished putting data to the space 
         // before we put metadata from rank 0
@@ -830,14 +823,14 @@ void adios_dimes_close (struct adios_file_struct * fd
 #ifdef DATASPACES_NO_VERSIONING
             version = 0;              /* Update/overwrite data in DataSpaces */
 #else
-            version = p->time_index;  /* Add new data as separate to DataSpaces */
+            version = info->time_index;  /* Add new data as separate to DataSpaces */
 #endif
 
             /* Make metadata from indices */
             char * indexbuf;
             int    indexlen;
             int    nvars, nattrs;
-            dimes_pack_group_info (fd, method, vars_root, attrs_root, 
+            dimes_pack_group_info (fd, method, index, 
                                    &indexbuf, &indexlen, &nvars, &nattrs);
 
             
@@ -854,8 +847,8 @@ void adios_dimes_close (struct adios_file_struct * fd
             char * file_info_buf; /* store FILE at fn's group list */
             int    file_info_buf_len; /* = 128 currently */
             snprintf (ds_var_name, MAX_DS_NAMELEN, "FILE@%s", fd->name);
-            dimes_pack_file_info (p->time_index, nvars, nattrs, indexlen, fd->group->name, 
-                               &file_info_buf, &file_info_buf_len);
+            dimes_pack_file_info (info->time_index, nvars, nattrs, indexlen,
+                        fd->group->name, &file_info_buf, &file_info_buf_len);
             log_debug ("%s: put %s = buflen=%d time=%d nvars=%d nattr=%d index=%d name=%d:%s into space\n",
                 __func__, ds_var_name, 
                 *(int*)file_info_buf, *(int*)(file_info_buf+4), 
@@ -906,12 +899,14 @@ void adios_dimes_close (struct adios_file_struct * fd
 
 
         // free allocated index lists
-        adios_clear_index_v1 (pg_root, vars_root, attrs_root);
+        adios_clear_index_v1 (index);
+        adios_free_index_v1 (index);
 
         // rank=0 may be in put_sync when others call unlock, which is a global op
         MPI_Barrier (p->mpi_comm); 
         //log_debug("%s: call dspaces_put_sync()\n", __func__);
         //dspaces_put_sync();
+        dimes_put_unset_group();
         log_debug("%s: call dspaces_unlock_on_write(%s)\n", __func__, fd->name);
         dspaces_unlock_on_write(fd->name, &p->mpi_comm);
     }
@@ -921,7 +916,7 @@ void adios_dimes_close (struct adios_file_struct * fd
     } 
 
     /* Increment the time index */
-    p->time_index++;
+    info->time_index++;
 
 
     log_info ("%s: exit\n", __func__);
@@ -938,6 +933,8 @@ void adios_dimes_finalize (int mype, struct adios_method_struct * method)
     int didx[3]; // for reordering DS dimensions
     int value[2] = {0, 1}; // integer to be written to space (terminated=1)
 
+    free_dimes_file_info(p);
+
     // tell the readers which files are finalized
     dimes_dimension_ordering(1, 0, 0, didx); // C ordering of 1D array into DS
     for (i=0; i<p->num_of_files; i++) {
@@ -961,7 +958,7 @@ void adios_dimes_finalize (int mype, struct adios_method_struct * method)
         free (p->fnames[i]);
     }
 
-    // block till all previsouly allocated RDMA buffers are freed
+    // Free all previsouly allocated RDMA buffers
     dimes_put_sync_all();
 
     // disconnect from dataspaces if we are connected from writer but not anymore from reader
diff --git a/src/write/adios_flexpath.c b/src/write/adios_flexpath.c
index cd8633b..ecf2d6c 100644
--- a/src/write/adios_flexpath.c
+++ b/src/write/adios_flexpath.c
@@ -21,6 +21,11 @@
 #include <sys/stat.h>
 // end of change
 
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
 #include "public/adios_mpi.h"
 #include "public/adios_error.h"
 #include "core/adios_transport_hooks.h"
@@ -30,27 +35,17 @@
 #include "core/util.h"
 #include "core/adios_logger.h"
 
-// // system libraries
-// #include <stdio.h>
-// #include <stdlib.h>
 #if HAVE_FLEXPATH==1
 
 // // evpath libraries
 #include <evpath.h>
-#include <gen_thread.h>
-
-// // local libraries
-// #include "config.h"
-// #include "core/adios_internals.h"
-// #include "core/adios_transport_hooks.h"
-// #include "core/util.h"
-// #include "public/adios.h"
+#include <cod.h>
 #include "core/flexpath.h"
 #include <sys/queue.h>
 
 /************************* Structure and Type Definitions ***********************/
 // used for messages in the control queue
-typedef enum {VAR=0, DATA_FLUSH, OPEN, CLOSE, INIT, EVGROUP_FLUSH, DATA_BUFFER, OFFSET_MSG} FlexpathMessageType;
+typedef enum {VAR=0, DATA_FLUSH, OPEN, CLOSE, INIT, EVGROUP_FLUSH, DATA_BUFFER} FlexpathMessageType;
 
 // maintains connection information
 typedef struct _flexpath_stone {
@@ -120,36 +115,44 @@ typedef struct _flexpath_write_file_data {
     // EVPath stuff
     EVstone multiStone;
     EVstone sinkStone;
-    EVsource formatSource;
+
     EVsource dataSource;
     EVsource offsetSource;
+    EVsource dropSource;
     EVsource opSource;
+    EVsource stepSource;
+
     EVaction multi_action;
     FlexpathStone* bridges;
     int numBridges;
     attr_list attrs;
 
+    int num_reader_coordinators;
+    int *reader_coordinators;
+
     // server state
     int maxQueueSize;
     int openCount;
-    int currentStep;
-    thr_mutex_t openMutex;
+    int readerStep;
+    int writerStep; // how many times has the writer called closed?
+    int finalized; // have we finalized?
+    int use_ctrl_thread;
+
     FlexpathFMStructure* fm;
     FlexpathVarNode* askedVars;
     FlexpathVarNode* writtenVars;
     FlexpathVarNode* formatVars;
     FlexpathQueueNode* controlQueue;
-    FlexpathQueueNode* dataQueue;    
-    thr_mutex_t controlMutex;
-    thr_mutex_t dataMutex;
-    thr_mutex_t dataMutex2;
-    thr_condition_t controlCondition;
-    thr_condition_t dataCondition; //fill
-    thr_condition_t dataCondition2; //empty
+    FlexpathQueueNode* dataQueue;   
+    pthread_mutex_t openMutex;
+    pthread_mutex_t controlMutex;
+    pthread_mutex_t dataMutex;
+    pthread_cond_t controlCondition;
+    pthread_cond_t dataCondition; //fill
+    pthread_t ctrl_thr_id;    
 
     // global array distribution data
     int globalCount;
-    int sentGlobalOffsets;
     evgroup *gp;
 
     // for maintaining open file list
@@ -174,44 +177,178 @@ FlexpathWriteData flexpathWriteData;
 
 /**************************** Function Definitions *********************************/
 
+char*
+resolve_path_name(char *path, char *name)
+{
+    char *fullname = NULL;
+    if(name){
+        if(path){
+            if(strcmp(path, "")){
+                fullname = malloc(strlen(path) + strlen(name) + 2);
+                strcpy(fullname, path);
+                strcat(fullname, "/");
+                strcat(fullname, name);
+                return fullname;
+            }
+        }
+        fullname = malloc(strlen(name));
+        strcpy(fullname, name);
+        return fullname;
+    }
+    return NULL;
+}
+
+static double dgettimeofday( void )
+{
+#ifdef HAVE_GETTIMEOFDAY
+    double timestamp;
+    struct timeval now;
+    gettimeofday(&now, NULL);
+    timestamp = now.tv_sec + now.tv_usec* 1.0e-6 ;
+    return timestamp;
+#else
+    return -1;
+#endif
+}
+
+char extern_string[] = "double dgettimeofday(); \n";
+cod_extern_entry externs[] = {
+    {"dgettimeofday", (void *) dgettimeofday},	        // 0
+    {(void *) 0, (void *) 0}
+};
+
+static uint64_t
+get_timestamp_mili()
+{
+    struct timespec stamp;
+#ifdef __MACH__
+    clock_serv_t cclock;
+    mach_timespec_t mts;
+    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
+    clock_get_time(cclock, &mts);
+    mach_port_deallocate(mach_task_self(), cclock);
+    stamp.tv_sec = mts.tv_sec;
+    stamp.tv_nsec = mts.tv_nsec;
+#else
+    clock_gettime(CLOCK_MONOTONIC, &stamp);
+#endif
+    return ((stamp.tv_sec * 1000000000) + stamp.tv_nsec)/1000000;
+}
+
 // add an attr for each dimension to an attr_list
-void set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) {
-    fp_write_log("ATTR", "adding dim attr %s and ndim attr %d\n", varName, numDims);
+void set_attr_dimensions(char* varName, char* altName, int numDims, attr_list attrs) 
+{
     char atomName[200] = "";
     char dimNum[10];
-    strcat(atomName, varName);
-    strcat(atomName, "_");
     strcat(atomName, FP_DIM_ATTR_NAME);
     strcat(atomName, "_");
+    strcat(atomName, varName);
+    strcat(atomName, "_");
     sprintf(dimNum, "%d", numDims);
     strcat(atomName, dimNum);
     atom_t dimAtom = attr_atom_from_string(atomName);
     add_string_attr(attrs, dimAtom, altName);
     atomName[0] = '\0';
-    strcat(atomName, altName);
-    strcat(atomName, "_");
     strcat(atomName, FP_NDIMS_ATTR_NAME);
+    strcat(atomName, "_");
+    strcat(atomName, altName);
+
     atom_t ndimsAtom = attr_atom_from_string(atomName);
     add_int_attr(attrs, ndimsAtom, 0);
 }
 
+
+attr_list 
+set_flush_id_atom(attr_list attrs, int value) 
+{
+    atom_t dst_atom = attr_atom_from_string("fp_flush_id");
+    int dst;
+    if(!get_int_attr(attrs, dst_atom, &dst)) {
+        add_int_attr(attrs, dst_atom, value);
+    }
+    set_int_attr(attrs, dst_atom, value);
+    return attrs;
+}
+
+// sets a size atom
+attr_list 
+set_size_atom(attr_list attrs, int value) 
+{
+    atom_t dst_atom = attr_atom_from_string("fp_size");
+    int size;
+    if(!get_int_attr(attrs, dst_atom, &size)) {
+        add_int_attr(attrs, dst_atom, value);
+    }
+    set_int_attr(attrs, dst_atom, value);
+    return attrs;
+}
+
+// sets a dst rank atom
+attr_list 
+set_dst_rank_atom(attr_list attrs, int value) 
+{
+    atom_t dst_atom = attr_atom_from_string("fp_dst_rank");
+    int dst;
+    if(!get_int_attr(attrs, dst_atom, &dst)) {
+        add_int_attr(attrs, dst_atom, value);
+    }
+    set_int_attr(attrs, dst_atom, value);
+    return attrs;
+}
+
+// sets a dst condition atom
+attr_list 
+set_dst_condition_atom(attr_list attrs, int condition)
+{
+    atom_t dst_atom = attr_atom_from_string("fp_dst_condition");
+    int dst;
+    if(!get_int_attr(attrs, dst_atom, &dst)){
+	add_int_attr(attrs, dst_atom, condition);
+    }
+    set_int_attr(attrs, dst_atom, condition);
+    return attrs;
+}
+
 // free format packets once EVPath is finished with them
-void format_free(void* eventData, void* clientData) {
-    fp_write_log("FORMAT", "freeing a format message\n");
-    Format_msg* format = (Format_msg*) eventData;
-    free(format);
+
+void
+evgroup_msg_free(void *eventData, void *clientData)
+{
+    evgroup *msg = (evgroup*)eventData;
+    int num_vars = msg->num_vars;
+    int i;
+    for(i=0; i<num_vars; i++){
+	free(msg->vars[i].offsets);
+    }
+    free(msg);
+}
+
+void
+drop_evgroup_msg_free(void *eventData, void *clientData)
+{
+    free(eventData);
 }
 
+void
+update_step_msg_free(void *eventData, void *clientData)
+{
+        update_step_msg *msg = (update_step_msg*)eventData;
+        free(msg);
+} 
+
 // free data packets once EVPath is finished with them
-void data_free(void* eventData, void* clientData) {
-    fp_write_log("DATA", "freeing a data message\n");
+void 
+data_free(void* eventData, void* clientData) 
+{
     FlexpathWriteFileData* fileData = (FlexpathWriteFileData*)clientData;
     FMfree_var_rec_elements(fileData->fm->ioFormat, eventData);
     free(eventData);
 }
 
 // free op packets once EVPath is finished with them
-void op_free(void* eventData, void* clientData) {
+void 
+op_free(void* eventData, void* clientData) 
+{
     fp_write_log("OP", "freeing an op message\n");
     op_msg* op = (op_msg*) eventData;
     if(op->file_name) {
@@ -220,24 +357,10 @@ void op_free(void* eventData, void* clientData) {
     free(op);
 }
 
-// message queue add to head
-void threaded_enqueue(FlexpathQueueNode** queue, void* item, FlexpathMessageType type, thr_mutex_t mutex, thr_condition_t condition) {
-    fp_write_log("QUEUE", "enqueing a message\n");
-    thr_mutex_lock(mutex);
-    fp_write_log("MUTEX","lock 2\n");
-    FlexpathQueueNode* newNode = (FlexpathQueueNode*) malloc(sizeof(FlexpathQueueNode));
-    newNode->data = item;
-    newNode->type = type;
-    newNode->next = *queue;
-    *queue = newNode;
-    thr_condition_broadcast(condition);
-    fp_write_log("MUTEX","unlock 2\n");
-    thr_mutex_unlock(mutex);
-}
-
 // message queue count
-int queue_count(FlexpathQueueNode** queue, thr_mutex_t mutex) {
-    fp_write_log("QUEUE", "counting a queue\n");
+int 
+queue_count(FlexpathQueueNode** queue) 
+{
     if(*queue==NULL) {
         return 0;
     }
@@ -247,21 +370,48 @@ int queue_count(FlexpathQueueNode** queue, thr_mutex_t mutex) {
         count++;
         current = current->next;
     }
-    fp_write_log("QUEUE", "returning count\n");
     return count;
 }
 
+// message queue add to head
+void 
+threaded_enqueue(
+    FlexpathQueueNode **queue, 
+    void* item, 
+    FlexpathMessageType type, 
+    pthread_mutex_t *mutex, 
+    pthread_cond_t *condition,
+    int max_size) 
+{
+    pthread_mutex_lock(mutex);
+    if(max_size > 0){
+	while(queue_count(queue) > max_size){
+	    pthread_cond_wait(condition, mutex);
+	}
+    }
+    FlexpathQueueNode* newNode = malloc(sizeof(FlexpathQueueNode));
+    newNode->data = item;
+    newNode->type = type;
+    newNode->next = *queue;
+    *queue = newNode;
+    pthread_cond_broadcast(condition);
+    pthread_mutex_unlock(mutex);
+}
+
 // remove from tail of a message queue
-FlexpathQueueNode* threaded_dequeue(FlexpathQueueNode** queue, thr_mutex_t mutex, thr_condition_t condition, thr_condition_t condition2, int signal_dequeue) {
-    fp_write_log("QUEUE", "dequeue\n");
-    thr_mutex_lock(mutex);
-    fp_write_log("MUTEX","lock 4\n");
-    while(*queue==NULL) {
-        fp_write_log("QUEUE", "queue is null\n");
-        thr_condition_wait(condition, mutex);
+FlexpathQueueNode* 
+threaded_dequeue(
+    FlexpathQueueNode **queue, 
+    pthread_mutex_t *mutex, 
+    pthread_cond_t *condition, 
+    int signal_dequeue) 
+{
+    pthread_mutex_lock(mutex);
+    while(queue_count(queue) == 0) {
+        pthread_cond_wait(condition, mutex);
     }
-    FlexpathQueueNode* tail;
-    FlexpathQueueNode* prev = NULL;
+    FlexpathQueueNode *tail;
+    FlexpathQueueNode *prev = NULL;
     tail = *queue;
     while(tail && tail->next) {
         prev=tail;
@@ -272,41 +422,37 @@ FlexpathQueueNode* threaded_dequeue(FlexpathQueueNode** queue, thr_mutex_t mutex
     } else {
         *queue = NULL;
     }
-    fp_write_log("MUTEX","unlock 4\n");
-    thr_mutex_unlock(mutex);
-    fp_write_log("QUEUE", "exiting dequeue queue:%p ret:%p\n", *queue, tail);
+    pthread_mutex_unlock(mutex);
     if(signal_dequeue==1) {
-        thr_condition_broadcast(condition2);
+        pthread_cond_broadcast(condition);
     }
     return tail;
 }
 
 // peek at tail of message queue
-FlexpathQueueNode* threaded_peek(FlexpathQueueNode** queue, thr_mutex_t mutex, thr_condition_t condition) {
-    int q = queue_count(queue, mutex);
-    fp_write_log("QUEUE", "peeking at a queue\n");
-    fp_write_log("QUEUE", "queue count %d\n", q);
-    thr_mutex_lock(mutex);
-    fp_write_log("QUEUE", "recieved lock\n");
-    fp_write_log("MUTEX","lock 5\n");
-    if(*queue==NULL) {
-        fp_write_log("QUEUE", "null about to wait\n");
-        thr_condition_wait(condition, mutex);
-        fp_write_log("QUEUE", "signaled with queue %p\n", *queue);
+FlexpathQueueNode* 
+threaded_peek(FlexpathQueueNode** queue, 
+	      pthread_mutex_t *mutex, 
+	      pthread_cond_t *condition) 
+{
+    pthread_mutex_lock(mutex);
+    int q = queue_count(queue);
+    if(q == 0) {	
+	pthread_cond_wait(condition, mutex);
     }
     FlexpathQueueNode* tail;
     tail = *queue;
     while(tail && tail->next) {
         tail=tail->next;
     }
-    fp_write_log("MUTEX","unlock 5\n");
-    thr_mutex_unlock(mutex);
-    fp_write_log("QUEUE", "returning %p\n", tail);
+    pthread_mutex_unlock(mutex);
     return tail;
 }
 
 // add new var to a var list
-FlexpathVarNode* add_var(FlexpathVarNode* queue, char* varName, FlexpathVarNode* dims, int rank){
+FlexpathVarNode* 
+add_var(FlexpathVarNode* queue, char* varName, FlexpathVarNode* dims, int rank)
+{
     if(queue) {
         queue->next=add_var(queue->next, varName, dims, rank);
         return queue;
@@ -321,7 +467,8 @@ FlexpathVarNode* add_var(FlexpathVarNode* queue, char* varName, FlexpathVarNode*
 }
 
 // free a var list
-void free_vars(FlexpathVarNode* queue){
+void free_vars(FlexpathVarNode* queue)
+{
     if(queue) {
         free_vars(queue->next);
         free(queue->varName);
@@ -330,7 +477,9 @@ void free_vars(FlexpathVarNode* queue){
 }
 
 // search a var list
-FlexpathVarNode* queue_contains(FlexpathVarNode* queue, const char* name, int rank) {
+FlexpathVarNode* 
+queue_contains(FlexpathVarNode* queue, const char* name, int rank) 
+{
     int compare_rank = 0;
     if(rank >= 0 ) {
         compare_rank = 1;
@@ -351,47 +500,53 @@ FlexpathVarNode* queue_contains(FlexpathVarNode* queue, const char* name, int ra
     return NULL;
 }
 
-// sanitize a name
-char* get_fixed_name(char* name) {
-    char* oldName = strdup(name);
-    char* newName = (char*) malloc(sizeof(char) * 255);
-    int i;
-    for (i=0; i< OPLEN; i++){
-        char op[] = {opList[i], '\0'};
-        char* opRep=opRepList[i];
-        char* token = strtok(oldName, op);
-        char* lastTok=NULL;
-	strcpy(newName, "");
-	while(token != NULL){
-	    strcat(newName, token);
-            if((token = strtok(NULL, op))) {
-	        strcat(newName, opRep);
-	        lastTok = token;
-	    }
-        }
-        if(lastTok!=NULL && (strlen(newName)-strlen(lastTok)-1>0)) {
-            newName[strlen(newName)-strlen(lastTok)-1]='\0';
-	}
-        free(oldName);
-	oldName = strdup(newName);
-    }
-    free(oldName);
-    return newName;
-}
-
-// return name with operators removed by using the lookup list
-static char* find_fixed_name(FlexpathFMStructure *fm, char *name) {
-    FlexpathNameTable *node;
-    for (node = fm->nameList.lh_first; node != NULL; node = node->entries.le_next) {
-        if (!strcmp(node->originalName, name)) {
-	    return node->mangledName;
-        }
-    }
-    return name;
-}
+/* // sanitize a name */
+/* char*  */
+/* get_fixed_name(char* name)  */
+/* { */
+/*     char* oldName = strdup(name); */
+/*     char* newName = (char*) malloc(sizeof(char) * 255); */
+/*     int i; */
+/*     for (i=0; i< OPLEN; i++){ */
+/*         char op[] = {opList[i], '\0'}; */
+/*         char* opRep=opRepList[i]; */
+/*         char* token = strtok(oldName, op); */
+/*         char* lastTok=NULL; */
+/* 	strcpy(newName, ""); */
+/* 	while(token != NULL){ */
+/* 	    strcat(newName, token); */
+/*             if((token = strtok(NULL, op))) { */
+/* 	        strcat(newName, opRep); */
+/* 	        lastTok = token; */
+/* 	    } */
+/*         } */
+/*         if(lastTok!=NULL && (strlen(newName)-strlen(lastTok)-1>0)) { */
+/*             newName[strlen(newName)-strlen(lastTok)-1]='\0'; */
+/* 	} */
+/*         free(oldName); */
+/* 	oldName = strdup(newName); */
+/*     } */
+/*     free(oldName); */
+/*     return newName; */
+/* } */
+
+/* // return name with operators removed by using the lookup list */
+/* static char*  */
+/* find_fixed_name(FlexpathFMStructure *fm, char *name)  */
+/* { */
+/*     FlexpathNameTable *node; */
+/*     for (node = fm->nameList.lh_first; node != NULL; node = node->entries.le_next) { */
+/*         if (!strcmp(node->originalName, name)) { */
+/* 	    return node->mangledName; */
+/*         } */
+/*     } */
+/*     return name; */
+/* } */
 
 // returns a name with the dimension prepended
-static char *get_alt_name(char *name, char *dimName) {
+static char*
+get_alt_name(char *name, char *dimName) 
+{
     int len = strlen(name) + strlen(dimName) + 2;
     char *newName = (char *) malloc(sizeof(char) * len);
     strcpy(newName, dimName);
@@ -401,7 +556,9 @@ static char *get_alt_name(char *name, char *dimName) {
 }
 
 // lookup a dimensions real name
-static FlexpathAltName *find_alt_name(FlexpathFMStructure *currentFm, char *dimName, char *varName) {
+static FlexpathAltName*
+find_alt_name(FlexpathFMStructure *currentFm, char *dimName, char *varName) 
+{
     char *altName = get_alt_name(varName, dimName);
     FlexpathDimNames *d = NULL;
 
@@ -435,54 +592,47 @@ static FlexpathAltName *find_alt_name(FlexpathFMStructure *currentFm, char *dimN
 }
 
 // populates offsets array
-int get_local_offsets(struct adios_var_struct * list, struct adios_group_struct * g, int** offsets, int** dimensions)
+int 
+get_var_offsets(struct adios_var_struct *v, 
+		      struct adios_group_struct *g, 
+		      uint64_t **offsets, 
+		      uint64_t **local_dimensions,
+		      uint64_t **global_dimensions)
 {
-    struct adios_dimension_struct * dim_list = list->dimensions;	    
-    if(dim_list){		
-	// if this var has a global dimension, then by default, it has local_offset
-	uint16_t gdim_id = dim_list->global_dimension.id;
-	uint16_t ldim_id = dim_list->dimension.id;
-	if(gdim_id > 0) {	   
-	    int num_local_offsets = 0;
-	    int * local_offsets = NULL;		
-	    int * local_dimensions = NULL;
-	    int curr_offset = 0;
-	    while(dim_list) {		
-		uint16_t offset_id = dim_list->local_offset.id;
-		uint16_t ldim_id = dim_list->dimension.id;
-		if(offset_id > 0) {							       
-		    struct adios_var_struct * tmp_var = adios_find_var_by_id(g->vars, 
-									     offset_id);
-		    local_offsets = realloc(local_offsets, sizeof(int) * (num_local_offsets+1));
-		    memcpy(&local_offsets[curr_offset], tmp_var->data, sizeof(int));
-		    // no id, so it must be a literal in the xml doc
-		} else {
-		    local_offsets = realloc(local_offsets, sizeof(int) * (num_local_offsets+1));
-		    local_offsets[curr_offset] = (int)dim_list->local_offset.rank;
-		}
-		if(ldim_id > 0) {
-		    struct adios_var_struct * tmp_var = adios_find_var_by_id(g->vars, ldim_id);
-		    local_dimensions = realloc(local_dimensions, sizeof(int) * (num_local_offsets+1));
-		    memcpy(&local_dimensions[curr_offset], tmp_var->data, sizeof(int));
-		} else {
-		    local_dimensions = realloc(local_dimensions, sizeof(int) * (num_local_offsets+1));
-		    local_dimensions[curr_offset] = (int)dim_list->dimension.rank;
-		}
-		dim_list=dim_list->next;
-		curr_offset++;
-		num_local_offsets++;
-	    }
-	    offsets[0] = local_offsets;	   
-	    dimensions[0] = local_dimensions;
-	    return num_local_offsets;
-	}	
+    struct adios_dimension_struct * dim_list = v->dimensions;	    
+
+    int ndims = 0;
+    while (dim_list) {
+        ndims++;
+        dim_list = dim_list->next;
     }
-    offsets = NULL;
-    return 0;
+    dim_list = v->dimensions;	    
+
+    if(ndims){		
+        uint64_t *local_offsets = (uint64_t*)malloc(sizeof(uint64_t) * ndims);
+        uint64_t *local_sizes = (uint64_t*)malloc(sizeof(uint64_t) * ndims);
+	uint64_t *global_sizes = (uint64_t*)malloc(sizeof(uint64_t) * ndims);
+        int n = 0; 
+        while(dim_list) {		
+            local_sizes[n] = (uint64_t)adios_get_dim_value(&dim_list->dimension);
+            local_offsets[n] = (uint64_t)adios_get_dim_value(&dim_list->local_offset);
+	    global_sizes[n] = (uint64_t)adios_get_dim_value(&dim_list->global_dimension);
+            dim_list=dim_list->next;
+            n++;
+        }
+        *offsets = local_offsets;	   
+        *local_dimensions = local_sizes;
+	*global_dimensions = global_sizes;
+    } else {
+        *offsets = NULL;
+        *local_dimensions = NULL;
+	*global_dimensions = NULL;
+    }
+    return ndims;
 }
 
 // creates multiqueue function to handle ctrl messages for given bridge stones 
-char* multiqueue_action = "{\n\
+char *multiqueue_action = "{\n\
     int found = 0;\n\
     int flush_data_count = 0; \n\
     int my_rank = -1;\n\
@@ -490,7 +640,17 @@ char* multiqueue_action = "{\n\
     if(EVcount_varMsg()>0) {\n\
         EVdiscard_and_submit_varMsg(0, 0);\n\
     }\n\
+    if(EVcount_update_step_msg() > 1) {\n\
+        EVdiscard_update_step_msg(0);\n\
+    }\n\
+    if(EVcount_drop_evgroup_msg()>0) {\n\
+       if(EVcount_evgroup()>0) {\n\
+          EVdiscard_evgroup(0);\n\
+       }\n\
+       EVdiscard_and_submit_drop_evgroup_msg(0,0);\n\
+    }\n\
     if(EVcount_op_msg()>0) {\n\
+        op_msg *msg = EVdata_op_msg(0);\n\
         mine = EVget_attrs_op_msg(0);\n\
         found = attr_ivalue(mine, \"fp_dst_rank\");\n\
         if(found > 0) {\n\
@@ -499,91 +659,107 @@ char* multiqueue_action = "{\n\
             EVdiscard_and_submit_op_msg(0,0);\n\
         }\n\
     }\n\
-    if(EVcount_formatMsg()>0) {\n\
-        formatMsg* msg = EVdata_formatMsg(0);\n\
-        mine=EVget_attrs_formatMsg(0);\n\
-        my_rank= attr_ivalue(mine, \"fp_rank_num\");\n\
-    }\n\
     if(EVcount_flush()>0) {\n\
-        flush* c = EVdata_flush(0);\n\
-        if(c->type == 0) {\n\
-            if(EVcount_formatMsg()>0) {\n\
-                formatMsg* msg = EVdata_formatMsg(0);\n\
-                msg->condition = c->condition;\n\
-                EVdiscard_flush(0);\n\
-                EVsubmit(c->rank+1, msg);\n\
-            }\n\
-       }else if(c->type == 2){ \n\
+        flush *c = EVdata_flush(0);\n\
+         if(c->type == 2) { \n\
              if(EVcount_evgroup()>0){\n\
                evgroup *g = EVdata_evgroup(0); \n\
                g->condition = c->condition;\n\
-               EVsubmit(c->rank+1, g);\n\
+               EVsubmit(c->process_id+1, g);\n\
                EVdiscard_flush(0);\n\
              }\n\
-        } else {\n\
+         }\n\
+         else if(c->type == 3) {\n\
+            if(EVcount_update_step_msg()>0) {\n\
+               update_step_msg *stepmsg = EVdata_update_step_msg(0);\n\
+               stepmsg->condition = c->condition;\n\
+               EVsubmit(c->process_id+1, stepmsg);\n\
+               EVdiscard_flush(0);\n\
+            }\n\
+          }\n\
+         else {\n\
             EVdiscard_and_submit_flush(0,0);\n\
             flush_data_count++;\n\
-        }\n\
+         }\n\
     }\n\
     if(EVcount_anonymous()>0){\n\
         mine = EVget_attrs_anonymous(0);\n\
         found = attr_ivalue(mine, \"fp_dst_rank\");\n\
+        double start = dgettimeofday(); \n\
+        set_double_attr(mine, \"fp_starttime\", start);\n\
         EVdiscard_and_submit_anonymous(found+1,0);\n\
     }\n\
  }";
 
 // sets a field based on data type
-void set_field(int type, FMFieldList* field_list_ptr, int fieldNo, int* size){
+void 
+set_field(int type, FMFieldList* field_list_ptr, int fieldNo, int* size)
+{
     FMFieldList field_list = *field_list_ptr;
     switch (type) {
-	case adios_unknown:
-	  perr("set_field: Bad Type Error\n");
-	  break;
-
-	case adios_integer:
-	  field_list[fieldNo].field_type = strdup("integer");
-	  field_list[fieldNo].field_size = sizeof(int);
-	  field_list[fieldNo].field_offset = *size;
-	  *size += sizeof(int);
-	  break;
-
-	case adios_real:
-	  field_list[fieldNo].field_type = strdup("float");
-	  field_list[fieldNo].field_size = sizeof(float);
-	  field_list[fieldNo].field_offset = *size;
-	  *size += sizeof(float);
-	  break;
-
-	case adios_string:
-	  field_list[fieldNo].field_type = strdup("string");
-	  field_list[fieldNo].field_size = sizeof(char *);
-	  field_list[fieldNo].field_offset = *size;
-	  *size += sizeof(unsigned char *);
-	  break;
-
-	case adios_double:
-	  field_list[fieldNo].field_type = strdup("float");
-	  field_list[fieldNo].field_size = sizeof(double);
-	  field_list[fieldNo].field_offset = *size;
-	  *size += sizeof(double);
-	  break;
-
-	case adios_byte:
-	  field_list[fieldNo].field_type = strdup("char");
-	  field_list[fieldNo].field_size = sizeof(char);
-	  field_list[fieldNo].field_offset = *size;
-	  *size += sizeof(char);
-	  break;
-
-	default:
-	  perr("set_field: Unknown Type Error\n");
-	  break;
+    case adios_unknown:
+	perr("set_field: Bad Type Error\n");
+	break;
+
+    case adios_unsigned_integer:
+	field_list[fieldNo].field_type = strdup("unsigned integer");
+	field_list[fieldNo].field_size = sizeof(unsigned int);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(unsigned int);
+	break;
+
+    case adios_unsigned_long:
+	field_list[fieldNo].field_type = strdup("unsigned long");
+	field_list[fieldNo].field_size = sizeof(unsigned long);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(unsigned long);
+
+    case adios_integer:
+	field_list[fieldNo].field_type = strdup("integer");
+	field_list[fieldNo].field_size = sizeof(int);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(int);
+	break;
+
+    case adios_real:
+	field_list[fieldNo].field_type = strdup("float");
+	field_list[fieldNo].field_size = sizeof(float);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(float);
+	break;
+
+    case adios_string:
+	field_list[fieldNo].field_type = strdup("string");
+	field_list[fieldNo].field_size = sizeof(char *);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(unsigned char *);
+	break;
+
+    case adios_double:
+	field_list[fieldNo].field_type = strdup("float");
+	field_list[fieldNo].field_size = sizeof(double);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(double);
+	break;
+
+    case adios_byte:
+	field_list[fieldNo].field_type = strdup("char");
+	field_list[fieldNo].field_size = sizeof(char);
+	field_list[fieldNo].field_offset = *size;
+	*size += sizeof(char);
+	break;
+
+    default:
+	perr("set_field: Unknown Type Error\n");
+	break;
     }
     *field_list_ptr = field_list;
 }
 
 // find a field in a given field list
-static FMField *internal_find_field(char *name, FMFieldList flist) {
+static FMField*
+internal_find_field(char *name, FMFieldList flist) 
+{
     FMField *f = flist;
     while (f->field_name != NULL && strcmp(f->field_name, name)) {
 	f++;
@@ -592,19 +768,41 @@ static FMField *internal_find_field(char *name, FMFieldList flist) {
 }
 
 // generic memory check for after mallocs
-void mem_check(void* ptr, const char* str) {
+void 
+mem_check(void* ptr, const char* str) 
+{
     if(!ptr) {
         adios_error(err_no_memory, "Cannot allocate memory for flexpath %s.", str);
     }
 }
 
+
+static char * get_dim_name (struct adios_dimension_item_struct *d)
+{
+    char *vname = NULL;
+    if (d->var) {	
+        vname = resolve_path_name(d->var->path, d->var->name);
+    } else if (d->attr) {
+        if (d->attr->var) 
+            vname = d->attr->var->name;
+        else
+            vname = d->attr->name;
+    }
+    // else it's a number value, so there is no name
+    return vname;
+}
+
 // construct an fm structure based off the group xml file
-FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_struct* fields, FlexpathWriteFileData* fileData){
-    FMStructDescRec *format = (FMStructDescRec*) malloc(sizeof(FMStructDescRec)*2);
+FlexpathFMStructure* 
+set_format(struct adios_group_struct *t, 
+	   struct adios_var_struct *fields, 
+	   FlexpathWriteFileData *fileData)
+{
+    FMStructDescRec *format = malloc(sizeof(FMStructDescRec)*2);
     mem_check(format, "format");
     memset(format, 0, sizeof(FMStructDescRec)*2);
     
-    FlexpathFMStructure *currentFm = (FlexpathFMStructure *) malloc(sizeof(FlexpathFMStructure));
+    FlexpathFMStructure *currentFm = malloc(sizeof(FlexpathFMStructure));
     mem_check(currentFm, "currentFm");
     memset(currentFm, 0, sizeof(FlexpathFMStructure));
 
@@ -613,14 +811,16 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
     currentFm->format = format;
     format->format_name = strdup(t->name);
 
-    if (t->var_count == 0) {
-	perr("set_format: No Variables In Group\n");
+    if (t->hashtbl_vars->size(t->hashtbl_vars) == 0) {
+	adios_error(err_invalid_group, "set_format: No Variables In Group\n");
 	return NULL;
     }
 
-    FMFieldList field_list = (FMFieldList) malloc(sizeof(FMField) * (t->var_count + 1));
+    FMFieldList field_list = malloc(sizeof(FMField) * ((int)t->hashtbl_vars->size(t->hashtbl_vars) + 1));
     if (field_list == NULL) {
-	perr("set_format: Field List Memory Allocation Failed");
+	adios_error(err_invalid_group, 
+		    "set_format: Field List Memory Allocation Failed. t->hashtbl_vars->size: %d\n", 
+		    t->hashtbl_vars->size(t->hashtbl_vars));
 	return NULL;
     }
 
@@ -630,53 +830,45 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
     // for each type look through all the fields
     struct adios_var_struct *f;
     for (f = t->vars; f != NULL; f = f->next, fieldNo++) {
-	char *tempName = get_fixed_name(f->name);
-	if (strcmp(tempName, f->name)) {
-	    FlexpathNameTable *nameNode = (FlexpathNameTable *) malloc(sizeof(FlexpathNameTable));
-	    nameNode->originalName = strdup(f->name);
-	    nameNode->mangledName = strdup(tempName);
-	    LIST_INSERT_HEAD(&currentFm->nameList, nameNode, entries);
-	}
+	char *fullname = resolve_path_name(f->path, f->name);
 
 	// use the mangled name for the field.
-	field_list[fieldNo].field_name = tempName;
-        if(tempName!=NULL) {
+	field_list[fieldNo].field_name = fullname;
+        if(fullname!=NULL) {
             int num_dims = 0;
             char atom_name[200] = "";
-            FlexpathVarNode* dims=NULL;
+            FlexpathVarNode *dims=NULL;
             if(f->dimensions) {
-                struct adios_dimension_struct* adim = f->dimensions;  
+                struct adios_dimension_struct *adim = f->dimensions;  
 	
                 // attach appropriate attrs for dimensions	
                 for(; adim != NULL; adim = adim->next) {
                     num_dims++;		    
-		    uint16_t dim_id = adim->dimension.id;
-		    uint16_t gdim_id = adim->global_dimension.id;
-		    uint16_t local_id = adim->local_offset.id;
-		    if(dim_id > 0) {		    
-			struct adios_var_struct *tmp_var = adios_find_var_by_id(t->vars, dim_id);
-			char *name = find_fixed_name(currentFm, tmp_var->name);
-			char *aname = get_alt_name(tempName,  name);
+                    
+                    char *vname = get_dim_name(&adim->dimension);
+                    if (vname) {
+			//char *name = find_fixed_name(currentFm, vname);
+			char *aname = get_alt_name(fullname, vname);
 			dims=add_var(dims, strdup(aname), NULL, 0);
-			set_attr_dimensions(tempName, aname, num_dims, fileData->attrs);
+			set_attr_dimensions(fullname, aname, num_dims, fileData->attrs);
 		    }
-		    if(gdim_id> 0) {
+                    char *gname = get_dim_name(&adim->global_dimension);
+		    if(gname) {
 			fileData->globalCount++;
-			struct adios_var_struct *tmp_var = adios_find_var_by_id(t->vars, gdim_id);
-			char *name = find_fixed_name(currentFm, tmp_var->name);
-			char *aname = get_alt_name(tempName, name);
+			//char *name = find_fixed_name(currentFm, gname);
+			char *aname = get_alt_name(fullname, gname);
 			dims=add_var(dims, strdup(aname), NULL, 0);
-			set_attr_dimensions(tempName, aname, num_dims, fileData->attrs);			
+			set_attr_dimensions(fullname, aname, num_dims, fileData->attrs);
 		    }
                 }
             }
             // attach ndims attr
-            strcat(atom_name, tempName);
-            strcat(atom_name, "_");
             strcat(atom_name, FP_NDIMS_ATTR_NAME);
+            strcat(atom_name, "_");
+            strcat(atom_name, fullname);
             atom_t ndims_atom = attr_atom_from_string(strdup(atom_name));
             add_int_attr(fileData->attrs, ndims_atom, num_dims);
-            fileData->formatVars = add_var(fileData->formatVars, tempName, dims, 0);
+            fileData->formatVars = add_var(fileData->formatVars, fullname, dims, 0);
         }
 	// if its a single field
 	if (!f->dimensions) {
@@ -693,10 +885,11 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
 		  
 	    //create the textual representation of the dimensions
 	    for (; d != NULL; d = d->next) {
-		if (d->dimension.id) {
-		    struct adios_var_struct *tmp_var = adios_find_var_by_id(t->vars, d->dimension.id);
-		    char *name = find_fixed_name(currentFm, tmp_var->name);
-		    FlexpathAltName *a = find_alt_name(currentFm, name, (char*)field_list[fieldNo].field_name);
+                char *vname = get_dim_name(&d->dimension);
+                if (vname) {
+		    
+		    //char *name = find_fixed_name(currentFm, vname);
+		    FlexpathAltName *a = find_alt_name(currentFm, vname, (char*)field_list[fieldNo].field_name);
 		    altvarcount++;
 		    snprintf(el, ELSIZE, "[%s]", a->name);
 		    v_offset = 0;
@@ -714,7 +907,7 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
 		  
 	    switch (f->type) {
 	    case adios_unknown:
-		perr( "set_format: Bad Type Error\n");
+		fprintf(stderr, "set_format: Bad Type Error\n");
 		fieldNo--;
 		break;
 		      
@@ -732,6 +925,34 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
 		{  currentFm->size += (v_offset * sizeof(int));  } 
 		break;
 		      
+	    case adios_unsigned_integer:
+		field_list[fieldNo].field_type =
+		    (char *) malloc(sizeof(char) * 255);
+		snprintf((char *) field_list[fieldNo].field_type, 255,
+			 "unsigned integer%s", dims);
+		field_list[fieldNo].field_size = sizeof(unsigned int);
+		      
+		field_list[fieldNo].field_offset = currentFm->size;
+		if (v_offset == 0 ) // pointer to variably sized array
+		{ currentFm->size += sizeof(void *);  } 
+		else // statically sized array allocated inline
+		{  currentFm->size += (v_offset * sizeof(unsigned int));  } 
+		break;
+
+	    case adios_unsigned_long:
+		field_list[fieldNo].field_type =
+		    (char *) malloc(sizeof(char) * 255);
+		snprintf((char *) field_list[fieldNo].field_type, 255,
+			 "unsigned long%s", dims);
+		field_list[fieldNo].field_size = sizeof(unsigned long);
+		      
+		field_list[fieldNo].field_offset = currentFm->size;
+		if (v_offset == 0 ) // pointer to variably sized array
+		{ currentFm->size += sizeof(void *);  } 
+		else // statically sized array allocated inline
+		{  currentFm->size += (v_offset * sizeof(unsigned long));  } 
+		break;
+
 	    case adios_real:
 		field_list[fieldNo].field_type =
 		    (char *) malloc(sizeof(char) * 255);
@@ -779,17 +1000,24 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
 		break;
 
 	    default:
-		perr("set_format: Unknown Type Error %d\n", f->type);
-		fieldNo--;
-		break;
+		adios_error(err_invalid_group, 
+			    "set_format: Unknown Type Error %d: name: %s\n", 
+			    f->type, field_list[fieldNo].field_name);
+		fieldNo--;	      
+		return NULL;
+		//break;
 	    }
 	}
 
-	fp_write_log("FORMAT","field: %s, %s, %d, %d\n", field_list[fieldNo].field_name, field_list[fieldNo].field_type,field_list[fieldNo].field_size,field_list[fieldNo].field_offset); 
+	fp_write_log("FORMAT","field: %s, %s, %d, %d\n", 
+		     field_list[fieldNo].field_name, 
+		     field_list[fieldNo].field_type,
+		     field_list[fieldNo].field_size,
+		     field_list[fieldNo].field_offset); 
     }
 
     FlexpathDimNames *d = NULL;
-    field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (altvarcount + t->var_count + 1));
+    field_list = (FMFieldList) realloc(field_list, sizeof(FMField) * (altvarcount + (int)t->hashtbl_vars->size(t->hashtbl_vars) + 1));
 
     for (d = currentFm->dimList.lh_first; d != NULL; d = d->entries.le_next) {
 	FlexpathAltName *a = NULL;
@@ -801,7 +1029,7 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
 	}
     }
 
-    for (; fieldNo < (t->var_count + 1+altvarcount); fieldNo++) {
+    for (; fieldNo < (t->hashtbl_vars->size(t->hashtbl_vars) + 1+altvarcount); fieldNo++) {
 	field_list[fieldNo].field_type = NULL;
 	field_list[fieldNo].field_name = NULL;
 	field_list[fieldNo].field_offset = 0;
@@ -811,14 +1039,15 @@ FlexpathFMStructure* set_format(struct adios_group_struct* t,struct adios_var_st
     format->field_list = field_list;
     currentFm->format->struct_size = currentFm->size;
 
-    currentFm->buffer = (unsigned char *) malloc(currentFm->size);
+    currentFm->buffer = malloc(currentFm->size);
     memset(currentFm->buffer, 0, currentFm->size);
 
     return currentFm;
 }
 
 // copies buffer zeroing out arrays that havent been asked for
-void* copy_buffer(void* buffer, int rank, FlexpathWriteFileData* fileData){
+void* copy_buffer(void* buffer, int rank, FlexpathWriteFileData* fileData)
+{
     char* temp = (char*)malloc(fileData->fm->size);
     memcpy(temp, buffer, fileData->fm->size);
     FMField *f = fileData->fm->format->field_list;
@@ -851,243 +1080,212 @@ void* copy_buffer(void* buffer, int rank, FlexpathWriteFileData* fileData){
     return temp;
 }
 
-// terminal action for var messages: enqueues
-static int var_handler(CManager cm, void *vevent, void *client_data, attr_list attrs){
+void 
+process_data_flush(FlexpathWriteFileData *fileData, 
+		   Flush_msg *flushMsg, 
+		   FlexpathQueueNode *dataNode)
+{
+    void* temp = copy_buffer(dataNode->data, flushMsg->process_id, fileData);
+   
+    fileData->attrs = set_dst_rank_atom(fileData->attrs, flushMsg->process_id);
+    fileData->attrs = set_dst_condition_atom(fileData->attrs, flushMsg->condition);
+    fileData->attrs = set_flush_id_atom(fileData->attrs, flushMsg->id);
+    
+    if(!fileData->bridges[flushMsg->process_id].opened) {
+	fileData->bridges[flushMsg->process_id].opened=1;
+	fileData->openCount++;
+    }
+    //EVsubmit_general(fileData->dataSource, temp, data_free, fileData->attrs);
+    EVsubmit_general(fileData->dataSource, temp, NULL, fileData->attrs);
+}
+
+void
+process_var_msg(FlexpathWriteFileData *fileData, Var_msg *varMsg)
+{
+    fileData->askedVars = add_var(fileData->askedVars, 
+				  strdup(varMsg->var_name), 
+				  NULL, 
+				  varMsg->process_id);
+}
+
+void
+process_open_msg(FlexpathWriteFileData *fileData, op_msg *open)
+{
+    fileData->bridges[open->process_id].step = open->step;
+    fileData->bridges[open->process_id].condition = open->condition;
+    if(!fileData->bridges[open->process_id].created){
+	fileData->bridges[open->process_id].created = 1;
+	fileData->bridges[open->process_id].myNum = 
+	    EVcreate_bridge_action(
+		flexpathWriteData.cm, 
+		attr_list_from_string(fileData->bridges[open->process_id].contact), 
+		fileData->bridges[open->process_id].theirNum);		    
+	
+	EVaction_set_output(flexpathWriteData.cm, 
+			    fileData->multiStone, 
+			    fileData->multi_action, 
+			    open->process_id+1, 
+			    fileData->bridges[open->process_id].myNum);
+    }	
+	
+    if (open->step == fileData->readerStep){
+	pthread_mutex_lock(&fileData->openMutex);
+	fileData->openCount++;  
+	fileData->bridges[open->process_id].opened = 1;
+	pthread_mutex_unlock(&fileData->openMutex);
+
+	op_msg *ack = malloc(sizeof(op_msg));
+	ack->file_name = strdup(fileData->name);
+	ack->process_id = fileData->rank;
+	ack->step = fileData->readerStep;
+	ack->type = 2;
+	ack->condition = open->condition;
+	fileData->attrs = set_dst_rank_atom(fileData->attrs, open->process_id+1);
+	EVsubmit_general(fileData->opSource, ack, op_free, fileData->attrs);
+    } 
+    else if(open->step < fileData->readerStep) {
+	log_error("Flexpath method control_thread: Received Past Step Open\n");
+    } 
+    else {
+	fp_write_log("STEP", "recieved op with future step\n");
+    }
+}
+
+void
+process_close_msg(FlexpathWriteFileData *fileData, op_msg *close)
+{
+
+    pthread_mutex_lock(&fileData->openMutex);
+    fileData->openCount--;
+    fileData->bridges[close->process_id].opened=0;
+    fileData->bridges[close->process_id].condition = close->condition;
+    pthread_mutex_unlock(&fileData->openMutex);
+
+    if(fileData->openCount==0) {
+	FlexpathQueueNode* node = threaded_dequeue(&fileData->dataQueue, 
+						   &fileData->dataMutex, 
+						   &fileData->dataCondition, 1);
+	FMfree_var_rec_elements(fileData->fm->ioFormat, node->data);
+
+	drop_evgroup_msg *dropMsg = malloc(sizeof(drop_evgroup_msg));
+	dropMsg->step = fileData->readerStep;
+	int wait = CMCondition_get(flexpathWriteData.cm, NULL);
+	dropMsg->condition = wait;
+	EVsubmit_general(fileData->dropSource, dropMsg, drop_evgroup_msg_free, fileData->attrs);
+	// Will have to change when not using ctrl thread.
+	CMCondition_wait(flexpathWriteData.cm,  wait); 		    
+		     
+	fileData->readerStep++;
+    }
+		
+    op_msg *ack = malloc(sizeof(op_msg));
+    ack->file_name = strdup(fileData->name);
+    ack->process_id = fileData->rank;
+    ack->step = fileData->readerStep;
+    ack->type = 2;
+    ack->condition = close->condition;
+    fileData->attrs = set_dst_rank_atom(fileData->attrs, close->process_id + 1);
+    EVsubmit_general(fileData->opSource, 
+		     ack, 
+		     op_free, 
+		     fileData->attrs);		
+		
+}
+
+
+static int 
+var_handler(CManager cm, void *vevent, void *client_data, attr_list attrs)
+{
     FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
     Var_msg* msg = (Var_msg*) vevent;
-    EVtake_event_buffer(cm, msg);
-    fp_write_log("MSG", "recieved var_msg : rank %d\n", msg->rank);
+    EVtake_event_buffer(cm, vevent);
     threaded_enqueue(&fileData->controlQueue, msg, VAR, 
-        fileData->controlMutex, fileData->controlCondition);
+		     &fileData->controlMutex, &fileData->controlCondition, -1);
     return 0;
 }
 
-// terminal action for flush messages: enqueues
-static int flush_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) {
+static int 
+flush_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) 
+{
     FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
     Flush_msg* msg = (Flush_msg*) vevent;
-    EVtake_event_buffer(cm, msg);
-    fp_write_log("MSG", "recieved flush : rank %d type data\n", msg->rank);
+    int err = EVtake_event_buffer(cm, vevent);
     threaded_enqueue(&fileData->controlQueue, msg, DATA_FLUSH, 
-        fileData->controlMutex, fileData->controlCondition);
+		     &fileData->controlMutex, &fileData->controlCondition,
+		     -1);
     return 0;
 }
 
-// terminal action for op messages: enqueues
-static int op_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) {
+static int
+drop_evgroup_handler(CManager cm, void *vevent, void *client_data, attr_list attrs){
+    drop_evgroup_msg *msg = vevent;
+    // will have to change when not using control thread.
+    CMCondition_signal(cm, msg->condition);    
+    return 0;
+}
+
+static int 
+op_handler(CManager cm, void* vevent, void* client_data, attr_list attrs) 
+{
     FlexpathWriteFileData* fileData = (FlexpathWriteFileData*) client_data;
     op_msg* msg = (op_msg*) vevent;
-    EVtake_event_buffer(cm, msg);
-    fp_write_log("MSG", "recieved op_msg : rank %d type %d: condition: %d step: %d\n", 
-		 msg->process_id, msg->type, msg->condition, msg->step);
+    EVtake_event_buffer(cm, vevent);
     if(msg->type == OPEN_MSG) {
         threaded_enqueue(&fileData->controlQueue, msg, OPEN, 
-            fileData->controlMutex, fileData->controlCondition);
+			 &fileData->controlMutex, &fileData->controlCondition, -1);
     } else if(msg->type == CLOSE_MSG) {
         threaded_enqueue(&fileData->controlQueue, msg, CLOSE, 
-			 fileData->controlMutex, fileData->controlCondition);
-    } else if(msg->type == 3) {
-	threaded_enqueue(&fileData->controlQueue, msg, INIT,
-			 fileData->controlMutex, fileData->controlCondition);
-			
+			 &fileData->controlMutex, &fileData->controlCondition, -1);  			
     }
     return 0;
 }
 
-// sets a size atom
-attr_list set_size_atom(attr_list attrs, int value) {
-    atom_t dst_atom = attr_atom_from_string("fp_size");
-    int size;
-    if(!get_int_attr(attrs, dst_atom, &size)) {
-        add_int_attr(attrs, dst_atom, value);
-    }
-    set_int_attr(attrs, dst_atom, value);
-    return attrs;
-}
-
-// sets a dst rank atom
-attr_list set_dst_rank_atom(attr_list attrs, int value) {
-    atom_t dst_atom = attr_atom_from_string("fp_dst_rank");
-    int dst;
-    if(!get_int_attr(attrs, dst_atom, &dst)) {
-        add_int_attr(attrs, dst_atom, value);
-    }
-    set_int_attr(attrs, dst_atom, value);
-    return attrs;
-}
-
-// sets a dst condition atom
-attr_list set_dst_condition_atom(attr_list attrs, int condition){
-    atom_t dst_atom = attr_atom_from_string("fp_dst_condition");
-    int dst;
-    if(!get_int_attr(attrs, dst_atom, &dst)){
-	add_int_attr(attrs, dst_atom, condition);
-    }
-    set_int_attr(attrs, dst_atom, condition);
-    return attrs;
-}
-
 // processes messages from control queue
-int control_thread(void* arg) {
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData*)arg;
+void 
+control_thread(void *arg) 
+{
+    FlexpathWriteFileData *fileData = (FlexpathWriteFileData*)arg;
     int rank = fileData->rank;
-    FlexpathQueueNode* controlMsg;
-    FlexpathQueueNode* dataNode;
+    FlexpathQueueNode *controlMsg;
+    FlexpathQueueNode *dataNode;
     while(1) {
-        fp_write_log("CONTROL", "control message attempts dequeue\n");
 	if((controlMsg = threaded_dequeue(&fileData->controlQueue, 
-	    fileData->controlMutex, fileData->controlCondition, NULL, 0))) {
-            fp_write_log("CONTROL", "control message dequeued\n");
-	    if(controlMsg->type==VAR) {
-		Var_msg* varMsg = (Var_msg*) controlMsg->data;
-		fileData->askedVars = add_var(fileData->askedVars, 
-		    strdup(varMsg->var_name), NULL, varMsg->rank);
+	    &fileData->controlMutex, &fileData->controlCondition, 0))) {
+	    if(controlMsg->type==VAR){
+		Var_msg *varMsg = (Var_msg*) controlMsg->data;
+		process_var_msg(fileData, varMsg);
 		EVreturn_event_buffer(flexpathWriteData.cm,controlMsg->data);
-	    } else if(controlMsg->type==DATA_FLUSH) {
-                fp_write_log("DATAMUTEX", "in use 1\n"); 
+	    }
+	    else if(controlMsg->type==DATA_FLUSH) {
+		Flush_msg *flushMsg = (Flush_msg*)controlMsg->data;
 		dataNode = threaded_peek(&fileData->dataQueue, 
-		    fileData->dataMutex, &fileData->dataCondition);
-                fp_write_log("DATAMUTEX", "no use 1\n"); 
-                thr_mutex_lock(fileData->dataMutex);
-                thr_mutex_unlock(fileData->dataMutex);
-                fp_write_log("DATAMUTEX", "no use 1\n"); 
-		Flush_msg* flushMsg = (Flush_msg*) controlMsg->data;
-		fp_write_log("QUEUE", "dataNode:%p, flushMsg:%p\n", dataNode, flushMsg);
-                void* temp = copy_buffer(dataNode->data, flushMsg->rank, fileData);
-		fileData->attrs = set_dst_rank_atom(fileData->attrs, flushMsg->rank);
-		fileData->attrs = set_dst_condition_atom(fileData->attrs, flushMsg->condition);
-		if(!fileData->bridges[flushMsg->rank].opened) {
-                  fileData->bridges[flushMsg->rank].opened=1;
-                  fileData->openCount++;
-                }
-		fp_write_log("MSG", " sending data_msg : rank %d step %d\n", 
-                    flushMsg->rank, fileData->currentStep);
-		EVsubmit_general(fileData->dataSource, temp, data_free, fileData->attrs);
-	    } else if(controlMsg->type==OPEN) {
-                op_msg* open = (op_msg*) controlMsg->data;
-                fileData->bridges[open->process_id].step = open->step;
-                fileData->bridges[open->process_id].condition = open->condition;
-		if(!fileData->bridges[open->process_id].created){
-		    fileData->bridges[open->process_id].myNum = 
-			EVcreate_bridge_action(flexpathWriteData.cm, 
-					       attr_list_from_string(fileData->bridges[open->process_id].contact), 
-					       fileData->bridges[open->process_id].theirNum);
-		
-		    EVaction_set_output(flexpathWriteData.cm, 
-					fileData->multiStone, 
-					fileData->multi_action, 
-					open->process_id+1, 
-					fileData->bridges[open->process_id].myNum);				    
-		}		
-		if(open->step < fileData->currentStep) {
-                    perr("control_thread: Recieved Past Step Open\n");
-		    log_error("Flexpath method control_thread: Received Past Step Open\n");
-                } else if (open->step == fileData->currentStep){
-                    fp_write_log("STEP", "recieved op with current step\n");
-                    thr_mutex_lock(fileData->openMutex);
-                    fp_write_log("MUTEX","lock 6\n");
-                    fileData->openCount++;  
-                    fileData->bridges[open->process_id].opened = 1;
-                    fp_write_log("MUTEX","unlock 6\n");
-		    thr_mutex_unlock(fileData->openMutex);
-                    op_msg* ack = (op_msg*) malloc(sizeof(op_msg));
-                    ack->file_name = strdup(fileData->name);
-                    ack->process_id = fileData->rank;
-                    ack->step = fileData->currentStep;
-                    ack->type = 2;
-		    ack->condition = open->condition;
-                    fileData->attrs = set_dst_rank_atom(fileData->attrs, open->process_id+1);
-		    fp_write_log("MSG", " sending op_msg : dst %d step %d type ack\n",
-				 open->process_id, fileData->currentStep); 
-                    EVsubmit_general(fileData->opSource, ack, op_free, fileData->attrs);
-                } else {
-                    fp_write_log("STEP", "recieved op with future step\n");
-                }
-            } else if(controlMsg->type==CLOSE) {
+					 &fileData->dataMutex, 
+					 &fileData->dataCondition);
+		process_data_flush(fileData, flushMsg, dataNode);
+
+	    }
+	    else if(controlMsg->type==OPEN) {
+                op_msg *open = (op_msg*) controlMsg->data;
+		process_open_msg(fileData, open);                
+		EVreturn_event_buffer(flexpathWriteData.cm, open);
+            }
+	    else if(controlMsg->type==CLOSE) {
                 op_msg* close = (op_msg*) controlMsg->data;
-		thr_mutex_lock(fileData->openMutex);
-                fp_write_log("MUTEX","lock 7\n");
-		fileData->openCount--;
-                fileData->bridges[close->process_id].opened=0;
-                fp_write_log("MUTEX","unlock 7\n");
-		thr_mutex_unlock(fileData->openMutex);
-                 if(fileData->openCount==0) {
-                    fp_write_log("STEP", "advancing\n");
-                    fp_write_log("DATAMUTEX", "in use 2\n"); 
-		    FlexpathQueueNode* node = threaded_dequeue(&fileData->dataQueue, 
-		        fileData->dataMutex, fileData->dataCondition, fileData->dataCondition2, 1);
-                    fp_write_log("DATAMUTEX", "no use 2\n"); 
-                    thr_mutex_lock(fileData->dataMutex);
-                    thr_mutex_unlock(fileData->dataMutex);
-                    fp_write_log("DATAMUTEX", "no use 2\n"); 
-                    int q = queue_count(&fileData->dataQueue, fileData->dataMutex);
-                    fp_write_log("QUEUE", "after step queue count now %d\n", q);
-                    FMfree_var_rec_elements(fileData->fm->ioFormat, node->data);
-                    fileData->currentStep++;
-                    
-                    int i;
-                    //for all bridges if step == currentstep send ack
-		    // this block gets repeated in finalize.  gets repeated
-		    // only AFTER sending finalize messages.  cp and past into finalize
-		    // do it for everyone that has opened.
-		    
-                    for(i=0; i<fileData->numBridges; i++) {
-                      if(fileData->bridges[i].step==fileData->currentStep) {
-                        fileData->openCount++;
-                        fileData->bridges[i].opened = 1;
-                        op_msg* ack = (op_msg*) malloc(sizeof(op_msg));
-                        ack->file_name = strdup(fileData->name);
-                        ack->process_id = fileData->rank;
-                        ack->step = fileData->currentStep;
-                        ack->type = 2;
-			ack->condition = fileData->bridges[i].condition;
-                        fileData->attrs = set_dst_rank_atom(fileData->attrs, i+1);
-		        fp_write_log("MSG", " sending op_msg : dst %d step %d type ack\n",
-                            i, fileData->currentStep);
-                        EVsubmit_general(fileData->opSource, ack, op_free, fileData->attrs);
-                      }
-                    }
-		}
-	    }else if(controlMsg->type == INIT){ 
-		fp_write_log("DATAMUTEX", "in use 1\n"); 
-		dataNode = threaded_peek(&fileData->dataQueue, 
-		    fileData->dataMutex, &fileData->dataCondition);
-                fp_write_log("DATAMUTEX", "no use 1\n"); 
-                thr_mutex_lock(fileData->dataMutex);
-                thr_mutex_unlock(fileData->dataMutex);
-                fp_write_log("DATAMUTEX", "no use 1\n"); 
-		op_msg* initMsg = (op_msg*) controlMsg->data;
-		void* temp = copy_buffer(dataNode->data, initMsg->process_id, fileData);
-		fileData->attrs = set_dst_rank_atom(fileData->attrs, initMsg->process_id);
-		fileData->attrs = set_dst_condition_atom(fileData->attrs, initMsg->condition);
-		fileData->bridges[initMsg->process_id].created = 1;
-		fileData->bridges[initMsg->process_id].myNum = 
-		    EVcreate_bridge_action(flexpathWriteData.cm, 
-					   attr_list_from_string(fileData->bridges[initMsg->process_id].contact), 
-					   fileData->bridges[initMsg->process_id].theirNum);
-		    
-		EVaction_set_output(flexpathWriteData.cm, 
-				    fileData->multiStone, 
-				    fileData->multi_action, 
-				    initMsg->process_id+1, 
-				    fileData->bridges[initMsg->process_id].myNum);		
-		/* if(!fileData->bridges[initMsg->rank].opened) { */
-                /*   fileData->bridges[initMsg->rank].opened=1;                   */
-                /* } */
-		/* fp_write_log("MSG", " sending data_msg : rank %d step %d\n",  */
-                /*     flushMsg->rank, fileData->currentStep); */
-		EVsubmit_general(fileData->dataSource, temp, data_free, fileData->attrs);
+		process_close_msg(fileData, close);
+		EVreturn_event_buffer(flexpathWriteData.cm, close);
 	    }
 	    else{
-		perr("control_thread: Unrecognized Control Message\n");
+		log_error("control_thread: Unrecognized Control Message\n");
 	    }
 	}
     }
-    return 0;
+    return;
 }
 
 // adds an open file handle to global open file list
-void add_open_file(FlexpathWriteFileData* newFile) {
+void 
+add_open_file(FlexpathWriteFileData* newFile) 
+{
     FlexpathWriteFileData* last = flexpathWriteData.openFiles;
     while(last && last->next) {
         last = last->next;
@@ -1100,7 +1298,9 @@ void add_open_file(FlexpathWriteFileData* newFile) {
 }
 
 // searches for an open file handle
-FlexpathWriteFileData* find_open_file(char* name) {
+FlexpathWriteFileData* 
+find_open_file(char* name) 
+{
     FlexpathWriteFileData* file = flexpathWriteData.openFiles;
     while(file && strcmp(file->name, name)) {
         file = file->next;
@@ -1110,7 +1310,8 @@ FlexpathWriteFileData* find_open_file(char* name) {
 
 
 // Initializes flexpath write local data structures
-extern void adios_flexpath_init(const PairStruct *params, struct adios_method_struct *method) 
+extern void 
+adios_flexpath_init(const PairStruct *params, struct adios_method_struct *method) 
 {
     setenv("CMSelfFormats", "1", 1);
     // global data structure creation
@@ -1122,32 +1323,32 @@ extern void adios_flexpath_init(const PairStruct *params, struct adios_method_st
     atom_t CM_TRANSPORT = attr_atom_from_string("CM_TRANSPORT");
     char * transport = getenv("CMTransport");
     if(transport == NULL){
-	fp_write_log("SETUP","transport is null\n");
 	if(CMlisten(flexpathWriteData.cm) == 0) {
-	    perr( "error: unable to initialize connection manager.\n");
+	    fprintf(stderr, "error: unable to initialize connection manager.\n");
 	    exit(1);
 	}
     } else {
-	fp_write_log("SETUP", "writer transport: %s\n", transport);
 	attr_list listen_list = create_attr_list();
 	add_attr(listen_list, CM_TRANSPORT, Attr_String, (attr_value)strdup(transport));
 	CMlisten_specific(flexpathWriteData.cm, listen_list);
     }
     
     // configuration setup
-    gen_pthread_init();
+    //gen_pthread_init();
     setenv("CMSelfFormats", "1", 1);
     
     // fork communications thread
     int forked = CMfork_comm_thread(flexpathWriteData.cm);   
     if(!forked) {
-         perr( "error forking comm thread\n");
+	fprintf(stderr, "Wrtier error forking comm thread\n");
     }
 }
 
-// opens a new adios file for writes
-extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method_struct *method, MPI_Comm comm) 
-{ 
+extern int 
+adios_flexpath_open(struct adios_file_struct *fd, 
+		    struct adios_method_struct *method, 
+		    MPI_Comm comm) 
+{    
     if( fd == NULL || method == NULL) {
         perr("open: Bad input parameters\n");
         return -1;
@@ -1159,50 +1360,39 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
         return 0;
     }
 
-    FlexpathWriteFileData* fileData = (FlexpathWriteFileData *) malloc(sizeof(FlexpathWriteFileData));
+    FlexpathWriteFileData *fileData = malloc(sizeof(FlexpathWriteFileData));
     mem_check(fileData, "fileData");
     memset(fileData, 0, sizeof(FlexpathWriteFileData));
-    fileData->maxQueueSize=0;
+    
+    fileData->maxQueueSize = 1;
+    fileData->use_ctrl_thread = 1;
     if(method->parameters) {
-        sscanf(method->parameters,"QUEUE_SIZE=%d;",&fileData->maxQueueSize);
-        fp_write_log("SETUP", "setting max queue size to %d\n", fileData->maxQueueSize);
+        sscanf(method->parameters,"QUEUE_SIZE=%d;", &fileData->maxQueueSize);
     }
-    
+   
     // setup step state
     fileData->attrs = create_attr_list();
     fileData->openCount = 0;
-    fileData->currentStep = 0;
+    //fileData->readerStep = 0;
 
-    // setup mutexs
-    fileData->controlMutex = thr_mutex_alloc();
-    fileData->dataMutex = thr_mutex_alloc();
-    fileData->dataMutex2 = thr_mutex_alloc();
-    fileData->openMutex = thr_mutex_alloc();
-    
-    // setup conditions
-    fileData->controlCondition = thr_condition_alloc();
-    fileData->dataCondition = thr_condition_alloc();
-    fileData->dataCondition2 = thr_condition_alloc();
+    pthread_mutex_init(&fileData->controlMutex, NULL);
+    pthread_mutex_init(&fileData->dataMutex, NULL);
+    pthread_mutex_init(&fileData->openMutex, NULL);
+     
+    pthread_cond_init(&fileData->controlCondition, NULL);
+    pthread_cond_init(&fileData->dataCondition, NULL);
+
+    double setup_start = dgettimeofday();
 
     // communication channel setup
     char writer_info_filename[200];
     char writer_ready_filename[200];
     char reader_info_filename[200];
-    char reader_ready_filename[200];
-    
-    /*
-    // Titan filesystem specific
-    char * filebase = "/tmp/work/jdayal3/titan/";
-    sprintf(writer_info_filename, "%s", filebase);
-    sprintf(writer_ready_filename, "%s", filebase);
-    sprintf(reader_info_filename, "%s", filebase);
-    sprintf(reader_ready_filename, "%s", filebase);
-    */
+    char reader_ready_filename[200];   
 
     int i=0;
     flexpathWriteData.rank = fileData->rank;
     fileData->globalCount = 0;
-    fileData->sentGlobalOffsets = 0;
 
     // mpi setup
     MPI_Comm_dup(comm, &fileData->mpiComm);
@@ -1210,9 +1400,9 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
     MPI_Comm_rank((fileData->mpiComm), &fileData->rank);
     MPI_Comm_size((fileData->mpiComm), &fileData->size);
     char *recv_buff = NULL;
-    char sendmsg[CONTACT_STR_LEN];
+    char sendmsg[CONTACT_LENGTH];
     if(fileData->rank == 0) {
-        recv_buff = (char *) malloc(fileData->size*CONTACT_STR_LEN*sizeof(char));
+        recv_buff = (char *) malloc(fileData->size*CONTACT_LENGTH*sizeof(char));
     }
         
     // send out contact string
@@ -1220,15 +1410,15 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
     fileData->multiStone = EValloc_stone(flexpathWriteData.cm);
     fileData->sinkStone = EValloc_stone(flexpathWriteData.cm);
     sprintf(&sendmsg[0], "%d:%s", fileData->multiStone, contact);
-    MPI_Gather(sendmsg, CONTACT_STR_LEN, MPI_CHAR, recv_buff, 
-        CONTACT_STR_LEN, MPI_CHAR, 0, (fileData->mpiComm));
+    MPI_Gather(sendmsg, CONTACT_LENGTH, MPI_CHAR, recv_buff, 
+        CONTACT_LENGTH, MPI_CHAR, 0, (fileData->mpiComm));
 
     // rank 0 prints contact info to file
     if(fileData->rank == 0) {
         sprintf(writer_info_filename, "%s_%s", fd->name, "writer_info.txt");
         FILE* writer_info = fopen(writer_info_filename,"w");
         for(i=0; i<fileData->size; i++) {
-            fprintf(writer_info, "%s\n",&recv_buff[i*CONTACT_STR_LEN]); 
+            fprintf(writer_info, "%s\n",&recv_buff[i*CONTACT_LENGTH]); 
         }
         fclose(writer_info);
     }
@@ -1247,11 +1437,12 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
     if(!reader_info){
 	reader_info = fopen(reader_info_filename, "r");
     }
-    char in_contact[CONTACT_STR_LEN] = "";
+    char in_contact[CONTACT_LENGTH] = "";
     int numBridges = 0;
     int stone_num;
     // build a bridge per line
     while(fscanf(reader_info, "%d:%s",&stone_num, in_contact)!=EOF){
+	//fprintf(stderr, "reader contact: %d:%s\n", stone_num, in_contact);
         fileData->bridges = realloc(fileData->bridges, sizeof(FlexpathStone) * (numBridges + 1));
         attr_list contact_list = attr_list_from_string(in_contact);
         fileData->bridges[numBridges].opened = 0;
@@ -1271,94 +1462,92 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
 	unlink(reader_info_filename);
 	unlink(reader_ready_filename);
     }
+
 	
     //process group format
     struct adios_group_struct *t = method->group;
+
+    if(t == NULL){
+	adios_error(err_invalid_group, "Invalid group.\n");
+	return err_invalid_group;
+    }
     struct adios_var_struct *fields = t->vars;
-    if(t == NULL)
-	perr("t is null\n");
-    if(fields == NULL)
-	perr("t is null\n");
+	
+    if(fields == NULL){
+	adios_error(err_invalid_group, "Group has no variables.\n");
+	return err_invalid_group;
+    }	
 
     fileData->fm = set_format(t, fields, fileData);
-    fp_write_log("SETUP", "set format complete\n");
+
 
     // attach rank attr and add file to open list
-    fp_write_log("FILE", "opening file %s\n", method->group->name);
     fileData->name = strdup(method->group->name); 
     add_open_file(fileData);
     atom_t rank_atom = attr_atom_from_string(FP_RANK_ATTR_NAME);
     add_int_attr(fileData->attrs, rank_atom, fileData->rank);
+    
+    EVadd_standard_routines(flexpathWriteData.cm, extern_string, externs);
 
     //generate multiqueue function that sends formats or all data based on flush msg
-    fp_write_log("SETUP", "setup graph\n");
-    FMStructDescList queue_list[] = {flush_format_list, format_format_list, 
-	var_format_list, op_format_list, evgroup_format_list, 
-        data_format_list, NULL};
+
+    FMStructDescList queue_list[] = {flush_format_list, 
+				     var_format_list, 
+				     op_format_list, 
+				     evgroup_format_list,
+				     drop_evgroup_msg_format_list,
+				     data_format_list,
+				     update_step_msg_format_list,
+				     NULL};
     char* q_action_spec = create_multityped_action_spec(queue_list, 
-        multiqueue_action); 
+							multiqueue_action); 
     fileData->multi_action = EVassoc_multi_action(flexpathWriteData.cm, 
-	fileData->multiStone, q_action_spec, NULL);
-    fileData->formatSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-        fileData->multiStone, format_format_list);
-    fileData->dataSource = EVcreate_submit_handle_free(flexpathWriteData.cm, 
-        fileData->multiStone, fileData->fm->format, data_free,  NULL); 
-    fileData->opSource = EVcreate_submit_handle_free(flexpathWriteData.cm, 
-        fileData->multiStone, op_format_list, op_free,  NULL); 
+						  fileData->multiStone, 
+						  q_action_spec, 
+						  NULL);
+    fileData->dataSource = EVcreate_submit_handle(flexpathWriteData.cm, 
+						  fileData->multiStone, 
+						  fileData->fm->format);						 
+
+    fileData->opSource = EVcreate_submit_handle(flexpathWriteData.cm, 
+						fileData->multiStone, 
+						op_format_list); 
+    
     fileData->offsetSource = EVcreate_submit_handle(flexpathWriteData.cm, 
-	fileData->multiStone, evgroup_format_list);
+						    fileData->multiStone, 
+						    evgroup_format_list);
+    fileData->dropSource = EVcreate_submit_handle(flexpathWriteData.cm, 
+						  fileData->multiStone, 
+						  drop_evgroup_msg_format_list);
     
-    fp_write_log("SETUP", "setup terminal actions\n");
+    fileData->stepSource = EVcreate_submit_handle(flexpathWriteData.cm,
+						  fileData->multiStone, 
+						  update_step_msg_format_list);
+
+    EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
+			    var_format_list, var_handler, fileData);
     EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-	var_format_list, var_handler, fileData);
+			    op_format_list, op_handler, fileData);
     EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
-	op_format_list, op_handler, fileData);
+			    drop_evgroup_msg_format_list, drop_evgroup_handler, fileData);
     EVassoc_terminal_action(flexpathWriteData.cm, fileData->sinkStone, 
 	flush_format_list, flush_handler, fileData);
 
     //link multiqueue to sink
-    fp_write_log("SETUP", "linking stones\n");
     EVaction_set_output(flexpathWriteData.cm, fileData->multiStone, 
         fileData->multi_action, 0, fileData->sinkStone);
-
-    //link up multiqueue ports to bridge stones
-    /* for(i=0; i<numBridges; i++) { */
-    /*     EVaction_set_output(flexpathWriteData.cm,  */
-    /*         fileData->multiStone, multi_action, i+1, fileData->bridges[i].myNum); */
-    /* } */
-    
-    fp_write_log("SETUP", "arranged evpath graph\n");
 	
-    //store format id in multiqueue
-    Format_msg *initial_format_msg = malloc(sizeof(Format_msg));
-    FMContext my_context = create_local_FMcontext();	
+    FMContext my_context = create_local_FMcontext();
     fileData->fm->ioFormat = register_data_format(my_context, fileData->fm->format);
-    int id_len;
-    char* temp = get_server_ID_FMformat(fileData->fm->ioFormat, &id_len);
-    initial_format_msg->format_id = temp;
-    initial_format_msg->id_len = id_len;
-    int rep_len;
-    char *temp2 = get_server_rep_FMformat(fileData->fm->ioFormat, &rep_len);
-    initial_format_msg->rep_id = temp2;
-    initial_format_msg->rep_id_len = rep_len;
-    
-    fp_write_log("SETUP", "submitting format stuff\n");
-    EVsubmit_general(fileData->formatSource, initial_format_msg, format_free, fileData->attrs);
     
-    fp_write_log("SETUP", "indicating to reader that ready\n");
     sprintf(writer_ready_filename, "%s_%s", fd->name, "writer_ready.txt");
     if(fileData->rank == 0) {
         FILE* writer_info = fopen(writer_ready_filename, "w");
         fprintf(writer_info, "ready");
         fclose(writer_info);
-    }
-        
-    fp_write_log("SETUP", "fork control thread\n");
-    thr_thread_t forked_thread = thr_fork(control_thread, fileData);
-    if(!forked_thread) {
-        perr("on open ERROR forking control thread");
-    }
-   
+    }       
+    
+    pthread_create(&fileData->ctrl_thr_id, NULL, (void*)&control_thread, fileData);   
     return 0;	
 }
 
@@ -1366,26 +1555,31 @@ extern int adios_flexpath_open(struct adios_file_struct *fd, struct adios_method
 
 
 //  writes data to multiqueue
-extern void adios_flexpath_write(struct adios_file_struct *fd, struct adios_var_struct *f, void *data, struct adios_method_struct *method) {
-    fp_write_log("FILE", "entering flexpath file %s write\n", method->group->name);
+extern void
+adios_flexpath_write(
+    struct adios_file_struct *fd, 
+    struct adios_var_struct *f, 
+    void *data, 
+    struct adios_method_struct *method) 
+{
     FlexpathWriteFileData* fileData = find_open_file(method->group->name);
     FlexpathFMStructure* fm = fileData->fm;
 
     if (fm == NULL)
     {
+	log_error("adios_flexpath_write: something has gone wrong with format registration: %s\n", 
+		  f->name);
 	return;
-
     }
     
     FMFieldList flist = fm->format->field_list;
     FMField *field = NULL;
-    char *fixedname = find_fixed_name(fm, f->name);
-    field = internal_find_field(fixedname, flist);
-    //perr( "found field %s\n", field->field_name);
+    char *fullname = resolve_path_name(f->path, f->name);
+    field = internal_find_field(fullname, flist);
+
     if (field != NULL) {
+	//scalar quantity
 	if (!f->dimensions) {
-	    //scalar quantity
-            //perr( "copying scalar value\n");
 	    if (data) {
 		//why wouldn't it have data?
 		memcpy(&fm->buffer[field->field_offset], data, field->field_size);
@@ -1400,109 +1594,98 @@ extern void adios_flexpath_write(struct adios_file_struct *fd, struct adios_var_
 			    //check if there are FlexpathAltNames
 			    FlexpathAltName *a = NULL;
 			    for (a = d->altList.lh_first; a != NULL; a = a->entries.le_next) {
-				//use the FlexpathAltName field to get the data into the buffer
 				memcpy(&fm->buffer[a->field->field_offset], 
 				       data, 
 				       a->field->field_size);
-                		//int *testingint = (int*)&fm->buffer[a->field->field_offset];
-		        	//perr( "writing %s to %s at %d %d\n", f->name, a->name, a->field->field_offset, (int)*testingint);
 			    }
 			}
 		    }
 		}
 	    } else {
-		//perr( "no data for  scalar %s\n", f->name);
+		log_error("adios_flexpath_write: error with variable creation: %s\n", f->name);
 	    }
 	} else {
 	    //vector quantity
 	    if (data)
 	    {
-                //perr( "copying vector pointer\n");
 		//we just need to copy the pointer stored in f->data
                 // calculate size
                 memcpy(&fm->buffer[field->field_offset], &data, sizeof(void *));
 
 	    } else {
-		//perr( "no data for vector %s\n", f->name);
+		log_error("adios_flexpath_write: no array data found for var: %s. Bad.\n", f->name);	
 	    }
 	}
     }
-    //perr( "successfully copied data to buffer\n");
 }
 
 extern void 
 adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *method) 
 {
-    fp_write_log("FILE", "file close %s\n", method->group->name);
     FlexpathWriteFileData* fileData = find_open_file(method->group->name);
     void* buffer = malloc(fileData->fm->size);
 
     struct adios_group_struct * g2 = fd->group;
     struct adios_var_struct * fields = g2->vars;
-    while(fields) {
-        
-        //perr( "field name: %s\n", fields->name);
+    while(fields) {       
         if(fields->dimensions) {
-            //perr( "field is an array\n");
             struct adios_dimension_struct* dims = fields->dimensions;
-            //perr( "field dims: %p\n", dims);
-    
             int total_size = 1;
             //for each dimension
             while(dims) {    
-                struct adios_var_struct* temp = adios_find_var_by_id(g2->vars, dims->dimension.id);            
-                int size = *(int*)temp->data;
-                //perr( "dim %s size %d\n", temp->name, *(int*)temp->data);
+                int size = adios_get_dim_value (&dims->dimension);
                 total_size *= size;
                 dims = dims->next;
             }		
             FMFieldList flist = fileData->fm->format->field_list;
             FMField *field = NULL;
-            char *fixedname = find_fixed_name(fileData->fm, fields->name);
-            field = internal_find_field(fixedname, flist);
+	    char *fullname = resolve_path_name(fields->path, fields->name);
+            field = internal_find_field(fullname, flist);
             //perr( "field offset %d size %d\n", field->field_offset, field->field_size);
 
             total_size*=field->field_size;
             // malloc size
-            //perr( "field %s field size %d\n", fields->name, total_size);
             void* pointer_data_copy = malloc(total_size);
             // while null
             while(pointer_data_copy==NULL) { 
-                perr("mallocing space for user buffer failed, trying again soon\n");
                 sleep(1);
                 void* pointer_data_copy = malloc(total_size);
                 //block
             }
-                
-            fp_write_log("DATA","Attempting to get pointer to user data\n");
+                           
             void* temp = get_FMPtrField_by_name(flist, fields->name, fileData->fm->buffer, 0);
-            fp_write_log("DATA","Copying user data to new space\n");
             memcpy(pointer_data_copy, temp, total_size);
-            fp_write_log("DATA","Setting pointer to new space\n");
             set_FMPtrField_by_name(flist, fields->name, fileData->fm->buffer, pointer_data_copy);
         }    
         fields = fields->next;
     }
-
     
     memcpy(buffer, fileData->fm->buffer, fileData->fm->size);
 
-    fp_write_log("DATAMUTEX", "in use 3\n"); 
     threaded_enqueue(&fileData->dataQueue, buffer, 
-        DATA_BUFFER, fileData->dataMutex, fileData->dataCondition);
-    fp_write_log("DATAMUTEX", "no use 3\n"); 
-    thr_mutex_lock(fileData->dataMutex);
-    thr_mutex_unlock(fileData->dataMutex);
-    fp_write_log("DATAMUTEX", "no use 3\n"); 
+		     DATA_BUFFER,
+		     &fileData->dataMutex, 
+		     &fileData->dataCondition,
+		     fileData->maxQueueSize);
     
     int c = 0;
  
     // now gather offsets and send them via MPI to root
     struct adios_group_struct * g = fd->group;
     struct adios_var_struct * list = g->vars;
+    evgroup *gp = malloc(sizeof(evgroup));    
+    gp->process_id = fileData->rank;
+    if(fileData->globalCount == 0){
+
+	gp->num_vars = 0;
+	gp->step = fileData->writerStep;
+	gp->vars = NULL;
+	//fileData->gp = gp;       
+	fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
+	EVsubmit_general(fileData->offsetSource, gp, evgroup_msg_free, fileData->attrs);
+    }
 
-    if(fileData->globalCount > 0 && !fileData->sentGlobalOffsets){	
-	fp_write_log("BOUNDING", "check offsets\n");
+    else{	
         // process local offsets here	
 	int num_gbl_vars = 0;
         global_var * gbl_vars = NULL;
@@ -1510,38 +1693,45 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
 	int myrank = fileData->rank;
 	int commsize = fileData->size;
 
+	double offset_start = dgettimeofday();
 	while(list){
+	    char *fullname = resolve_path_name(list->path, list->name);
 	    //int num_local_offsets = 0;
-	    int * local_offsets = NULL;
-	    int * local_dimensions = NULL;
-	    int num_local_offsets = get_local_offsets(list, g, &local_offsets, &local_dimensions);
+	    uint64_t *local_offsets = NULL;
+	    uint64_t *local_dimensions = NULL;
+	    uint64_t *global_dimensions = NULL; // same at each rank.
+	    int num_local_offsets = get_var_offsets(list, g, 
+						    &local_offsets, 
+						    &local_dimensions, 
+						    &global_dimensions);
 	    
 	    if(num_local_offsets > 0){
-		int * all_offsets = NULL;
-		int * all_local_dims = NULL;
-		
-		int buf_size = num_local_offsets * commsize * sizeof(int);		    
-		all_offsets = (int*)malloc(buf_size);		
-		all_local_dims = (int*)malloc(buf_size);
+		uint64_t *all_offsets = NULL;
+		uint64_t *all_local_dims = NULL;
 		
+		int buf_size = num_local_offsets * commsize * sizeof(uint64_t);		    
+		all_offsets = malloc(buf_size);		
+		all_local_dims = malloc(buf_size);
 
-		MPI_Allgather(local_offsets, num_local_offsets, MPI_INT, 
-			      all_offsets, num_local_offsets, MPI_INT,
+		int arr_size = num_local_offsets * sizeof(uint64_t);
+		MPI_Allgather(local_offsets, arr_size, MPI_BYTE, 
+			      all_offsets, arr_size, MPI_BYTE,
 			      fileData->mpiComm);
 
-		MPI_Allgather(local_dimensions, num_local_offsets, MPI_INT, 
-			      all_local_dims, num_local_offsets, MPI_INT,
+		MPI_Allgather(local_dimensions, arr_size, MPI_BYTE, 
+			      all_local_dims, arr_size, MPI_BYTE,
 			      fileData->mpiComm);
-
 		
 		num_gbl_vars++;
-		offset_struct * ostruct = (offset_struct*)malloc(sizeof(offset_struct));
+		offset_struct *ostruct = malloc(sizeof(offset_struct));
 		ostruct->offsets_per_rank = num_local_offsets;
 		ostruct->total_offsets = num_local_offsets * commsize;
 		ostruct->local_offsets = all_offsets;
 		ostruct->local_dimensions = all_local_dims;
+		ostruct->global_dimensions = global_dimensions;
+
 		gbl_vars = realloc(gbl_vars, sizeof(global_var) * num_gbl_vars);
-		gbl_vars[num_gbl_vars - 1].name = strdup(list->name);
+		gbl_vars[num_gbl_vars - 1].name = fullname;
 		gbl_vars[num_gbl_vars - 1].noffset_structs = 1;
 		gbl_vars[num_gbl_vars - 1].offsets = ostruct;
 
@@ -1549,134 +1739,172 @@ adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *m
 	    list=list->next;
 	}
 
-	int i;
-	    
-	for(i=0; i<num_gbl_vars; i++){
-	    perr("global_var: %s has local offsets\n", gbl_vars[i].name);
-	}
-	    
-	evgroup * gp = (evgroup*)malloc(sizeof(evgroup));
 	gp->num_vars = num_gbl_vars;
-	perr("num global vars %d\n", num_gbl_vars);
+	gp->step = fileData->writerStep;
 	gp->vars = gbl_vars;
-	fileData->gp = gp;
-	fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
-	perr("size:%d\n\n\n", fileData->size);
-	EVsubmit(fileData->offsetSource, gp, fileData->attrs);
-	
-	fileData->sentGlobalOffsets = 1;
+	//fileData->gp = gp;       
     }
+    
+    update_step_msg *stepmsg = malloc(sizeof(update_step_msg));
+    stepmsg->finalized = 0;
+    stepmsg->step = fileData->writerStep;
+    stepmsg->condition = -1;
+    EVsubmit_general(fileData->stepSource, stepmsg, update_step_msg_free, fileData->attrs);
+    
+    fileData->attrs = set_size_atom(fileData->attrs, fileData->size);
+    EVsubmit_general(fileData->offsetSource, gp, evgroup_msg_free, fileData->attrs);
 
-    while((c=queue_count(&fileData->dataQueue, fileData->dataMutex))>fileData->maxQueueSize) {
-        fp_write_log("QUEUE", "waiting for queue to be below max size\n");
-        thr_condition_wait(fileData->dataCondition2, fileData->dataMutex2);
-        fp_write_log("QUEUE", "wakeup on queue size\n");
-    }
-    fp_write_log("FILE", "file close %s exiting\n", method->group->name);
+    fileData->writerStep++;
 }
 
 // wait until all open files have finished sending data to shutdown
-extern void adios_flexpath_finalize(int mype, struct adios_method_struct *method) {
+extern void 
+adios_flexpath_finalize(int mype, struct adios_method_struct *method) 
+{
     FlexpathWriteFileData* fileData = flexpathWriteData.openFiles;
-    log_info("Flexpath method entered finalize: %d\n", fileData->rank);
-    fp_write_log("FILE", "Entered finalize\n");
     while(fileData) {
-        fp_write_log("DATAMUTEX", "in use 4\n"); 
-        thr_mutex_lock(fileData->dataMutex2);
-        fp_write_log("MUTEX","lock 1\n");
-        while(fileData->dataQueue!=NULL) {
-            fp_write_log("FILE", "waiting on %s to empty data\n", fileData->name);
-            thr_condition_wait(fileData->dataCondition2, fileData->dataMutex2);
-        }
-        fp_write_log("MUTEX","unlock 1\n");
-        thr_mutex_unlock(fileData->dataMutex2);
-        fp_write_log("DATAMUTEX", "no use 4\n"); 
-        fileData = fileData->next;
+
+	update_step_msg *stepmsg = malloc(sizeof(update_step_msg));
+	stepmsg->finalized = 1;
+	stepmsg->step = fileData->writerStep - 1;
+	stepmsg->condition = -1;
+	EVsubmit_general(fileData->stepSource, stepmsg, update_step_msg_free, fileData->attrs);
+
+        pthread_mutex_lock(&fileData->dataMutex);
+        while(fileData->dataQueue != NULL) {
+	    pthread_cond_wait(&fileData->dataCondition, &fileData->dataMutex);
+	}
+	pthread_mutex_unlock(&fileData->dataMutex);
+
+	fileData->finalized = 1;
+	fileData = fileData->next;	    
     }
-    // all data has been read by all readers.
-    // we can send everyone end_of_stream messages.
-    int i;
-    /* for(i=0; i<fileData->numBridges; i++) { */
-    /* 	if(fileData->bridges[i].created) { */
-    /* 	    op_msg* ack = (op_msg*) malloc(sizeof(op_msg)); */
-    /* 	    ack->file_name = strdup(fileData->name); */
-    /* 	    ack->process_id = fileData->rank; */
-    /* 	    ack->step = fileData->currentStep; */
-    /* 	    ack->type = 4; */
-    /* 	    ack->condition = fileData->bridges[i].condition; */
-    /* 	    fileData->attrs = set_dst_rank_atom(fileData->attrs, i+1); */
-    /* 	    fp_write_log("FINALIZE", " sending opfinalize _msg : dst %d step %d type ack\n", */
-    /* 			 i, fileData->currentStep); */
-    /* 	    fprintf(stderr, "\t\t\t sending finalize message to %d\n", i); */
-    /* 	    EVsubmit_general(fileData->opSource, ack, op_free, fileData->attrs); */
-    /* 	} */
-    /* } */
 }
 
 // provides unknown functionality
-extern enum ADIOS_FLAG adios_flexpath_should_buffer (struct adios_file_struct * fd,struct adios_method_struct * method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_should_buffer\n");
-    return adios_flag_unknown;
+extern enum ADIOS_FLAG 
+adios_flexpath_should_buffer (struct adios_file_struct * fd,struct adios_method_struct * method) 
+{
+    return adios_flag_no;
 }
 
 // provides unknown functionality
-extern void adios_flexpath_end_iteration(struct adios_method_struct *method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_end_iteration\n");
+extern void 
+adios_flexpath_end_iteration(struct adios_method_struct *method) 
+{
 }
 
 // provides unknown functionality
-extern void adios_flexpath_start_calculation(struct adios_method_struct *method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_start_calculation\n");
+extern void 
+adios_flexpath_start_calculation(struct adios_method_struct *method) 
+{
 }
 
 // provides unknown functionality
-extern void adios_flexpath_stop_calculation(struct adios_method_struct *method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_stop_calculation\n");
+extern void 
+adios_flexpath_stop_calculation(struct adios_method_struct *method) 
+{
 }
 
 // provides unknown functionality
-extern void adios_flexpath_get_write_buffer(struct adios_file_struct *fd,struct adios_var_struct *f, uint64_t *size, void **buffer, struct adios_method_struct *method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_get_write_buffer\n");
-}
-
-// should not be called from write, reason for inclusion here unknown
-void adios_flexpath_read(struct adios_file_struct *fd, struct adios_var_struct *f, void *buffer, uint64_t buffer_size, struct adios_method_struct *method) {
-    fp_write_log("UNIMPLEMENTED", "adios_flexpath_read\n");
-}
-
-#else // print empty version of all functions (if HAVE_FLEXPATH == 0)
+extern void 
+adios_flexpath_get_write_buffer(struct adios_file_struct *fd, 
+				struct adios_var_struct *v, 
+				uint64_t *size, 
+				void **buffer, 
+				struct adios_method_struct *method) 
+{
+    uint64_t mem_allowed;
 
-void adios_flexpath_read(struct adios_file_struct *fd, struct adios_var_struct *f, void *buffer, struct adios_method_struct *method) {
-}
+    if (*size == 0){    
+        *buffer = 0;
+        return;
+    }
 
-extern void adios_flexpath_get_write_buffer(struct adios_file_struct *fd, struct adios_var_struct *f, unsigned long long *size, void **buffer, struct adios_method_struct *method) {
-}
+    if (v->data && v->free_data == adios_flag_yes){   
+        adios_method_buffer_free (v->data_size);
+        free (v->data);
+        v->data = NULL;
+    }
 
-extern void adios_flexpath_stop_calculation(struct adios_method_struct *method) {
+    mem_allowed = adios_method_buffer_alloc (*size);
+    if (mem_allowed == *size){   
+        *buffer = malloc (*size);
+        if (!*buffer){        
+            adios_method_buffer_free (mem_allowed);
+            log_error ("ERROR: Out of memory allocating %llu bytes for %s in %s:%s()\n"
+                    ,*size, v->name, __FILE__, __func__
+                    );
+            v->got_buffer = adios_flag_no;
+            v->free_data = adios_flag_no;
+            v->data_size = 0;
+            v->data = 0;
+            *size = 0;
+            *buffer = 0;
+        }
+        else{        
+            v->got_buffer = adios_flag_yes;
+            v->free_data = adios_flag_yes;
+            v->data_size = mem_allowed;
+            v->data = *buffer;
+        }
+    }
+    else{    
+        adios_method_buffer_free (mem_allowed);
+        log_error ("OVERFLOW: Cannot allocate requested buffer of %llu "
+                         "bytes for %s in %s:%s()\n"
+                ,*size
+                ,v->name
+                ,__FILE__, __func__
+                );
+        *size = 0;
+        *buffer = 0;
+    }
 }
 
-extern void adios_flexpath_start_calculation(struct adios_method_struct *method) {
+// should not be called from write, reason for inclusion here unknown
+void 
+adios_flexpath_read(struct adios_file_struct *fd, 
+		    struct adios_var_struct *f, 
+		    void *buffer, 
+		    uint64_t buffer_size, 
+		    struct adios_method_struct *method) 
+{
 }
 
-extern void adios_flexpath_end_iteration(struct adios_method_struct *method) {
-}
+#else // print empty version of all functions (if HAVE_FLEXPATH == 0)
 
-extern void adios_flexpath_finalize(int mype, struct adios_method_struct *method) {
+void 
+adios_flexpath_read(struct adios_file_struct *fd, 
+		    struct adios_var_struct *f, 
+		    void *buffer, 
+		    struct adios_method_struct *method) 
+{
 }
 
-extern void adios_flexpath_close(struct adios_file_struct *fd, struct adios_method_struct *method) {
+extern void 
+adios_flexpath_get_write_buffer(struct adios_file_struct *fd, 
+				struct adios_var_struct *f, 
+				unsigned long long *size, 
+				void **buffer, 
+				struct adios_method_struct *method) 
+{
 }
 
-extern void adios_flexpath_write(struct adios_file_struct *fd, struct adios_var_struct *f, void *data, struct adios_method_struct *method) {
+extern void 
+adios_flexpath_stop_calculation(struct adios_method_struct *method) 
+{
 }
 
-extern void adios_flexpath_open(struct adios_file_struct *fd, struct adios_method_struct *method) {
+extern void 
+adios_flexpath_start_calculation(struct adios_method_struct *method) 
+{
 }
 
-extern void adios_flexpath_init(const PairStruct *params, struct adios_method_struct *method) {
+extern void 
+adios_flexpath_end_iteration(struct adios_method_struct *method) 
+{
 }
 
-enum ADIOS_FLAG adios_flexpath_should_buffer (struct adios_file_struct * fd, struct adios_method_struct * method) {
-}
 
 #endif
diff --git a/src/write/adios_mpi.c b/src/write/adios_mpi.c
index e90e87f..73a5402 100644
--- a/src/write/adios_mpi.c
+++ b/src/write/adios_mpi.c
@@ -11,10 +11,10 @@
 #include <math.h>
 #include <string.h>
 #if defined(__APPLE__)
-#	include <sys/param.h>
-#	include <sys/mount.h>
+#    include <sys/param.h>
+#    include <sys/mount.h>
 #else
-#	include <sys/vfs.h>
+#    include <sys/vfs.h>
 #endif
 #include <sys/ioctl.h>
 #include <assert.h>
@@ -51,9 +51,7 @@ struct adios_MPI_data_struct
 
     struct adios_bp_buffer_struct_v1 b;
 
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
+    struct adios_index_struct_v1 * index;
 
     uint64_t vars_start;
     uint64_t vars_header_size;
@@ -292,9 +290,7 @@ void adios_mpi_init (const PairStruct * parameters
     md->rank = 0;
     md->size = 0;
     md->group_comm = method->init_comm; // unused here, adios_open will set the current comm
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
+    md->index = adios_alloc_index_v1(1); // with hashtables
     md->vars_start = 0;
     md->vars_header_size = 0;
     md->storage_targets = 0;
@@ -344,9 +340,10 @@ int adios_mpi_open (struct adios_file_struct * fd
 static
 void build_offsets (struct adios_bp_buffer_struct_v1 * b
                    ,MPI_Offset * offsets, int size, char * group_name
-                   ,struct adios_index_process_group_struct_v1 * pg_root
+                   ,struct adios_index_struct_v1 * index
                    )
 {
+    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
     while (pg_root)
     {
         if (!strcasecmp (pg_root->group_name, group_name))
@@ -620,9 +617,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.pg_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_process_group_index_v1 (&md->b
-                                                   ,&md->old_pg_root
-                                                   );
+                adios_parse_process_group_index_v1 (&md->b, &md->index->pg_root);
 
 #if 1
                 adios_init_buffer_read_vars_index (&md->b);
@@ -632,7 +627,9 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
+                adios_parse_vars_index_v1 (&md->b, &md->index->vars_root, 
+                                           md->index->hashtbl_vars,
+                                           &md->index->vars_tail);
 
                 adios_init_buffer_read_attributes_index (&md->b);
                 MPI_File_seek (md->fh, md->b.attrs_index_offset
@@ -641,7 +638,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.attrs_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_attributes_index_v1 (&md->b, &md->old_attrs_root);
+                adios_parse_attributes_index_v1 (&md->b, &md->index->attrs_root);
 #endif
 
                 fd->base_offset = md->b.end_of_pgs;
@@ -660,7 +657,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
 
                     // go through the pg index to build the offsets array
                     build_offsets (&md->b, offsets, md->size
-                                  ,fd->group->name, md->old_pg_root
+                                  ,fd->group->name, md->index
                                   );
                     MPI_Scatter (offsets, 3, MPI_LONG_LONG
                                 ,MPI_IN_PLACE, 3, MPI_LONG_LONG
@@ -882,14 +879,12 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                                   ,&md->status
                                   );
 
-                    adios_parse_process_group_index_v1 (&md->b
-                                                       ,&md->old_pg_root
-                                                       );
+                    adios_parse_process_group_index_v1 (&md->b, &md->index->pg_root);
 
                     // find the largest time index so we can append properly
                     struct adios_index_process_group_struct_v1 * p;
                     uint32_t max_time_index = 0;
-                    p = md->old_pg_root;
+                    p = md->index->pg_root;
                     while (p)
                     {
                         if (p->time_index > max_time_index)
@@ -908,7 +903,9 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                     MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
                                   ,&md->status
                                   );
-                    adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
+                    adios_parse_vars_index_v1 (&md->b, &md->index->vars_root, 
+                                               md->index->hashtbl_vars,
+                                               &md->index->vars_tail);
 
                     adios_init_buffer_read_attributes_index (&md->b);
                     MPI_File_seek (md->fh, md->b.attrs_index_offset
@@ -917,9 +914,7 @@ enum ADIOS_FLAG adios_mpi_should_buffer (struct adios_file_struct * fd
                     MPI_File_read (md->fh, md->b.buff, md->b.attrs_size
                                   ,MPI_BYTE, &md->status
                                   );
-                    adios_parse_attributes_index_v1 (&md->b
-                                                    ,&md->old_attrs_root
-                                                    );
+                    adios_parse_attributes_index_v1 (&md->b, &md->index->attrs_root);
 
                     fd->base_offset = md->b.end_of_pgs;
                     fd->pg_start_in_file = fd->base_offset;
@@ -1674,9 +1669,7 @@ void adios_mpi_close (struct adios_file_struct * fd
             gettimeofday (&timing.t12, NULL);
 #endif
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
             // if collective, gather the indexes from the rest and call
             if (md->group_comm != MPI_COMM_NULL)
             {
@@ -1720,19 +1713,15 @@ void adios_mpi_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
                         */
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -1748,15 +1737,13 @@ void adios_mpi_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
-                    uint32_t tmp_buffer_size = (uint32_t) buffer_size;
+                                         ,0, md->index);
+
+                    uint32_t tmp_buffer_size = (uint32_t) buffer_offset;
                     MPI_Gather (&tmp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, md->group_comm
                                );
-                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, md->group_comm
                                 );
@@ -1833,10 +1820,7 @@ void adios_mpi_close (struct adios_file_struct * fd
             if (md->rank == 0)
             {
                 adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                     ,index_start, md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,index_start, md->index);
                 adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
                 MPI_File_seek (md->fh, md->b.pg_index_offset, MPI_SEEK_SET);
@@ -1903,16 +1887,6 @@ timeval_subtract (&timing.t8, &b, &a);
                 buffer_offset = 0;
             }
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
 #if COLLECT_METRICS
             gettimeofday (&timing.t11, NULL);
 #endif
@@ -2126,9 +2100,7 @@ timeval_subtract (&timing.t8, &b, &a);
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
             // if collective, gather the indexes from the rest and call
             if (md->group_comm != MPI_COMM_NULL)
             {
@@ -2172,19 +2144,15 @@ timeval_subtract (&timing.t8, &b, &a);
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
-                         */
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        */
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -2200,17 +2168,14 @@ timeval_subtract (&timing.t8, &b, &a);
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
-                    int _buffer_size = buffer_size;
+                    int _buffer_size = buffer_offset;
 
                     MPI_Gather (&_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, md->group_comm
                                );
-                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, md->group_comm
                                 );
@@ -2275,10 +2240,7 @@ timeval_subtract (&timing.t8, &b, &a);
             if (md->rank == 0)
             {
                 adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                     ,index_start, md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,index_start, md->index);
                 adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
                 MPI_File_seek (md->fh, md->b.pg_index_offset, MPI_SEEK_SET);
@@ -2327,17 +2289,6 @@ timeval_subtract (&timing.t8, &b, &a);
 
             free (buffer);
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
-
             break;
         }
 
@@ -2374,12 +2325,7 @@ timeval_subtract (&timing.t8, &b, &a);
     memset (&md->status, 0, sizeof (MPI_Status));
     md->group_comm = MPI_COMM_NULL;
 
-    adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                         ,md->old_attrs_root
-                         );
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
+    adios_clear_index_v1 (md->index);
 }
 
 void adios_mpi_finalize (int mype, struct adios_method_struct * method)
@@ -2391,6 +2337,7 @@ void adios_mpi_finalize (int mype, struct adios_method_struct * method)
         adios_mpi_initialized = 0;
         MPI_Info_free (&md->info);
     }
+    adios_free_index_v1 (md->index);
 }
 
 void adios_mpi_end_iteration (struct adios_method_struct * method)
diff --git a/src/write/adios_mpi_amr.c b/src/write/adios_mpi_amr.c
index 7a95efd..ed0b4d6 100644
--- a/src/write/adios_mpi_amr.c
+++ b/src/write/adios_mpi_amr.c
@@ -84,17 +84,14 @@ struct adios_MPI_data_struct
 
     struct adios_bp_buffer_struct_v1 b;
 
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
+    struct adios_index_struct_v1 * index;
 
     uint64_t vars_start;
     uint64_t vars_header_size;
 
-    uint64_t striping_unit;  // file system stripe size
-
     int * g_is_aggregator;
     int g_num_aggregators;
+    int g_have_mdf;
     int g_merging_pgs;
     int g_num_ost;
     int g_threading;
@@ -352,6 +349,36 @@ adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *paramet
 }
 
 static void
+adios_mpi_amr_set_have_mdf (char * parameters, struct adios_MPI_data_struct * md)
+{
+    int err = 0, flag, i, aggr_group_size, remain, index;
+    int nproc = md->size, rank = md->rank;
+    char value[64], *temp_string, *p_count,*p_size;
+
+    temp_string = (char *) malloc (strlen (parameters) + 1);
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
+    if (p_size = strstr (temp_string, "have_metadata_file"))
+    {
+        char * p = strchr (p_size, '=');
+        char * q = strtok (p, ";");
+
+        if (!q)
+            md->g_have_mdf = atoi (q + 1);
+        else
+            md->g_have_mdf = atoi (p + 1);
+    }
+    else
+    {
+        // by default, write metadata file. 
+        md->g_have_mdf = 1;
+    }
+
+    free (temp_string);
+}
+
+static void
 adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_data_struct * md)
 {
     int err = 0, flag, i, aggr_group_size, remain, index;
@@ -402,6 +429,25 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
         }
     }
 
+    strcpy (temp_string, parameters);
+    trim_spaces (temp_string);
+
+    if (p_size = strstr (temp_string, "have_metadata_file"))
+    {
+        char * p = strchr (p_size, '=');
+        char * q = strtok (p, ";");
+
+        if (!q)
+            md->g_have_mdf = atoi (q + 1);
+        else
+            md->g_have_mdf = atoi (p + 1);
+    }
+    else
+    {
+        // by default, write metadata file. 
+        md->g_have_mdf = 1;
+    }
+
     // set up whether to thread IO ops
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
@@ -537,54 +583,6 @@ static void adios_mpi_amr_buffer_write (char ** buffer, uint64_t * buffer_size
     *buffer_offset += size;
 }
 
-static int
-adios_mpi_amr_get_striping_unit(MPI_File fh, char *filename)
-{
-    struct statfs fsbuf;
-    int err, flag;
-    uint64_t striping_unit = 1048576;
-    char     value[64];
-    MPI_Info info_used;
-
-    // get striping_unit from MPI hint if it has
-    MPI_File_get_info(fh, &info_used);
-    MPI_Info_get(info_used, "striping_unit", 63, value, &flag);
-    MPI_Info_free(&info_used);
-
-    if (flag) return atoi(value);
-
-    // if striping_unit is not set in MPI file info, get it from system
-    err = statfs(filename, &fsbuf);
-    if (err == -1) {
-        printf("Warning: statfs failed %s %s.\n",filename,strerror(errno));
-        return striping_unit;
-    }
-
-    if (!err && fsbuf.f_type == LUSTRE_SUPER_MAGIC) {
-        int fd, old_mask, perm;
-
-        old_mask = umask(022);
-        umask(old_mask);
-        perm = old_mask ^ 0666;
-
-        fd =  open(filename, O_RDONLY, perm);
-        if (fd != -1) {
-            struct lov_user_md lum;
-            lum.lmm_magic = LOV_USER_MAGIC;
-            err = ioctl(fd, LL_IOC_LOV_GETSTRIPE, (void *) &lum);
-            if (err == 0 && lum.lmm_stripe_size > 0) {
-                striping_unit = lum.lmm_stripe_size;
-            }
-            close(fd);
-        }
-        else
-            printf("Warning: open failed on file %s %s.\n",filename,strerror(errno));
-    }
-
-    // set the file striping size
-    return striping_unit;
-}
-
 static uint64_t
 adios_mpi_amr_striping_unit_write(MPI_File   fh
                                  ,MPI_Offset offset
@@ -675,10 +673,11 @@ void adios_mpi_amr_append_var (struct adios_file_struct * fd, struct adios_var_s
 
 void adios_mpi_amr_add_offset (uint64_t var_offset_to_add
                               ,uint64_t attr_offset_to_add
-                              ,struct adios_index_var_struct_v1 * vars_root
-                              ,struct adios_index_attribute_struct_v1 * attrs_root
+                              ,struct adios_index_struct_v1 * index
                               )
 {
+    struct adios_index_var_struct_v1 * vars_root = index->vars_root;
+    struct adios_index_attribute_struct_v1 * attrs_root = index->attrs_root;
     while (vars_root)
     {
         vars_root->characteristics [0].offset += var_offset_to_add;
@@ -696,10 +695,11 @@ void adios_mpi_amr_add_offset (uint64_t var_offset_to_add
 
 void adios_mpi_amr_subtract_offset (uint64_t var_offset_to_subtract
                                     ,uint64_t attr_offset_to_subtract
-                                    ,struct adios_index_var_struct_v1 * vars_root
-                                    ,struct adios_index_attribute_struct_v1 * attrs_root
+                                    ,struct adios_index_struct_v1 * index
                                     )
 {
+    struct adios_index_var_struct_v1 * vars_root = index->vars_root;
+    struct adios_index_attribute_struct_v1 * attrs_root = index->attrs_root;
     while (vars_root)
     {
         vars_root->characteristics [0].offset -= var_offset_to_subtract;
@@ -717,11 +717,12 @@ void adios_mpi_amr_subtract_offset (uint64_t var_offset_to_subtract
 
 
 void adios_mpi_amr_build_global_index_v1 (char * fname
-                                          ,struct adios_index_process_group_struct_v1 * pg_root
-                                          ,struct adios_index_var_struct_v1 * vars_root
-                                          ,struct adios_index_attribute_struct_v1 * attrs_root
+                                         ,struct adios_index_struct_v1 * index
                                           )
 {
+    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
+    struct adios_index_var_struct_v1 * vars_root = index->vars_root;
+    struct adios_index_attribute_struct_v1 * attrs_root = index->attrs_root;
     int len;
     char * s;
 
@@ -774,12 +775,6 @@ void * adios_mpi_amr_do_open_thread (void * param)
     unlink (td->md->subfile_name);
     if (td->parameters)
     {
-/*
-        adios_mpi_amr_set_striping_unit (*td->fh
-                                        ,td->name
-                                        ,td->parameters
-                                        );
-*/
         adios_mpi_amr_set_striping_unit (td->md, td->parameters);
 
     }
@@ -790,8 +785,6 @@ void * adios_mpi_amr_do_open_thread (void * param)
                   ,&td->md->fh
                   );
 
-    td->md->striping_unit = adios_mpi_amr_get_striping_unit (td->md->fh, td->md->subfile_name);
- 
     return NULL;
 }
 
@@ -838,14 +831,13 @@ void adios_mpi_amr_init (const PairStruct * parameters
     md->rank = 0;
     md->size = 0;
     md->group_comm = method->init_comm; //unused, adios_open sets current comm
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
+    md->index = adios_alloc_index_v1(1); // with hashtables
     md->vars_start = 0;
     md->vars_header_size = 0;
 
     md->g_is_aggregator = 0;
     md->g_num_aggregators = 0;
+    md->g_have_mdf = 1;
     md->g_merging_pgs = 0;
     md->g_num_ost = 0;
     md->g_threading = 0;
@@ -911,9 +903,10 @@ int adios_mpi_amr_open (struct adios_file_struct * fd
 static
 void build_offsets (struct adios_bp_buffer_struct_v1 * b
                    ,MPI_Offset * offsets, uint64_t size, char * group_name
-                   ,struct adios_index_process_group_struct_v1 * pg_root
+                   ,struct adios_index_struct_v1 * index
                    )
 {
+    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
     while (pg_root)
     {
         if (!strcasecmp (pg_root->group_name, group_name))
@@ -988,37 +981,42 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                 // open metadata file
                 unlink (fd->name);
 
-                f = open(fd->name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
-                if (f == -1)
+                adios_mpi_amr_set_have_mdf (method->parameters, md);
+                if (md->g_have_mdf)
                 {
-                    adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", strerror(errno));
-                    return -1;
-                }
+                    f = open(fd->name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
+                    if (f == -1)
+                    {
+                        adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", strerror(errno));
+                        return -1;
+                    }
 
-                lum.lmm_magic = LOV_USER_MAGIC;
-                lum.lmm_pattern = 0;
-                lum.lmm_stripe_size = DEFAULT_STRIPE_SIZE;
-                lum.lmm_stripe_count = 1;
-                lum.lmm_stripe_offset = -1;
+                    lum.lmm_magic = LOV_USER_MAGIC;
+                    lum.lmm_pattern = 0;
+                    lum.lmm_stripe_size = DEFAULT_STRIPE_SIZE;
+                    lum.lmm_stripe_count = 1;
+                    lum.lmm_stripe_offset = -1;
 
-                ioctl (f, LL_IOC_LOV_SETSTRIPE ,(void *) &lum);
+                    ioctl (f, LL_IOC_LOV_SETSTRIPE ,(void *) &lum);
 #ifdef HAVE_LUSTRE
 
-                md->g_num_ost = 1024;
-                rc = llapi_lov_get_uuids(f, uuids, &md->g_num_ost);
-                if (rc != 0)
-                {
-                    log_warn ("MPI_AMR method: Lustre get uuids failed after creating the file: %s\n" ,strerror(errno));
-                }
+                    md->g_num_ost = 1024;
+                    rc = llapi_lov_get_uuids(f, uuids, &md->g_num_ost);
+                    if (rc != 0)
+                    {
+                        log_warn ("MPI_AMR method: Lustre get uuids failed after creating the file: %s\n" ,
+                                  strerror(errno));
+                    }
 
 #endif 
-                close (f);
+                    close (f);
 
-                MPI_File_open (MPI_COMM_SELF, fd->name
-                              ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                              ,MPI_INFO_NULL
-                              ,&md->mfh
-                              );
+                    MPI_File_open (MPI_COMM_SELF, fd->name
+                                  ,MPI_MODE_WRONLY | MPI_MODE_CREATE
+                                  ,MPI_INFO_NULL
+                                  ,&md->mfh
+                                  );
+                }
 
                 adios_mpi_amr_do_mkdir (fd);
             }
@@ -1093,7 +1091,6 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                         ,MPI_INFO_NULL
                                         ,&md->fh
                                         );
-                    md->striping_unit = adios_mpi_amr_get_striping_unit (md->fh, name);
 
                     if (err != MPI_SUCCESS)
                     {
@@ -1126,6 +1123,9 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 
         case adios_mode_append:
         {
+            adios_error (err_invalid_file_mode, "MPI_AGGREGATE method: Append mode is not supported.\n");
+            break;
+#if 0
             int old_file = 1;
             adios_buffer_struct_clear (&md->b);
 
@@ -1154,7 +1154,6 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 
                     return adios_flag_no;
                 }
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
             }
 
             if (old_file)
@@ -1193,7 +1192,7 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                   ,&md->status
                                   );
                     adios_parse_process_group_index_v1 (&md->b
-                                                       ,&md->old_pg_root
+                                                       ,&md->index->pg_root
                                                        );
 
                     adios_init_buffer_read_vars_index (&md->b);
@@ -1203,7 +1202,9 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                     MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
                                   ,&md->status
                                   );
-                    adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
+                    adios_parse_vars_index_v1 (&md->b, &md->index->vars_root, 
+                                               md->index->hashtbl_vars,
+                                               &md->index->vars_tail);
 
                     adios_init_buffer_read_attributes_index (&md->b);
                     MPI_File_seek (md->fh, md->b.attrs_index_offset
@@ -1213,7 +1214,7 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                   ,MPI_BYTE, &md->status
                                   );
                     adios_parse_attributes_index_v1 (&md->b
-                                                    ,&md->old_attrs_root
+                                                    ,&md->index->attrs_root
                                                     );
 
                     fd->base_offset = md->b.end_of_pgs;
@@ -1245,7 +1246,6 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                     ,MPI_INFO_NULL
                                     ,&md->fh
                                     );
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
                 if (next != -1)
                 {
                     MPI_Isend (&sig, 1, MPI_INTEGER, next, current
@@ -1269,7 +1269,6 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
                                     ,MPI_INFO_NULL
                                     ,&md->fh
                                     );
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
             }
 
             if (err != MPI_SUCCESS)
@@ -1352,6 +1351,7 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
             }
 
             break;
+#endif
         }
 
         default:
@@ -2088,9 +2088,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
 
             if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
             {
@@ -2100,14 +2098,14 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     uint64_t var_base_offset = 0, attr_base_offset = 0;
 
                     // change to relative offset
-                    if (md->old_vars_root)
+                    if (md->index->vars_root)
                     {
-                        var_base_offset = md->old_vars_root->characteristics [0].offset;
+                        var_base_offset = md->index->vars_root->characteristics [0].offset;
                     }
 
-                    if (md->old_attrs_root)
+                    if (md->index->attrs_root)
                     {
-                        attr_base_offset = md->old_attrs_root->characteristics [0].offset;
+                        attr_base_offset = md->index->attrs_root->characteristics [0].offset;
                     }
 
                     for (i = 0; i < new_rank; i++)
@@ -2118,8 +2116,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                     adios_mpi_amr_add_offset (var_offset_to_add
                                              ,attr_offset_to_add
-                                             ,md->old_vars_root
-                                             ,md->old_attrs_root
+                                             ,md->index
                                              );
                 }
 
@@ -2175,19 +2172,15 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
                         if (md->g_merging_pgs)
                             new_pg_root = 0;
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -2204,10 +2197,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
@@ -2229,10 +2219,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
-                                     ,md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,md->index);
 
                 adios_write_version_flag_v1 (&buffer, &buffer_size, &buffer_offset, flag);
 
@@ -2263,145 +2250,141 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             }
 
             // collect index among aggregators
-            if (is_aggregator (md->rank))
+            if (md->g_have_mdf)
             {
-                if (md->rank == 0)
+                if (is_aggregator (md->rank))
                 {
-                    int * index_sizes = malloc (4 * new_group_size2);
-                    int * index_offsets = malloc (4 * new_group_size2);
-                    char * recv_buffer = 0;
-                    uint32_t size = 0, total_size = 0;
-
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    MPI_Gather (&size, 1, MPI_INT
-                               ,index_sizes, 1, MPI_INT
-                               ,0, new_comm2
-                               );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-
-                    for (i = 0; i < new_group_size2; i++)
+                    if (md->rank == 0)
                     {
-                        index_offsets [i] = total_size;
-                        total_size += index_sizes [i];
-                    }
+                        int * index_sizes = malloc (4 * new_group_size2);
+                        int * index_offsets = malloc (4 * new_group_size2);
+                        char * recv_buffer = 0;
+                        uint32_t size = 0, total_size = 0;
 
-                    recv_buffer = malloc (total_size);
+                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        MPI_Gather (&size, 1, MPI_INT
+                                   ,index_sizes, 1, MPI_INT
+                                   ,0, new_comm2
+                                   );
+                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    MPI_Gatherv (&size, 0, MPI_BYTE
-                                ,recv_buffer, index_sizes, index_offsets
-                                ,MPI_BYTE, 0, new_comm2
-                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        for (i = 0; i < new_group_size2; i++)
+                        {
+                            index_offsets [i] = total_size;
+                            total_size += index_sizes [i];
+                        }
 
-                    char * buffer_save = md->b.buff;
-                    uint64_t buffer_size_save = md->b.length;
-                    uint64_t offset_save = md->b.offset;
+                        recv_buffer = malloc (total_size);
 
-                    for (i = 1; i < new_group_size2; i++)
-                    {
-                        md->b.buff = recv_buffer + index_offsets [i];
-                        md->b.length = index_sizes [i];
-                        md->b.offset = 0;
+                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        MPI_Gatherv (&size, 0, MPI_BYTE
+                                    ,recv_buffer, index_sizes, index_offsets
+                                    ,MPI_BYTE, 0, new_comm2
+                                    );
+                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
-                        adios_parse_process_group_index_v1 (&md->b
-                                                           ,&new_pg_root
-                                                           );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
-                        adios_parse_attributes_index_v1 (&md->b
-                                                        ,&new_attrs_root
-                                                        );
+                        char * buffer_save = md->b.buff;
+                        uint64_t buffer_size_save = md->b.length;
+                        uint64_t offset_save = md->b.offset;
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
-                        new_pg_root = 0;
-                        new_vars_root = 0;
-                        new_attrs_root = 0;
-                    }
-
-                    md->b.buff = buffer_save;
-                    md->b.length = buffer_size_save;
-                    md->b.offset = offset_save;
+                        for (i = 1; i < new_group_size2; i++)
+                        {
+                            md->b.buff = recv_buffer + index_offsets [i];
+                            md->b.length = index_sizes [i];
+                            md->b.offset = 0;
 
-                    free (recv_buffer);
-                    free (index_sizes);
-                    free (index_offsets);
-                }
-                else
-                {
-                    char * buffer2 = 0;
-                    uint64_t buffer_size2 = 0;
-                    uint64_t buffer_offset2 = 0;
+                            adios_parse_process_group_index_v1 (&md->b
+                                                               ,&new_pg_root
+                                                               );
+                            adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
+                            adios_parse_attributes_index_v1 (&md->b
+                                                            ,&new_attrs_root
+                                                            );
 
-                    adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                            adios_merge_index_v1 (md->index, new_pg_root, 
+                                                  new_vars_root, new_attrs_root);
+                            new_pg_root = 0;
+                            new_vars_root = 0;
+                            new_attrs_root = 0;
+                        }
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    MPI_Gather (&buffer_size2, 1, MPI_INT
-                               ,0, 0, MPI_INT
-                               ,0, new_comm2
-                               );
-                    MPI_Gatherv (buffer2, buffer_size2, MPI_BYTE
-                                ,0, 0, 0, MPI_BYTE
-                                ,0, new_comm2
-                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        md->b.buff = buffer_save;
+                        md->b.length = buffer_size_save;
+                        md->b.offset = offset_save;
 
-                    if (buffer2)
+                        free (recv_buffer);
+                        free (index_sizes);
+                        free (index_offsets);
+                    }
+                    else
                     {
-                        free (buffer2);
-                        buffer2 = 0;
-                        buffer_size2 = 0;
-                        buffer_offset2 = 0;
+                        char * buffer2 = 0;
+                        uint64_t buffer_size2 = 0;
+                        uint64_t buffer_offset2 = 0;
+
+                        adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
+                                             ,0, md->index);
+ 
+                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        MPI_Gather (&buffer_size2, 1, MPI_INT
+                                   ,0, 0, MPI_INT
+                                   ,0, new_comm2
+                                   );
+                        MPI_Gatherv (buffer2, buffer_size2, MPI_BYTE
+                                    ,0, 0, 0, MPI_BYTE
+                                    ,0, new_comm2
+                                    );
+                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+
+                        if (buffer2)
+                        {
+                            free (buffer2);
+                            buffer2 = 0;
+                            buffer_size2 = 0;
+                            buffer_offset2 = 0;
+                        }
                     }
                 }
-            }
 
-            // write out the metadata file from rank 0
-            if (md->rank == 0)
-            {
-                MPI_File m_file;
-                char * global_index_buffer = 0;
-                uint64_t global_index_buffer_size = 0;
-                uint64_t global_index_buffer_offset = 0;
-                uint64_t global_index_start = 0;
-                uint16_t flag = 0;
-
-                adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
-                                     ,&global_index_buffer_offset, global_index_start
-                                     ,md->old_pg_root, md->old_vars_root, md->old_attrs_root
-                                     );
+                // write out the metadata file from rank 0
+                if (md->rank == 0)
+                {
+                    MPI_File m_file;
+                    char * global_index_buffer = 0;
+                    uint64_t global_index_buffer_size = 0;
+                    uint64_t global_index_buffer_offset = 0;
+                    uint64_t global_index_start = 0;
+                    uint16_t flag = 0;
+
+                    adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
+                                         ,&global_index_buffer_offset, global_index_start
+                                         ,md->index
+                                         );
 
-                flag |= ADIOS_VERSION_HAVE_SUBFILE;
+                    flag |= ADIOS_VERSION_HAVE_SUBFILE;
 
-                adios_write_version_flag_v1 (&global_index_buffer
-                                            ,&global_index_buffer_size
-                                            ,&global_index_buffer_offset
-                                            ,flag
-                                            );
+                    adios_write_version_flag_v1 (&global_index_buffer
+                                                ,&global_index_buffer_size
+                                                ,&global_index_buffer_offset
+                                                ,flag
+                                                );
 
-                START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                adios_mpi_amr_striping_unit_write(
-                                  md->mfh,
-                                  -1,
-                                  global_index_buffer,
-                                  global_index_buffer_offset
-                                  );
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
+                    START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
+                    adios_mpi_amr_striping_unit_write(
+                                      md->mfh,
+                                      -1,
+                                      global_index_buffer,
+                                      global_index_buffer_offset
+                                      );
+                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
 
-                if (global_index_buffer)
-                {
-                    free (global_index_buffer);
-                    global_index_buffer = 0;
-                    global_index_buffer_size = 0;
-                    global_index_buffer_offset = 0;
+                    if (global_index_buffer)
+                    {
+                        free (global_index_buffer);
+                        global_index_buffer = 0;
+                        global_index_buffer_size = 0;
+                        global_index_buffer_offset = 0;
+                    }
                 }
             }
 
@@ -2419,18 +2402,9 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             buffer_size = 0;
             buffer_offset = 0;
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
 
             md->g_num_aggregators = 0;
+            md->g_have_mdf = 1;
             md->g_color1 = 0;
             md->g_color2 = 0;
 
@@ -2462,6 +2436,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
 
+    adios_clear_index_v1 (md->index);
     return;
 }
 
@@ -2983,9 +2958,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
 
             if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
             {
@@ -2995,20 +2968,19 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     uint64_t var_base_offset = 0, attr_base_offset = 0;
 
                     // change to relative offset
-                    if (md->old_vars_root)
+                    if (md->index->vars_root)
                     {
-                        var_base_offset = md->old_vars_root->characteristics [0].offset;
+                        var_base_offset = md->index->vars_root->characteristics [0].offset;
                     }
 
-                    if (md->old_attrs_root)
+                    if (md->index->attrs_root)
                     {
-                        attr_base_offset = md->old_attrs_root->characteristics [0].offset;
+                        attr_base_offset = md->index->attrs_root->characteristics [0].offset;
                     }
 /*
                     adios_mpi_amr_subtract_offset (var_base_offset
                                                    ,var_base_offset
-                                                   ,md->old_vars_root
-                                                   ,md->old_attrs_root
+                                                   ,md->index
                                                    );
 */
 
@@ -3020,8 +2992,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     adios_mpi_amr_add_offset (var_offset_to_add
                                               ,attr_offset_to_add
-                                              ,md->old_vars_root
-                                              ,md->old_attrs_root
+                                              ,md->index
                                               );
                 }
 
@@ -3038,20 +3009,19 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     uint64_t var_base_offset = 0, attr_base_offset = 0; 
 
                     // change to relative offset
-                    if (md->old_vars_root)
+                    if (md->index->vars_root)
                     {
-                        var_base_offset = md->old_vars_root->characteristics [0].offset;
+                        var_base_offset = md->index->vars_root->characteristics [0].offset;
                     }
 
-                    if (md->old_attrs_root)
+                    if (md->index->attrs_root)
                     { 
-                        attr_base_offset = md->old_attrs_root->characteristics [0].offset;
+                        attr_base_offset = md->index->attrs_root->characteristics [0].offset;
                     }
 
                     adios_mpi_amr_subtract_offset (var_base_offset
                                                    ,attr_base_offset
-                                                   ,md->old_vars_root
-                                                   ,md->old_attrs_root
+                                                   ,md->index
                                                    );
 
                     for (i = 0; i < new_group_size; i++)
@@ -3067,8 +3037,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     adios_mpi_amr_add_offset (var_offset_to_add
                                               ,attr_offset_to_add
-                                              ,md->old_vars_root
-                                              ,md->old_attrs_root
+                                              ,md->index
                                               );
                 }
 
@@ -3125,19 +3094,15 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
                         if (md->g_merging_pgs)
                             new_pg_root = 0;
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -3154,10 +3119,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
@@ -3189,10 +3151,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 #endif
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
-                                     ,md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,md->index);
 //FIXME
                 //adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset, flag);
                 adios_write_version_flag_v1 (&buffer, &buffer_size, &buffer_offset, flag);
@@ -3286,17 +3245,13 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -3317,10 +3272,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     uint64_t buffer_offset2 = 0;
 
                     adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
                     START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size2, 1, MPI_INT
@@ -3355,7 +3307,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                 adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                      ,&global_index_buffer_offset, global_index_start
-                                     ,md->old_pg_root, md->old_vars_root, md->old_attrs_root
+                                     ,md->index
                                      );
 
                 flag |= ADIOS_VERSION_HAVE_SUBFILE;
@@ -3410,18 +3362,8 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             buffer_size = 0;
             buffer_offset = 0;
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
-
             md->g_num_aggregators = 0;
+            md->g_have_mdf = 1;
             md->g_color1 = 0;
             md->g_color2 = 0;
 
@@ -3459,6 +3401,8 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
     md->mfh = 0;
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
+
+    adios_clear_index_v1 (md->index);
 }
 
 void adios_mpi_amr_close (struct adios_file_struct * fd
@@ -3488,7 +3432,10 @@ void adios_mpi_amr_close (struct adios_file_struct * fd
 
 void adios_mpi_amr_finalize (int mype, struct adios_method_struct * method)
 {
-// nothing to do here
+    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
+                                                 method->method_data;
+    adios_free_index_v1 (md->index);
+
     if (adios_mpi_amr_initialized)
         adios_mpi_amr_initialized = 0;
 }
diff --git a/src/write/adios_mpi_amr.c b/src/write/adios_mpi_bgq.c
similarity index 53%
copy from src/write/adios_mpi_amr.c
copy to src/write/adios_mpi_bgq.c
index 7a95efd..efb07b3 100644
--- a/src/write/adios_mpi_amr.c
+++ b/src/write/adios_mpi_bgq.c
@@ -11,17 +11,16 @@
 #include <string.h>
 #include <errno.h>
 
-#include <pthread.h>
+#include <spi/include/kernel/location.h>
+#include <spi/include/kernel/process.h>
+#include <firmware/include/personality.h>
+
+// mpi
+#include "mpi.h"
 
 // xml parser
 #include <mxml.h>
 
-// add by Kimmy 10/15/2012
-#include <sys/types.h>
-#include <sys/stat.h>
-// end of change
-
-#include "public/adios_mpi.h"
 #include "public/adios_error.h"
 #include "core/adios_transport_hooks.h"
 #include "core/adios_bp_v1.h"
@@ -30,15 +29,16 @@
 #include "core/util.h"
 #include "core/adios_logger.h"
 
-
-enum ADIOS_MPI_AMR_IO_TYPE
+enum ADIOS_MPI_BGQ_IO_TYPE
 {
-    ADIOS_MPI_AMR_IO_NONE = 0,
-    ADIOS_MPI_AMR_IO_AG   = 1, // simple all to one aggregation
-    ADIOS_MPI_AMR_IO_BG   = 2, // Brigade aggregation
+    ADIOS_MPI_BGQ_IO_NONE   = 0,
+    ADIOS_MPI_BGQ_IO_AG     = 1, // simple all to one aggregation
+    ADIOS_MPI_BGQ_IO_BG     = 2, // Brigade aggregation
+    ADIOS_MPI_BGQ_IO_SIMPLE = 3, // simple write out multiple files and each group
+                                  // write out a shared file.
 };
 
-static int adios_mpi_amr_initialized = 0;
+static int adios_mpi_bgq_initialized = 0;
 
 #define is_aggregator(rank)  md->g_is_aggregator[rank]
 #define FREE(v) \
@@ -48,28 +48,9 @@ static int adios_mpi_amr_initialized = 0;
       v = 0;    \
   }             \
 
-#define SHIM_FOOTER_SIZE 4
-#define ATTR_COUNT_SIZE  2
-#define ATTR_LEN_SIZE    8
 #define MAX_AGG_BUF      704643072
-#define DEFAULT_NUM_OST  672
-#define DEFAULT_STRIPE_COUNT 1
-#define DEFAULT_STRIPE_SIZE  1024*1024
-
-
-
-#ifdef SKEL_TIMING
-#define START_TIMER(t) adios_timing_go (fd->timing_obj, (t) ) 
-#else
-#define START_TIMER(t) ; 
-#endif
-
-#ifdef SKEL_TIMING
-#define STOP_TIMER(t) adios_timing_stop (fd->timing_obj, (t) )
-#else
-#define STOP_TIMER(t) ;
-#endif
-
+// BLOCK_UNIT is set 8 MiB
+#define BLOCK_UNIT       8000000
 
 struct adios_MPI_data_struct
 {
@@ -81,31 +62,24 @@ struct adios_MPI_data_struct
     MPI_Comm group_comm;
     int rank;
     int size;
+    MPI_Comm file_comm;
+    int file_comm_rank;
+    int file_comm_size;
 
     struct adios_bp_buffer_struct_v1 b;
-
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
-
+    struct adios_index_struct_v1 * index;
     uint64_t vars_start;
     uint64_t vars_header_size;
 
-    uint64_t striping_unit;  // file system stripe size
-
     int * g_is_aggregator;
     int g_num_aggregators;
-    int g_merging_pgs;
-    int g_num_ost;
-    int g_threading;
-    int g_color1;
     int g_color2;
+    int partition_id;
+    int n_partitions;
     MPI_Offset * g_offsets;
-    int * g_ost_skipping_list;
-    pthread_t g_sot;
-    pthread_t g_swt; // subfile open thread, metadata file open thread, subfile write thread
     struct adios_MPI_thread_data_open * open_thread_data;
-    enum ADIOS_MPI_AMR_IO_TYPE g_io_type;
+    enum ADIOS_MPI_BGQ_IO_TYPE g_io_type;
+    int g_have_mdf;
 };
 
 struct adios_MPI_thread_data_open
@@ -129,40 +103,6 @@ struct adios_MPI_thread_data_write
 #       include <sys/statfs.h>
 #endif
 
-// this should be determined at configure time
-//#define ADIOS_LUSTRE
-
-//#ifdef ADIOS_LUSTRE
-#include <sys/ioctl.h>
-//#include <lustre/lustre_user.h>
-//#endif
-// from /usr/include/lustre/lustre_user.h
-#define LUSTRE_SUPER_MAGIC 0x0BD00BD0
-#  define LOV_USER_MAGIC 0x0BD10BD0
-#  define LL_IOC_LOV_SETSTRIPE  _IOW ('f', 154, long)
-#  define LL_IOC_LOV_GETSTRIPE  _IOW ('f', 155, long)
-#define O_LOV_DELAY_CREATE 0100000000
-
-struct lov_user_ost_data {           // per-stripe data structure
-        uint64_t l_object_id;        // OST object ID
-        uint64_t l_object_gr;        // OST object group (creating MDS number)
-        uint32_t l_ost_gen;          // generation of this OST index
-        uint32_t l_ost_idx;          // OST index in LOV
-} __attribute__((packed));
-struct lov_user_md {                 // LOV EA user data (host-endian)
-        uint32_t lmm_magic;          // magic number = LOV_USER_MAGIC_V1
-        uint32_t lmm_pattern;        // LOV_PATTERN_RAID0, LOV_PATTERN_RAID1
-        uint64_t lmm_object_id;      // LOV object ID
-        uint64_t lmm_object_gr;      // LOV object group
-        uint32_t lmm_stripe_size;    // size of stripe in bytes
-        uint16_t lmm_stripe_count;   // num stripes in use for this object
-        uint16_t lmm_stripe_offset;  // starting stripe offset in lmm_objects
-        struct lov_user_ost_data  lmm_objects[0]; // per-stripe data
-} __attribute__((packed));
-struct obd_uuid {
-        char uuid[40];
-};
-
 static void trim_spaces (char * str)
 {
     char * t = str, * p = NULL;
@@ -179,180 +119,29 @@ static void trim_spaces (char * str)
 
 }
 
-int * allocOSTList (int n_ost)
-{
-    int * ost_list = (int *) malloc (n_ost * sizeof (int));
-
-    if (ost_list == 0)
-    {   
-        adios_error (err_no_memory, 
-                "Can not malloc %d bytes in allocOSTList() in MPI_AMR method\n",
-                n_ost*sizeof(int));
-        return 0;
-    }
-    memset (ost_list, 0, n_ost * sizeof (int));
-
-    return ost_list;
-}
-
-/* Parse the XML transport parameter to get the list of OST's to skip */
-int * parseOSTSkipping (int * ost_list, char * str, int n_ost)
-{
-    char * p = 0, * dash = 0;
-    char n[16];
-    int ost_id1, ost_id2, i;
-
-    if (ost_list == 0)
-    {
-        log_warn ("MPI_AMR method: Pointer ost_list is null.\n");
-        return 0;
-    }
-
-    p = strtok (str, ",");
-    while (p)
-    {
-        dash = strchr (p, '-');
-        if (!dash)
-        {
-            ost_id1 = atoi (p);
-            ost_id2 = ost_id1;
-        }
-        else
-        {
-            strncpy (n, p, dash - p);
-            n[dash - p] = '\0';
-            ost_id1 = atoi (n);
-  
-            strncpy (n, dash + 1, strlen (dash + 1));
-            n[strlen (dash + 1)] = '\0';
-            ost_id2 = atoi (n);
-        }
-
-        for (i = ost_id1; i <= ost_id2; i++)
-        {
-            ost_list[i] = 1;
-        }
-          
-        p = strtok (NULL, ",");
-    }
-
-    return ost_list;
-}
-
-static void
-//adios_mpi_amr_set_striping_unit(MPI_File fh, char *filename, char *parameters)
-adios_mpi_amr_set_striping_unit(struct adios_MPI_data_struct * md, char *parameters)
+void adios_mpi_bgq_add_offset (uint64_t var_offset_to_add
+                              ,uint64_t attr_offset_to_add
+                              ,struct adios_index_var_struct_v1 * vars_root
+                              ,struct adios_index_attribute_struct_v1 * attrs_root
+                              )
 {
-    MPI_File fh = md->fh;
-    char * filename = md->subfile_name;
-    struct statfs fsbuf;
-    int err = 0, flag;
-    uint64_t striping_unit = 0;
-    uint16_t striping_count = 0;
-    char     value[64], *temp_string, *p_count,*p_size;
-    int fd, old_mask, perm, n_ost_skipping, n_ost, n, i;
-    MPI_Info info_used;
-
-    temp_string = (char *) malloc (strlen (parameters) + 1);
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    if (p_count = strstr (temp_string, "stripe_count"))
-    {
-        char * p = strchr (p_count, '=');
-        char * q = strtok (p, ";");
-        if (!q)
-            striping_count = atoi (q + 1);
-        else
-            striping_count = atoi (p + 1);
-    }
-    else
+    while (vars_root)
     {
-        // By default, set stripe count to 1 to maximize concurrency.
-        striping_count = DEFAULT_STRIPE_COUNT;
+        vars_root->characteristics [0].offset += var_offset_to_add;
+        vars_root->characteristics [0].payload_offset += var_offset_to_add;
+        vars_root = vars_root->next;
     }
 
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    if (p_size = strstr (temp_string, "stripe_size"))
-    {
-        char * p = strchr (p_size, '=');
-        char * q = strtok (p, ";");
-        if (!q)
-            striping_unit = atoi(q + 1);
-        else
-            striping_unit = atoi(p + 1);
-    }
-    else
+    while (attrs_root)
     {
-        //stripe size shouldn't matter here. Simply set it to 1 MB here. 
-        striping_unit = DEFAULT_STRIPE_SIZE;
-    }
-
-    free (temp_string);
-
-    old_mask = umask(022);
-    umask(old_mask);
-    perm = old_mask ^ 0666;
-
-    fd =  open(filename, O_RDONLY | O_CREAT | O_LOV_DELAY_CREATE, perm);
-    if (fd != -1) {
-        struct lov_user_md lum;
-        lum.lmm_magic = LOV_USER_MAGIC;
-        lum.lmm_pattern = 0;
-        lum.lmm_stripe_size = striping_unit;
-        lum.lmm_stripe_count = striping_count;
-
-        // calculate the # of ost's to skip
-        n_ost_skipping = 0;
-        for (i = 0; i < md->g_num_ost; i++)
-        {
-            if (md->g_ost_skipping_list[i] == 1)
-            {
-                n_ost_skipping++;
-            }
-        }
-
-        // the actual # of ost that can be used
-        n_ost = md->g_num_ost - n_ost_skipping;
-        if (n_ost <= 0)
-        {
-            log_warn ("MPI_AMR method: No OST to use. Set num_ost=NNN in the adios config xml file.\n");
-            return;
-        }
-
-        i = 0;
-        n = 0;
-        while (i < md->g_num_ost)
-        {
-            if (md->g_ost_skipping_list[i] == 0)
-            {
-                n++;
-                if (n - 1 == md->g_color1 % n_ost)
-                    break;
-            }
-            
-            i++;
-        }
-
-        lum.lmm_stripe_offset = i;
-        ioctl (fd, LL_IOC_LOV_SETSTRIPE
-              ,(void *) &lum
-              );
-
-        if (err == 0 && lum.lmm_stripe_size > 0) {
-            striping_unit = lum.lmm_stripe_size;
-        }
-
-        close(fd);
+        attrs_root->characteristics [0].offset += attr_offset_to_add;
+        attrs_root->characteristics [0].payload_offset += attr_offset_to_add;
+        attrs_root = attrs_root->next;
     }
-    else
-        log_warn("MPI_AMR method: open to set lustre striping failed on file %s %s.\n",filename,strerror(errno));
 }
 
 static void
-adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_data_struct * md)
+adios_mpi_bgq_set_aggregation_parameters(char * parameters, struct adios_MPI_data_struct * md)
 {
     int err = 0, flag, i, aggr_group_size, remain, index;
     int nproc = md->size, rank = md->rank;
@@ -360,117 +149,49 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
 
     temp_string = (char *) malloc (strlen (parameters) + 1);
 
-    // set up the number of OST to use
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    if (p_size = strstr (temp_string, "num_ost"))
-    {
-        char * p = strchr (p_size, '=');
-        char * q = strtok (p, ";");
-        if (!q)
-            md->g_num_ost = atoi(q + 1);
-        else
-            md->g_num_ost = atoi(p + 1);
-    }
-    else
-    {
-    }
-
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    // set up # of aggregators
-    if (p_size = strstr (temp_string, "num_aggregators"))
+    if (p_size = strstr (temp_string, "aggregation_type"))
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
-        if (!q)
-            md->g_num_aggregators = atoi(q + 1);
-        else
-            md->g_num_aggregators = atoi(p + 1);
-    }
-    else
-    {
-        if (nproc <= md->g_num_ost)
-        {
-            md->g_num_aggregators = nproc;
-        }
-        else
-        {
-            md->g_num_aggregators = md->g_num_ost;
-        }
-    }
 
-    // set up whether to thread IO ops
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    if (p_size = strstr (temp_string, "threading"))
-    {
-        char * p = strchr (p_size, '=');
-        char * q = strtok (p, ";");
         if (!q)
-            md->g_threading = atoi(q + 1);
+            md->g_io_type = atoi (q + 1);
         else
-            md->g_threading = atoi(p + 1);
+            md->g_io_type = atoi (p + 1);
     }
     else
     {
-        // by default, threading is disabled.
-        md->g_threading = 0;
-    }
-
-    // set up which ost's to skip
-    strcpy (temp_string, parameters);
-    trim_spaces (temp_string);
-
-    md->g_ost_skipping_list = allocOSTList (md->g_num_ost);
-
-    if (p_size = strstr (temp_string, "osts_to_skip"))
-    {
-        char * p = strchr (p_size, '=');
-        char * q = strtok (p, ";");
-
-        if (!q)
-            md->g_ost_skipping_list = parseOSTSkipping (md->g_ost_skipping_list, q + 1, md->g_num_ost);
-        else
-            md->g_ost_skipping_list = parseOSTSkipping (md->g_ost_skipping_list, p + 1, md->g_num_ost);
+        // by default, use BG. Currently only simple type
+        // is supported. Q. Liu, 11-29-2013.
+        md->g_io_type = ADIOS_MPI_BGQ_IO_SIMPLE;
     }
 
-    // set up which ost's to skip
     strcpy (temp_string, parameters);
     trim_spaces (temp_string);
 
-    if (p_size = strstr (temp_string, "aggregation_type"))
+    if (p_size = strstr (temp_string, "have_metadata_file"))
     {
         char * p = strchr (p_size, '=');
         char * q = strtok (p, ";");
 
         if (!q)
-            md->g_io_type = atoi (q + 1);
+            md->g_have_mdf = atoi (q + 1);
         else
-            md->g_io_type = atoi (p + 1);
+            md->g_have_mdf = atoi (p + 1);
     }
     else
     {
-        // by default, use BG
-        md->g_io_type = ADIOS_MPI_AMR_IO_BG;
+        // by default, write metadata file. 
+        md->g_have_mdf = 1;
     }
 
     free (temp_string);
-
-    if (md->g_num_aggregators > nproc || md->g_num_aggregators <= 0)
-    {
-        md->g_num_aggregators = nproc;  //no aggregation
-    }
-
+/*
     md->g_is_aggregator = (int *) malloc (nproc * sizeof(int));
-    if (md->g_is_aggregator == 0)
-    {
-        adios_error (err_no_memory, "Can not malloc %d bytes in MPI_AMR method, adios_mpi_amr_set_aggregation_parameters()\n", nproc*sizeof(int));
-        return;
-    }
+    assert (md->g_is_aggregator);
     memset (md->g_is_aggregator, 0, nproc * sizeof(int));
 
     aggr_group_size = nproc / md->g_num_aggregators;
@@ -490,10 +211,10 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
             index += aggr_group_size;
         }
     }
-
+*/
+/*
     if (remain == 0)
     {
-        md->g_color1 = rank / aggr_group_size;
         md->g_color2 = rank % aggr_group_size;
     }
     else
@@ -509,9 +230,10 @@ adios_mpi_amr_set_aggregation_parameters(char * parameters, struct adios_MPI_dat
             md->g_color2 = (rank - (aggr_group_size + 1) * remain)% aggr_group_size;
         }
     }
+*/
 }
 
-static void adios_mpi_amr_buffer_write (char ** buffer, uint64_t * buffer_size
+static void adios_mpi_bgq_buffer_write (char ** buffer, uint64_t * buffer_size
                                        ,uint64_t * buffer_offset
                                        ,const void * data, uint64_t size
                                        )
@@ -526,7 +248,7 @@ static void adios_mpi_amr_buffer_write (char ** buffer, uint64_t * buffer_size
         }
         else
         {
-            adios_error (err_no_memory, "Cannot allocate memory in adios_mpi_amr_buffer_write.  "
+            adios_error (err_no_memory, "Cannot allocate memory in adios_mpi_bgq_buffer_write.  "
                              "Requested: %llu\n", *buffer_offset + size + 1000);
 
             return;
@@ -538,7 +260,7 @@ static void adios_mpi_amr_buffer_write (char ** buffer, uint64_t * buffer_size
 }
 
 static int
-adios_mpi_amr_get_striping_unit(MPI_File fh, char *filename)
+adios_mpi_bgq_get_striping_unit(MPI_File fh, char *filename)
 {
     struct statfs fsbuf;
     int err, flag;
@@ -556,37 +278,16 @@ adios_mpi_amr_get_striping_unit(MPI_File fh, char *filename)
     // if striping_unit is not set in MPI file info, get it from system
     err = statfs(filename, &fsbuf);
     if (err == -1) {
-        printf("Warning: statfs failed %s %s.\n",filename,strerror(errno));
+        log_warn ("Warning: statfs failed %s %s.\n",filename,strerror(errno));
         return striping_unit;
     }
 
-    if (!err && fsbuf.f_type == LUSTRE_SUPER_MAGIC) {
-        int fd, old_mask, perm;
-
-        old_mask = umask(022);
-        umask(old_mask);
-        perm = old_mask ^ 0666;
-
-        fd =  open(filename, O_RDONLY, perm);
-        if (fd != -1) {
-            struct lov_user_md lum;
-            lum.lmm_magic = LOV_USER_MAGIC;
-            err = ioctl(fd, LL_IOC_LOV_GETSTRIPE, (void *) &lum);
-            if (err == 0 && lum.lmm_stripe_size > 0) {
-                striping_unit = lum.lmm_stripe_size;
-            }
-            close(fd);
-        }
-        else
-            printf("Warning: open failed on file %s %s.\n",filename,strerror(errno));
-    }
-
     // set the file striping size
     return striping_unit;
 }
 
 static uint64_t
-adios_mpi_amr_striping_unit_write(MPI_File   fh
+adios_mpi_bgq_striping_unit_write(MPI_File   fh
                                  ,MPI_Offset offset
                                  ,void       *buf
                                  ,uint64_t   len
@@ -601,7 +302,10 @@ adios_mpi_amr_striping_unit_write(MPI_File   fh
     char * buf_ptr = buf;
 
     if (len == 0)
+    {
+        log_debug ("shouldn't be here\n");
         return 0;
+    }
 
     if (offset == -1) // use current position
         MPI_File_get_position(fh, &offset);
@@ -627,14 +331,14 @@ adios_mpi_amr_striping_unit_write(MPI_File   fh
     return err;
 }
 
-struct adios_var_struct * adios_mpi_amr_copy_var (struct adios_var_struct * v)
+struct adios_var_struct * adios_mpi_bgq_copy_var (struct adios_var_struct * v)
 {
     struct adios_var_struct * v_new = (struct adios_var_struct *) 
                             malloc (sizeof (struct adios_var_struct));
     if (v_new == 0)
     {
-        adios_error (err_no_memory, "MPI_AMR method: Cannot allocate %d bytes "
-            "to duplicate variable structure in adios_mpi_amr_copy_var()\n",
+        adios_error (err_no_memory, "MPI_BGQ method: Cannot allocate %d bytes "
+            "to duplicate variable structure in adios_mpi_bgq_copy_var()\n",
             sizeof (struct adios_var_struct));
         return 0;
     }
@@ -656,7 +360,7 @@ struct adios_var_struct * adios_mpi_amr_copy_var (struct adios_var_struct * v)
     return v_new;
 }
 
-void adios_mpi_amr_append_var (struct adios_file_struct * fd, struct adios_var_struct * v)
+void adios_mpi_bgq_append_var (struct adios_file_struct * fd, struct adios_var_struct * v)
 {
     struct adios_var_struct * root = fd->group->vars;
     if (!root)
@@ -673,50 +377,7 @@ void adios_mpi_amr_append_var (struct adios_file_struct * fd, struct adios_var_s
     root->next = v;
 }
 
-void adios_mpi_amr_add_offset (uint64_t var_offset_to_add
-                              ,uint64_t attr_offset_to_add
-                              ,struct adios_index_var_struct_v1 * vars_root
-                              ,struct adios_index_attribute_struct_v1 * attrs_root
-                              )
-{
-    while (vars_root)
-    {
-        vars_root->characteristics [0].offset += var_offset_to_add;
-        vars_root->characteristics [0].payload_offset += var_offset_to_add;
-        vars_root = vars_root->next;
-    }
-
-    while (attrs_root)
-    {
-        attrs_root->characteristics [0].offset += attr_offset_to_add;
-        attrs_root->characteristics [0].payload_offset += attr_offset_to_add;
-        attrs_root = attrs_root->next;
-    }
-}
-
-void adios_mpi_amr_subtract_offset (uint64_t var_offset_to_subtract
-                                    ,uint64_t attr_offset_to_subtract
-                                    ,struct adios_index_var_struct_v1 * vars_root
-                                    ,struct adios_index_attribute_struct_v1 * attrs_root
-                                    )
-{
-    while (vars_root)
-    {
-        vars_root->characteristics [0].offset -= var_offset_to_subtract;
-        vars_root->characteristics [0].payload_offset -= var_offset_to_subtract;
-        vars_root = vars_root->next;
-    }
-
-    while (attrs_root)
-    {
-        attrs_root->characteristics [0].offset -= attr_offset_to_subtract;
-        attrs_root->characteristics [0].payload_offset -= attr_offset_to_subtract;
-        attrs_root = attrs_root->next;
-    }
-}
-
-
-void adios_mpi_amr_build_global_index_v1 (char * fname
+void adios_mpi_bgq_build_global_index_v1 (char * fname
                                           ,struct adios_index_process_group_struct_v1 * pg_root
                                           ,struct adios_index_var_struct_v1 * vars_root
                                           ,struct adios_index_attribute_struct_v1 * attrs_root
@@ -753,7 +414,7 @@ void adios_mpi_amr_build_global_index_v1 (char * fname
 }
 
 
-void * adios_mpi_amr_do_mkdir (void * param)
+void * adios_mpi_bgq_do_mkdir (void * param)
 {
     struct adios_file_struct * fd = (struct adios_file_struct *) param;
     // 4 bytes for ".dir" 
@@ -767,40 +428,39 @@ void * adios_mpi_amr_do_mkdir (void * param)
     return NULL;
 }
 
-void * adios_mpi_amr_do_open_thread (void * param)
+void * adios_mpi_bgq_do_open_thread (void * param)
 {
     struct adios_MPI_thread_data_open * td = (struct adios_MPI_thread_data_open *) param;
+    int ret;
 
-    unlink (td->md->subfile_name);
-    if (td->parameters)
+    if (td->md->file_comm_rank == 0)
     {
-/*
-        adios_mpi_amr_set_striping_unit (*td->fh
-                                        ,td->name
-                                        ,td->parameters
-                                        );
-*/
-        adios_mpi_amr_set_striping_unit (td->md, td->parameters);
+        ret = MPI_File_open (MPI_COMM_SELF, td->md->subfile_name
+                            ,MPI_MODE_WRONLY | MPI_MODE_CREATE
+                            ,MPI_INFO_NULL
+                            ,&td->md->fh
+                            );
 
+        assert (ret == MPI_SUCCESS);
+        MPI_File_close (&td->md->fh);  
     }
 
-    MPI_File_open (MPI_COMM_SELF, td->md->subfile_name
-                  ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                  ,MPI_INFO_NULL
-                  ,&td->md->fh
-                  );
+    MPI_Barrier (td->md->file_comm);
 
-    td->md->striping_unit = adios_mpi_amr_get_striping_unit (td->md->fh, td->md->subfile_name);
- 
+    ret = MPI_File_open (td->md->file_comm, td->md->subfile_name
+                        ,MPI_MODE_WRONLY
+                        ,MPI_INFO_NULL
+                        ,&td->md->fh
+                        );
     return NULL;
 }
 
 
-void * adios_mpi_amr_do_write_thread (void * param)
+void * adios_mpi_bgq_do_write_thread (void * param)
 {
     struct adios_MPI_thread_data_write * td = (struct adios_MPI_thread_data_write *) param;
 
-    uint64_t count = adios_mpi_amr_striping_unit_write(
+    uint64_t count = adios_mpi_bgq_striping_unit_write(
                                *(td->fh)
                               ,*(td->base_offset)
                               ,td->aggr_buff
@@ -809,72 +469,145 @@ void * adios_mpi_amr_do_write_thread (void * param)
 
     if (count != *(td->total_data_size))
     {
-        adios_error (err_unspecified, "Error in adios_mpi_amr_striping_unit_write(). "
+        adios_error (err_unspecified, "Error in adios_mpi_bgq_striping_unit_write(). "
             "count = %llu != thread's total_data_size = %llu\n",
-            count, td->total_data_size);
+            count, *(td->total_data_size));
     }
 
     return NULL;
 }
 
-void adios_mpi_amr_init (const PairStruct * parameters
-                         ,struct adios_method_struct * method
-                         )
+static void adios_var_to_comm (const char * comm_name
+                              ,enum ADIOS_FLAG host_language_fortran
+                              ,void * data
+                              ,MPI_Comm * comm
+                              )
 {
-    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
-                                                    method->method_data;
-    if (!adios_mpi_amr_initialized)
+    if (data)
     {
-        adios_mpi_amr_initialized = 1;
-    }
-
-    method->method_data = malloc (sizeof (struct adios_MPI_data_struct));
-    md = (struct adios_MPI_data_struct *) method->method_data;
-    md->fh = 0;
-    md->mfh = 0;
-    md->subfile_name = 0;
-    md->req = 0;
-    memset (&md->status, 0, sizeof (MPI_Status));
-    md->rank = 0;
-    md->size = 0;
-    md->group_comm = method->init_comm; //unused, adios_open sets current comm
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
-    md->vars_start = 0;
-    md->vars_header_size = 0;
-
-    md->g_is_aggregator = 0;
-    md->g_num_aggregators = 0;
-    md->g_merging_pgs = 0;
-    md->g_num_ost = 0;
-    md->g_threading = 0;
-    md->g_color1 = 0;
-    md->g_color2 = 0;
-    md->g_offsets = 0;
-    md->g_ost_skipping_list = 0;
-    md->open_thread_data = 0;
-    md->g_io_type = ADIOS_MPI_AMR_IO_BG;
-
-    adios_buffer_struct_init (&md->b);
-}
-
+        int t = *(int *) data;
 
+        if (!comm_name)
+        {
+            if (!t)
+            {
+                log_warn ("MPI_BGQ method: Communicator not provided and none "
+                        "listed in XML.  Defaulting to MPI_COMM_SELF\n");
 
-#ifdef SKEL_TIMING
-// Indices for the timer object
-int ADIOS_TIMER_MPI_AMR_COMM = ADIOS_TIMING_MAX_USER_TIMERS + 0;
-int ADIOS_TIMER_MPI_AMR_IO = ADIOS_TIMING_MAX_USER_TIMERS + 1;
-int ADIOS_TIMER_MPI_AMR_MD = ADIOS_TIMING_MAX_USER_TIMERS + 2;
-int ADIOS_TIMER_MPI_AMR_AD_WRITE = ADIOS_TIMING_MAX_USER_TIMERS + 3;
-int ADIOS_TIMER_MPI_AMR_AD_CLOSE = ADIOS_TIMING_MAX_USER_TIMERS + 4;
-int ADIOS_TIMER_MPI_AMR_AD_SHOULD_BUFFER = ADIOS_TIMING_MAX_USER_TIMERS + 5;
-#endif
-
+                *comm = MPI_COMM_SELF;
+            }
+            else
+            {
+                if (host_language_fortran == adios_flag_yes)
+                {
+                    *comm = MPI_Comm_f2c (t);
+                }
+                else
+                {
+                    *comm = *(MPI_Comm *) data;
+                }
+            }
+        }
+        else
+        {
+            if (!strcmp (comm_name, ""))
+            {
+                if (!t)
+                {
+                    log_warn ("MPI_BGQ method: Communicator not provided and none "
+                            "listed in XML.  Defaulting to MPI_COMM_SELF\n");
 
-int adios_mpi_amr_open (struct adios_file_struct * fd
-                        ,struct adios_method_struct * method, MPI_Comm comm
-                        )
+                    *comm = MPI_COMM_SELF;
+                }
+                else
+                {
+                    if (host_language_fortran == adios_flag_yes)
+                    {
+                        *comm = MPI_Comm_f2c (t);
+                    }
+                    else
+                    {
+                        *comm = *(MPI_Comm *) data;
+                    }
+                }
+            }
+            else
+            {
+                if (!t)
+                {
+                    log_warn ("MPI_BGQ method: Communicator not provided but one is "
+                            "listed in XML.  Defaulting to MPI_COMM_WORLD\n");
+
+                    *comm = MPI_COMM_WORLD;
+                }
+                else
+                {
+                    if (host_language_fortran == adios_flag_yes)
+                    {
+                        *comm = MPI_Comm_f2c (t);
+                    }
+                    else
+                    {
+                        *comm = *(MPI_Comm *) data;
+                    }
+                }
+            }
+        }
+    }
+    else
+    {
+        log_warn ("MPI_BGQ method: Coordination-communication not provided. "
+                  "Using MPI_COMM_WORLD instead\n"
+                 );
+
+        *comm = MPI_COMM_WORLD;
+    }
+}
+
+void adios_mpi_bgq_init (const PairStruct * parameters
+                         ,struct adios_method_struct * method
+                         )
+{
+    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
+                                                    method->method_data;
+    if (!adios_mpi_bgq_initialized)
+    {
+        adios_mpi_bgq_initialized = 1;
+    }
+
+    method->method_data = malloc (sizeof (struct adios_MPI_data_struct));
+    md = (struct adios_MPI_data_struct *) method->method_data;
+    md->fh = 0;
+    md->mfh = 0;
+    md->subfile_name = 0;
+    md->req = 0;
+    memset (&md->status, 0, sizeof (MPI_Status));
+    md->group_comm = MPI_COMM_NULL;
+    md->rank = 0;
+    md->size = 0;
+    md->file_comm = MPI_COMM_NULL;
+    md->file_comm_rank = 0;
+    md->file_comm_size = 0;
+    md->index = adios_alloc_index_v1(1); // with hashtables;
+    md->vars_start = 0;
+    md->vars_header_size = 0;
+
+    md->g_is_aggregator = 0;
+    md->g_num_aggregators = 0;
+    md->g_color2 = 0;
+    md->partition_id = 0;
+    md->n_partitions = 0;
+    md->g_offsets = 0;
+    md->open_thread_data = 0;
+    md->g_io_type = ADIOS_MPI_BGQ_IO_BG;
+    md->g_have_mdf = 1;
+
+    adios_buffer_struct_init (&md->b);
+}
+
+int adios_mpi_bgq_open (struct adios_file_struct * fd
+                       ,struct adios_method_struct * method, MPI_Comm comm
+                       )
 {
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                     method->method_data;
@@ -886,21 +619,61 @@ int adios_mpi_amr_open (struct adios_file_struct * fd
         MPI_Comm_size (md->group_comm, &md->size);
     }
 
-    fd->group->process_id = md->rank;
-#ifdef SKEL_TIMING
-    int timer_count = 6;
-    char ** timer_names = (char**) malloc (timer_count * sizeof (char*) );
-    timer_names [0] = "Communication";
-    timer_names [1] = "I/O"; 
-    timer_names [2] = "Metadata";
-    timer_names [3] = "ad_write"; 
-    timer_names [4] = "ad_close";
-    timer_names [5] = "ad_should_buffer";
-
-    fd->timing_obj = adios_timing_create (timer_count, timer_names);
-#endif
-
+    // The following code is BGQ specific
+#define UNIT_A 2
+#define UNIT_B 2
+#define UNIT_C 4
+#define UNIT_D 4
+#define UNIT_E 2
+    Personality_t pers;
+    int Anodes, Bnodes, Cnodes, Dnodes, Enodes;
+    int Acoord, Bcoord, Ccoord, Dcoord, Ecoord;
+    int A_color, B_color, C_color, D_color, E_color;
+    int A_blocks, B_blocks, C_blocks, D_blocks, E_blocks;
+    int color;
+
+    Kernel_GetPersonality(&pers, sizeof(pers));
+
+    Anodes = pers.Network_Config.Anodes;
+    Acoord = pers.Network_Config.Acoord;
+    Bnodes = pers.Network_Config.Bnodes;
+    Bcoord = pers.Network_Config.Bcoord;
+    Cnodes = pers.Network_Config.Cnodes;
+    Ccoord = pers.Network_Config.Ccoord;
+    Dnodes = pers.Network_Config.Dnodes;
+    Dcoord = pers.Network_Config.Dcoord;
+    Enodes = pers.Network_Config.Enodes;
+    Ecoord = pers.Network_Config.Ecoord;
+
+    A_color  = Acoord / UNIT_A;
+    B_color  = Bcoord / UNIT_B;
+    C_color  = Ccoord / UNIT_C;
+    D_color  = Dcoord / UNIT_D;
+    E_color  = Ecoord / UNIT_E;
+
+    // Number of blocks
+    A_blocks = Anodes / UNIT_A;
+    B_blocks = Bnodes / UNIT_B;
+    C_blocks = Cnodes / UNIT_C;
+    D_blocks = Dnodes / UNIT_D;
+    E_blocks = Enodes / UNIT_E;
+
+    color = (A_color * (B_blocks * C_blocks * D_blocks * E_blocks))
+            + (B_color * (C_blocks * D_blocks * E_blocks))
+            + (C_color * ( D_blocks * E_blocks))
+            + (D_color * ( E_blocks))
+            + E_color;
+
+    md->partition_id = color;
+    md->n_partitions = A_blocks * B_blocks * C_blocks * D_blocks * E_blocks;
+
+    log_debug ("color = %d, n_partitions = %d, (%d,%d,%d,%d,%d)\n", 
+               color, md->n_partitions, A_blocks, B_blocks, C_blocks, D_blocks, E_blocks);
+    MPI_Comm_split (md->group_comm, color, md->rank, &md->file_comm);
+    MPI_Comm_rank (md->file_comm, &md->file_comm_rank);
+    MPI_Comm_size (md->file_comm, &md->file_comm_size);
 
+    fd->group->process_id = md->rank;
     // we have to wait for the group_size (should_buffer)
     // to calculate stripe sizes from output sizes of the processes
     // before we can do an open for any of the modes
@@ -938,7 +711,7 @@ void build_offsets (struct adios_bp_buffer_struct_v1 * b
     }
 }
 
-enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
+enum ADIOS_FLAG adios_mpi_bgq_should_buffer (struct adios_file_struct * fd
                                             ,struct adios_method_struct * method
                                             )
 {
@@ -949,85 +722,52 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
     char * d_name;
     int err;
     int sig;    // used for coordinating the MPI_File_open
-
-    int previous;
-    int current;
-    int next;
     uint16_t flag;
 
-    START_TIMER (ADIOS_TIMER_MPI_AMR_AD_SHOULD_BUFFER);
-
     name = malloc (strlen (method->base_path) + strlen (fd->name) + 1);
     sprintf (name, "%s%s", method->base_path, fd->name);
 
-    if (md->rank == md->size - 1)
-        next = -1;
-    else
-        next = md->rank + 1;
-    previous = md->rank - 1;
-    current = md->rank;
-
     fd->base_offset = 0;
 
     switch (fd->mode)
     {
+        case adios_mode_append:
         case adios_mode_read:
         {
-            adios_error (err_invalid_file_mode, "MPI_AMR method: Read mode is not supported.\n");
+            adios_error (err_invalid_file_mode, "MPI_BGQ method: specified mode is not supported.\n");
             break;
         }
 
         case adios_mode_write:
         {
-            if (md->rank == 0)
+            if (fd->shared_buffer == adios_flag_no)
             {
-                struct lov_user_md lum;
-                struct obd_uuid uuids[1024], * uuidp;
-                int f, rc;
+                adios_error (err_no_memory, "MPI_BGQ method: ADIOS buffer needs to be enlarged! "
+                                             "Currently don't support un-buffered writes.\n");
+                exit (1);
+                break;
+            }
 
+            adios_mpi_bgq_set_aggregation_parameters (method->parameters, md);
+
+            if (md->partition_id == 0 && md->file_comm_rank == 0)
+            {
                 // open metadata file
                 unlink (fd->name);
 
-                f = open(fd->name, O_CREAT | O_RDWR | O_LOV_DELAY_CREATE, 0644);
-                if (f == -1)
-                {
-                    adios_error (err_file_open_error,"MPI_AMR method: open() failed: %s\n", strerror(errno));
-                    return -1;
-                }
-
-                lum.lmm_magic = LOV_USER_MAGIC;
-                lum.lmm_pattern = 0;
-                lum.lmm_stripe_size = DEFAULT_STRIPE_SIZE;
-                lum.lmm_stripe_count = 1;
-                lum.lmm_stripe_offset = -1;
-
-                ioctl (f, LL_IOC_LOV_SETSTRIPE ,(void *) &lum);
-#ifdef HAVE_LUSTRE
-
-                md->g_num_ost = 1024;
-                rc = llapi_lov_get_uuids(f, uuids, &md->g_num_ost);
-                if (rc != 0)
+                if (md->g_have_mdf)
                 {
-                    log_warn ("MPI_AMR method: Lustre get uuids failed after creating the file: %s\n" ,strerror(errno));
+                    MPI_File_open (MPI_COMM_SELF, fd->name
+                                  ,MPI_MODE_WRONLY | MPI_MODE_CREATE
+                                  ,MPI_INFO_NULL
+                                  ,&md->mfh
+                                  );
                 }
 
-#endif 
-                close (f);
-
-                MPI_File_open (MPI_COMM_SELF, fd->name
-                              ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                              ,MPI_INFO_NULL
-                              ,&md->mfh
-                              );
-
-                adios_mpi_amr_do_mkdir (fd);
+                adios_mpi_bgq_do_mkdir (fd);
             }
 
-            MPI_Bcast (&md->g_num_ost, 1, MPI_INT, 0, md->group_comm);
-          
-            fd->base_offset = 0;
-            fd->pg_start_in_file = 0;
-            adios_mpi_amr_set_aggregation_parameters (method->parameters, md);
+            MPI_Barrier (md->group_comm);
 
             // Check if fd->name contains path
             if (ch = strrchr (fd->name, '/'))
@@ -1044,303 +784,92 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
             name = realloc (name, strlen (fd->name) + 5 + strlen (method->base_path) + strlen (name_no_path) + 1 + 10 + 1);
             // create the subfile name, e.g. restart.bp.1
             // 1 for '.' + 10 for subfile index + 1 for '\0'
-            sprintf (name, "%s%s%s%s.%d", fd->name, ".dir/", method->base_path, name_no_path, md->g_color1);
+            sprintf (name, "%s%s%s%s.%d", fd->name, ".dir/", method->base_path, name_no_path, md->partition_id);
             md->subfile_name = strdup (name);
-            fd->subfile_index = (uint32_t)md->g_color1;
+            fd->subfile_index = (uint32_t)md->partition_id;
 
             free (name_no_path);
 
-            if (is_aggregator(md->rank))
+            if (fd->shared_buffer == adios_flag_yes)
             {
-                if (fd->shared_buffer == adios_flag_yes)
-                {
-                    if (is_aggregator (md->rank))
-                    {
-                        // open subfiles
-                        md->open_thread_data = (struct adios_MPI_thread_data_open *) malloc (sizeof (struct adios_MPI_thread_data_open));
-                        md->open_thread_data->md = md;
-                        md->open_thread_data->parameters = method->parameters;
-
-                        if (md->g_threading)
-                        {
-                            pthread_create (&md->g_sot, NULL
-                                           ,adios_mpi_amr_do_open_thread
-                                           ,(void *) md->open_thread_data
-                                           );
-                        }
-                        else
-                        {
-                            adios_mpi_amr_do_open_thread ((void *) md->open_thread_data);
-                        }
-                    }
-                }
-
-                if (fd->shared_buffer == adios_flag_no)
-                {
-                    unlink (name);
-                    if (md->rank == 0)
-                    {
-                        unlink (fd->name);
-                    }
-
-                    if (method->parameters)
-                    {
-                        adios_mpi_amr_set_striping_unit (md, method->parameters);
-                    }
-
-                    err = MPI_File_open (MPI_COMM_SELF, name
-                                        ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                                        ,MPI_INFO_NULL
-                                        ,&md->fh
-                                        );
-                    md->striping_unit = adios_mpi_amr_get_striping_unit (md->fh, name);
-
-                    if (err != MPI_SUCCESS)
-                    {
-                        char e [MPI_MAX_ERROR_STRING];
-                        int len = 0;
-                        memset (e, 0, MPI_MAX_ERROR_STRING);
-                        MPI_Error_string (err, e, &len);
-                        adios_error (err_file_open_error,
-                                     "MPI_AMR method: MPI open failed for %s: '%s'\n", 
-                                     name, e);
-                        free (name);
-
-                        return adios_flag_no;
-                    }
-                }
-            }
+                // open subfiles. Everyone should do that, which is different
+                // from AMR method.
+                md->open_thread_data = (struct adios_MPI_thread_data_open *) malloc (sizeof (struct adios_MPI_thread_data_open));
+                md->open_thread_data->md = md;
+                md->open_thread_data->parameters = method->parameters;
 
-            if (md->group_comm != MPI_COMM_NULL)
-            {
-                fd->base_offset = 0;
-                fd->pg_start_in_file = fd->base_offset;
-            }
-            else
-            {
-                md->b.pg_index_offset = fd->write_size_bytes;
+                adios_mpi_bgq_do_open_thread ((void *) md->open_thread_data);
             }
 
-            break;
-        }
-
-        case adios_mode_append:
-        {
-            int old_file = 1;
-            adios_buffer_struct_clear (&md->b);
-
-            err = MPI_File_open (MPI_COMM_SELF, name, MPI_MODE_RDONLY
-                                ,MPI_INFO_NULL, &md->fh
-                                );
+            fd->base_offset = 0;
+            fd->pg_start_in_file = 0;
 
-            if (err != MPI_SUCCESS)
+            if (md->group_comm != MPI_COMM_NULL)
             {
-                old_file = 0;
-                err = MPI_File_open (MPI_COMM_SELF, name
-                                    ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                                    ,MPI_INFO_NULL, &md->fh
-                                    );
-
-                if (err != MPI_SUCCESS)
+                if (md->file_comm_rank == 0)
                 {
-                    char e [MPI_MAX_ERROR_STRING];
-                    int len = 0;
-                    memset (e, 0, MPI_MAX_ERROR_STRING);
-                    MPI_Error_string (err, e, &len);
-                    adios_error (err_file_open_error,
-                                 "MPI_AMR method: MPI open failed for %s: '%s'\n", 
-                                 name, e);
-                    free (name);
-
-                    return adios_flag_no;
-                }
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
-            }
+                    MPI_Offset * offsets = malloc (sizeof (MPI_Offset)
+                                                   * md->file_comm_size
+                                                  );
 
-            if (old_file)
-            {
-                if (md->group_comm == MPI_COMM_NULL || md->rank == 0)
-                {
-                    if (err != MPI_SUCCESS)
+                    // round up to GPFS block size (8 MiB)
+                    if (fd->write_size_bytes % BLOCK_UNIT)
                     {
-                        md->b.file_size = 0;
+                        offsets [0] =  (fd->write_size_bytes / BLOCK_UNIT + 1)
+                                     * BLOCK_UNIT;
                     }
                     else
                     {
-                        MPI_Offset file_size;
-                        MPI_File_get_size (md->fh, &file_size);
-                        md->b.file_size = file_size;
-                    }
-
-                    adios_init_buffer_read_version (&md->b);
-                    MPI_File_seek (md->fh, md->b.file_size - md->b.length
-                                  ,MPI_SEEK_SET
-                                  );
-                    MPI_File_read (md->fh, md->b.buff, md->b.length, MPI_BYTE
-                                  ,&md->status
-                                  );
-                    adios_parse_version (&md->b, &md->b.version);
-
-                    adios_init_buffer_read_index_offsets (&md->b);
-                    // already in the buffer
-                    adios_parse_index_offsets_v1 (&md->b);
-
-                    adios_init_buffer_read_process_group_index (&md->b);
-                    MPI_File_seek (md->fh, md->b.pg_index_offset
-                                  ,MPI_SEEK_SET
-                                  );
-                    MPI_File_read (md->fh, md->b.buff, md->b.pg_size, MPI_BYTE
-                                  ,&md->status
-                                  );
-                    adios_parse_process_group_index_v1 (&md->b
-                                                       ,&md->old_pg_root
-                                                       );
-
-                    adios_init_buffer_read_vars_index (&md->b);
-                    MPI_File_seek (md->fh, md->b.vars_index_offset
-                                  ,MPI_SEEK_SET
-                                  );
-                    MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
-                                  ,&md->status
-                                  );
-                    adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
-
-                    adios_init_buffer_read_attributes_index (&md->b);
-                    MPI_File_seek (md->fh, md->b.attrs_index_offset
-                                  ,MPI_SEEK_SET
-                                  );
-                    MPI_File_read (md->fh, md->b.buff, md->b.attrs_size
-                                  ,MPI_BYTE, &md->status
-                                  );
-                    adios_parse_attributes_index_v1 (&md->b
-                                                    ,&md->old_attrs_root
-                                                    );
-
-                    fd->base_offset = md->b.end_of_pgs;
-                    fd->pg_start_in_file = fd->base_offset;
-                }
-                else
-                {
-                    fd->base_offset = 0;
-                    fd->pg_start_in_file = 0;
-                }
-
-                MPI_File_close (&md->fh);
-            }
-            else
-            {
-                fd->base_offset = 0;
-                fd->pg_start_in_file = 0;
-            }
-
-            // cascade the opens to avoid trashing the metadata server
-            if (previous == -1)
-            {
-                // we know it exists, because we created it if it didn't
-                // when reading the old file so can just open wronly
-                // but adding the create for consistency with write mode
-                // so it is easier to merge write/append later
-                err = MPI_File_open (MPI_COMM_SELF, name
-                                    ,MPI_MODE_WRONLY | MPI_MODE_CREATE
-                                    ,MPI_INFO_NULL
-                                    ,&md->fh
-                                    );
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
-                if (next != -1)
-                {
-                    MPI_Isend (&sig, 1, MPI_INTEGER, next, current
-                              ,md->group_comm, &md->req
-                              );
-                }
-            }
-            else
-            {
-                MPI_Recv (&sig, 1, MPI_INTEGER, previous, previous
-                         ,md->group_comm, &md->status
-                         );
-                if (next != -1)
-                {
-                    MPI_Isend (&sig, 1, MPI_INTEGER, next, current
-                              ,md->group_comm, &md->req
-                              );
-                }
-                err = MPI_File_open (MPI_COMM_SELF, name
-                                    ,MPI_MODE_WRONLY
-                                    ,MPI_INFO_NULL
-                                    ,&md->fh
-                                    );
-                md->striping_unit = adios_mpi_amr_get_striping_unit(md->fh, name);
-            }
-
-            if (err != MPI_SUCCESS)
-            {
-                char e [MPI_MAX_ERROR_STRING];
-                int len = 0;
-                memset (e, 0, MPI_MAX_ERROR_STRING);
-                MPI_Error_string (err, e, &len);
-                adios_error (err_file_open_error,
-                             "MPI_AMR method: MPI open failed for %s: '%s'\n", 
-                             name, e);
-                free (name);
-
-                return adios_flag_no;
-            }
-
-            if (md->group_comm != MPI_COMM_NULL)
-            {
-                if (md->rank == 0)
-                {
-                    MPI_Offset * offsets = malloc (  sizeof (MPI_Offset)
-                                                   * md->size
-                                                  );
-
-                    if (fd->write_size_bytes % md->striping_unit)
-                        offsets [0] =  (fd->write_size_bytes / md->striping_unit + 1)
-                                     * md->striping_unit;
-                    else
                         offsets [0] = fd->write_size_bytes;
+                    }
 
                     MPI_Gather (MPI_IN_PLACE, 1, MPI_LONG_LONG
                                ,offsets, 1, MPI_LONG_LONG
-                               ,0, md->group_comm
+                               ,0, md->file_comm
                                );
 
                     uint64_t last_offset = offsets [0];
                     offsets [0] = fd->base_offset;
-                    for (i = 1; i < md->size; i++)
+                    for (i = 1; i < md->file_comm_size; i++)
                     {
                         uint64_t this_offset = offsets [i];
                         offsets [i] = offsets [i - 1] + last_offset;
                         last_offset = this_offset;
                     }
-                    md->b.pg_index_offset =   offsets [md->size - 1]
+
+                    md->b.pg_index_offset =   offsets [md->file_comm_size - 1]
                                             + last_offset;
                     MPI_Scatter (offsets, 1, MPI_LONG_LONG
                                 ,MPI_IN_PLACE, 1, MPI_LONG_LONG
-                                ,0, md->group_comm
+                                ,0, md->file_comm
                                 );
+
                     fd->base_offset = offsets [0];
                     fd->pg_start_in_file = fd->base_offset;
+
                     free (offsets);
                 }
                 else
                 {
                     MPI_Offset offset;
-                    if (fd->write_size_bytes % md->striping_unit)
-                        offset =  (fd->write_size_bytes / md->striping_unit + 1)
-                                     * md->striping_unit;
+                    if (fd->write_size_bytes % BLOCK_UNIT)
+                    {
+                        offset =  (fd->write_size_bytes / BLOCK_UNIT + 1)
+                                  * BLOCK_UNIT;
+                    }
                     else
+                    {
                         offset = fd->write_size_bytes;
-
+                    }
 
                     MPI_Gather (&offset, 1, MPI_LONG_LONG
                                ,0, 1, MPI_LONG_LONG
-                               ,0, md->group_comm
+                               ,0, md->file_comm
                                );
 
                     MPI_Scatter (0, 1, MPI_LONG_LONG
                                 ,&offset, 1, MPI_LONG_LONG
-                                ,0, md->group_comm
+                                ,0, md->file_comm
                                 );
                     fd->base_offset = offset;
                     fd->pg_start_in_file = fd->base_offset;
@@ -1356,7 +885,7 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 
         default:
         {
-            adios_error (err_invalid_file_mode, "MPI_AMR method: Unknown file mode requested: %d\n", fd->mode);
+            adios_error (err_invalid_file_mode, "MPI_BGQ method: Unknown file mode requested: %d\n", fd->mode);
 
             free (name);
 
@@ -1374,17 +903,15 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
 
         if (is_aggregator (md->rank))
         {
-            START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-            count = adios_mpi_amr_striping_unit_write(
+            count = adios_mpi_bgq_striping_unit_write(
                                   md->fh
                                  ,fd->base_offset
                                  ,fd->buffer
                                  ,fd->bytes_written
                                  );
-            STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
             if (count != fd->bytes_written)
             {
-                log_warn ("a:MPI_AMR method tried to write %llu, only wrote %llu\n", 
+                log_warn ("a:MPI_BGQ method tried to write %llu, only wrote %llu\n", 
                           fd->bytes_written, count);
             }
         }
@@ -1404,18 +931,16 @@ enum ADIOS_FLAG adios_mpi_amr_should_buffer (struct adios_file_struct * fd
         adios_shared_buffer_free (&md->b);
     }
 
-    STOP_TIMER (ADIOS_TIMER_MPI_AMR_AD_SHOULD_BUFFER);
 
     return fd->shared_buffer;
 }
 
-void adios_mpi_amr_write (struct adios_file_struct * fd
+void adios_mpi_bgq_write (struct adios_file_struct * fd
                          ,struct adios_var_struct * v
                          ,void * data
                          ,struct adios_method_struct * method
                          )
 {
-    START_TIMER (ADIOS_TIMER_MPI_AMR_AD_WRITE);
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                       method->method_data;
     if (v->got_buffer == adios_flag_yes)
@@ -1437,102 +962,11 @@ void adios_mpi_amr_write (struct adios_file_struct * fd
 
     if (fd->shared_buffer == adios_flag_no)
     {
-        uint64_t total_size = 0;
-        MPI_Comm new_comm;
-        int i, new_rank, new_group_size;
-        void * aggr_buff = 0;
-
-        // var payload sent for sizing information
-        adios_write_var_header_v1 (fd, v);
-        adios_write_var_payload_v1 (fd, v);
-
-        MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &new_comm);
-        MPI_Comm_rank (new_comm, &new_rank);
-        MPI_Comm_size (new_comm, &new_group_size);
-
-        int bytes_written[new_group_size];
-        int disp[new_group_size];
-
-        MPI_Gather (&fd->bytes_written, 1, MPI_INT
-                   ,bytes_written, 1, MPI_INT
-                   ,0, new_comm);
-
-        disp[0] = 0;
-        for (i = 1; i < new_group_size; i++)
-        {
-            disp[i] = disp[i - 1] + bytes_written[i - 1];
-        }
-        total_size += disp[new_group_size - 1]
-                    + bytes_written[new_group_size - 1];
-
-        if (is_aggregator(md->rank))
-        {
-            aggr_buff = malloc (total_size);
-            if (aggr_buff == 0)
-            {
-                adios_error (err_no_memory, 
-                        "MPI_AMR method: Cannot allocate aggregation buffer of %llu size.\n"
-                        "Need to increase the number of aggregators.\n",
-                        total_size
-                        );
-                return;
-            }
-        }
-  
-        MPI_Gatherv (fd->buffer, fd->bytes_written, MPI_BYTE
-                    ,aggr_buff, bytes_written, disp, MPI_BYTE
-                    ,0, new_comm);
-
-        fd->vars_written += new_group_size - 1;
-
-        uint64_t count = 0;
-        if (is_aggregator(md->rank))
-        {
-            START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-            count = adios_mpi_amr_striping_unit_write(
-                           md->fh
-                          ,-1
-                          ,aggr_buff
-                          ,total_size
-                          );
-            STOP_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-            if (count != total_size)
-            {
-                log_warn ("b:MPI_AMR method tried to write %llu, only wrote %llu\n",
-                          total_size, count);
-            }
-
-            FREE (aggr_buff);
-        }
-        else
-        {
-            // Non-aggregators do nothing
-        }
-
-        // Broadcast new offsets to all processors in the communicator.
-        uint64_t new_offsets[new_group_size];
-
-        if (is_aggregator (md->rank))
-        {
-            new_offsets[0] = v->write_offset;
-            for (i = 1; i < new_group_size; i++)
-            {
-                new_offsets[i] = new_offsets[i - 1] + bytes_written[i - 1];
-            }
-        }
-
-        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, new_comm);
-        v->write_offset = new_offsets[new_rank];
-
-        fd->base_offset += count;
-        fd->offset = 0;
-        fd->bytes_written = 0;
-        adios_shared_buffer_free (&md->b);
+        log_warn ("The ADIOS buffer in the XML is not large enough for buffering.\n");
     }
-    STOP_TIMER (ADIOS_TIMER_MPI_AMR_AD_WRITE);
 }
 
-void adios_mpi_amr_get_write_buffer (struct adios_file_struct * fd
+void adios_mpi_bgq_get_write_buffer (struct adios_file_struct * fd
                                 ,struct adios_var_struct * v
                                 ,uint64_t * size
                                 ,void ** buffer
@@ -1562,7 +996,7 @@ void adios_mpi_amr_get_write_buffer (struct adios_file_struct * fd
         {
             adios_method_buffer_free (mem_allowed);
             adios_error (err_no_memory, 
-                    "MPI_AMR method: Out of memory allocating %llu bytes for variable %s\n",
+                    "MPI_BGQ method: Out of memory allocating %llu bytes for variable %s\n",
                     *size ,v->name);
             v->got_buffer = adios_flag_no;
             v->free_data = adios_flag_no;
@@ -1583,7 +1017,7 @@ void adios_mpi_amr_get_write_buffer (struct adios_file_struct * fd
     {
         adios_method_buffer_free (mem_allowed);
         adios_error (err_buffer_overflow, 
-                "MPI_AMR method: OVERFLOW: Cannot allocate requested buffer of %llu "
+                "MPI_BGQ method: OVERFLOW: Cannot allocate requested buffer of %llu "
                 "bytes for %s. Allowed max size is %llu\n",
                 *size, v->name, mem_allowed);
         *size = 0;
@@ -1591,7 +1025,7 @@ void adios_mpi_amr_get_write_buffer (struct adios_file_struct * fd
     }
 }
 
-void adios_mpi_amr_read (struct adios_file_struct * fd
+void adios_mpi_bgq_read (struct adios_file_struct * fd
                     ,struct adios_var_struct * v, void * buffer
                     ,uint64_t buffer_size
                     ,struct adios_method_struct * method
@@ -1601,7 +1035,7 @@ void adios_mpi_amr_read (struct adios_file_struct * fd
     v->data_size = buffer_size;
 }
 
-static void adios_mpi_amr_do_read (struct adios_file_struct * fd
+static void adios_mpi_bgq_do_read (struct adios_file_struct * fd
                               ,struct adios_method_struct * method
                               )
 {
@@ -1699,7 +1133,7 @@ static void adios_mpi_amr_do_read (struct adios_file_struct * fd
 
         default:
             adios_error (err_invalid_file_version, 
-                    "MPI_AMR method read: file version unknown: %u\n",
+                    "MPI_BGQ method read: file version unknown: %u\n",
                     md->b.version);
             return;
     }
@@ -1708,7 +1142,7 @@ static void adios_mpi_amr_do_read (struct adios_file_struct * fd
 }
 
 static
-uint32_t adios_mpi_amr_calculate_attributes_size (struct adios_file_struct * fd)
+uint32_t adios_mpi_bgq_calculate_attributes_size (struct adios_file_struct * fd)
 {
     uint32_t overhead = 0;
     struct adios_attribute_struct * a = fd->group->attributes;
@@ -1726,10 +1160,11 @@ uint32_t adios_mpi_amr_calculate_attributes_size (struct adios_file_struct * fd)
     return overhead;
 }
 
-void adios_mpi_amr_bg_close (struct adios_file_struct * fd
-                            ,struct adios_method_struct * method
-                            )
+void adios_mpi_bgq_simple_close (struct adios_file_struct * fd
+                                 ,struct adios_method_struct * method
+                                 )
 {
+
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                  method->method_data;
     struct adios_attribute_struct * a = fd->group->attributes;
@@ -1745,7 +1180,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
         case adios_mode_update:
         {
             adios_error (err_invalid_file_mode, 
-                    "Only \"w\" mode is supported by MPI_AMR Brigade IO\n");
+                    "Only \"w\" mode is supported by MPI_BGQ\n");
             break;
         }
         case adios_mode_write:
@@ -1754,187 +1189,467 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             uint64_t buffer_size = 0;
             uint64_t buffer_offset = 0;
             uint64_t index_start = md->b.pg_index_offset, index_start1;
-            int * pg_sizes = 0, * disp = 0, * sendbuf = 0, * recvbuf = 0, * attr_sizes = 0;
-            void * aggr_buff = 0, * recv_buff = 0;
+            int * disp = 0, * sendbuf = 0, * recvbuf = 0, * attr_sizes = 0;
+            void * * recv_buff = 0;
             struct adios_MPI_thread_data_write write_thread_data;
-            int i, new_rank, new_group_size, new_rank2, new_group_size2, max_data_size = 0, total_data_size = 0, total_data_size1 = 0;
-            MPI_Comm new_comm, new_comm2;
+            int i, max_data_size = 0, total_data_size = 0, total_data_size1 = 0;
+            MPI_Comm new_comm2;
+
+            MPI_Comm_split (md->group_comm, md->file_comm_rank, md->rank, &new_comm2);
+
+            if (fd->shared_buffer == adios_flag_yes)
+            {    
+                // if we need to write > 2 GB, need to do it in parts
+                // since count is limited to INT32_MAX (signed 32-bit max).
+                uint64_t bytes_written = 0; 
+                int32_t to_write = 0; 
+                if (fd->bytes_written > INT32_MAX)
+                {    
+                    to_write = INT32_MAX;
+                }    
+                else 
+                {    
+                    to_write = (int32_t) fd->bytes_written;
+                }    
+
+                if (fd->base_offset + fd->bytes_written > 
+                    fd->pg_start_in_file + fd->write_size_bytes) 
+                {    
+                    adios_error (err_out_of_bound, 
+                            "MPI_BGQ method, rank %d: size of buffered data exceeds pg bound.\n"
+                            "File is corrupted. Need to enlarge group size in adios_group_size().\n"
+                            "Group size=%llu, offset at end of variable buffer=%llu\n",
+                            md->rank, 
+                            fd->write_size_bytes,
+                            fd->base_offset - fd->pg_start_in_file + fd->bytes_written);
+                }    
+
+                while (bytes_written < fd->bytes_written)
+                {
+                    // everyone writes their data
+                    MPI_File_seek (md->fh, fd->base_offset + bytes_written
+                                  ,MPI_SEEK_SET
+                                  );   
+                    int err = MPI_File_write (md->fh, fd->buffer + bytes_written
+                                         ,to_write, MPI_BYTE, &md->status
+                                         );
 
-            START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-            MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &new_comm);
-            MPI_Comm_rank (new_comm, &new_rank);
-            MPI_Comm_size (new_comm, &new_group_size);
+                    if (err != MPI_SUCCESS)
+                    {
+                        char e [MPI_MAX_ERROR_STRING];
+                        int len = 0;
+                        memset (e, 0, MPI_MAX_ERROR_STRING);
+                        MPI_Error_string (err, e, &len);
+                        adios_error (err_write_error,
+                                "MPI_BGQ method, rank %d: adios_close(): writing of buffered data "
+                                "[%llu..%llu] to file %s failed: '%s'\n",
+                                md->rank, bytes_written, bytes_written+to_write-1,
+                                fd->name, e);
+                    }
+                    bytes_written += to_write;
+                    if (fd->bytes_written > bytes_written)
+                    {
+                        if (fd->bytes_written - bytes_written > INT32_MAX)
+                        {
+                            to_write = INT32_MAX;
+                        }
+                        else
+                        {
+                            to_write = fd->bytes_written - bytes_written;
+                        }
+                    }
+                }
+            }
 
-            MPI_Comm_split (md->group_comm, md->g_color2, md->rank, &new_comm2);
-            MPI_Comm_rank (new_comm2, &new_rank2);
-            MPI_Comm_size (new_comm2, &new_group_size2);
-            STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+            // build index appending to any existing index
+            adios_build_index_v1 (fd, md->index);
 
-            if (fd->shared_buffer == adios_flag_no)
+            // if collective, gather the indexes from the rest and call
+            if (md->group_comm != MPI_COMM_NULL)
             {
-                MPI_Offset new_off;
-                // set it up so that it will start at 0, but have correct sizes
-                MPI_File_get_position (md->fh, &new_off);
-                fd->offset = fd->base_offset - md->vars_start;
-                fd->vars_start = 0;
-                fd->buffer_size = 0;
-                adios_write_close_vars_v1 (fd);
-                // fd->vars_start gets updated with the size written
-
-                uint64_t count;
-                if (is_aggregator(md->rank))
+                // Collect index from the processors
+                // that belong to the same file comm.
+                if (md->file_comm_rank == 0)
                 {
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    count = adios_mpi_amr_striping_unit_write(
-                                   md->fh
-                                  ,md->vars_start
-                                  ,fd->buffer
-                                  ,md->vars_header_size
-                                  );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    if (count != md->vars_header_size)
+                    int * index_sizes = malloc (4 * md->file_comm_size);
+                    int * index_offsets = malloc (4 * md->file_comm_size);
+                    char * recv_buffer = 0;
+                    uint32_t size = 0, total_size = 0;
+                    int i;
+
+                    MPI_Gather (&size, 1, MPI_INT
+                               ,index_sizes, 1, MPI_INT
+                               ,0, md->file_comm
+                               );
+
+                    for (i = 0; i < md->file_comm_size; i++)
                     {
-                        log_warn ("d:MPI_AMR method tried to write %llu, only wrote %llu\n",
-                                md->vars_header_size, count);
+                        index_offsets [i] = total_size;
+                        total_size += index_sizes [i];
                     }
-                }
-                fd->offset = 0;
-                fd->bytes_written = 0;
-                adios_shared_buffer_free (&md->b);
 
-                adios_write_open_attributes_v1 (fd);
-                md->vars_start = new_off;
-                md->vars_header_size = fd->offset;
+                    recv_buffer = malloc (total_size);
+                    assert (recv_buffer);
 
-                MPI_File_seek (md->fh, new_off + md->vars_header_size
-                              ,MPI_SEEK_SET
-                              ); // go back to end, but after attr header
+                    MPI_Gatherv (&size, 0, MPI_BYTE
+                                ,recv_buffer, index_sizes, index_offsets
+                                ,MPI_BYTE, 0, md->file_comm
+                                );
 
-                fd->base_offset += fd->offset;  // add size of header
-                fd->offset = 0;
-                fd->bytes_written = 0;
+                    char * buffer_save = md->b.buff;
+                    uint64_t buffer_size_save = md->b.length;
+                    uint64_t offset_save = md->b.offset;
 
-                if (!fd->group->process_id) { // from ADIOS 1.4, only rank 0 writes attributes
-                    while (a)
+                    for (i = 1; i < md->file_comm_size; i++)
                     {
-                        adios_write_attribute_v1 (fd, a);
+                        md->b.buff = recv_buffer + index_offsets [i];
+                        md->b.length = index_sizes [i];
+                        md->b.offset = 0;
 
-                        int bytes_written[new_group_size];
-                        int disp[new_group_size];
-                        int total_size = 0;
-                        void * aggr_buff;
+                        adios_parse_process_group_index_v1 (&md->b
+                                                           ,&new_pg_root
+                                                           );
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
+                        adios_parse_attributes_index_v1 (&md->b
+                                                        ,&new_attrs_root
+                                                        );
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                        MPI_Gather (&fd->bytes_written, 1, MPI_INT
-                                ,bytes_written, 1, MPI_INT
-                                ,0, new_comm
+                        adios_merge_index_v1 (md->index, new_pg_root,
+                                              new_vars_root ,new_attrs_root);
+                        new_pg_root = 0;
+                        new_vars_root = 0;
+                        new_attrs_root = 0;
+                    }
+
+                    md->b.buff = buffer_save;
+                    md->b.length = buffer_size_save;
+                    md->b.offset = offset_save;
+
+                    free (recv_buffer);
+                    free (index_sizes);
+                    free (index_offsets);
+                }
+                else
+                {
+                    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
+                                         ,0, md->index);
+
+                    uint32_t temp_buffer_size = buffer_offset;
+
+/*
+                    MPI_Gather ((uint32_t *)&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
+                               ,0, md->file_comm
+                               );
+*/
+                    MPI_Gather (&temp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
+                               ,0, md->file_comm
+                               );
+/*
+                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                                ,0, 0, 0, MPI_BYTE
+                                ,0, md->file_comm
                                 );
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+*/
+                    MPI_Gatherv (buffer, temp_buffer_size, MPI_BYTE
+                                ,0, 0, 0, MPI_BYTE
+                                ,0, md->file_comm
+                                );
+                }
+            }
 
-                        disp[0] = 0;
-                        for (i = 1; i < new_group_size; i++)
+            // Rank 0 within each file comm writes
+            // out indexes in each subfile
+            if (md->file_comm_rank == 0)
+            {
+                uint32_t flag = 0;
+                int err;
+
+                index_start = md->b.pg_index_offset;;
+
+                adios_write_index_v1 (&buffer, &buffer_size
+                                     ,&buffer_offset, index_start
+                                     ,md->index
+                                     );
+
+                adios_write_version_flag_v1 (&buffer, &buffer_size, &buffer_offset, flag);
+                adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
+                                     ,index_start, md->index
+                                     );
+                adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
+
+                MPI_File_seek (md->fh, md->b.pg_index_offset, MPI_SEEK_SET);
+                {
+                    uint64_t total_written = 0;
+                    uint64_t to_write = buffer_offset;
+                    int write_len = 0;
+                    int count;
+                    char * buf_ptr = buffer;
+      
+                    while (total_written < buffer_offset)
+                    {
+                        write_len = (to_write > INT32_MAX) ? INT32_MAX : to_write;
+                        err = MPI_File_write (md->fh, buf_ptr, write_len, MPI_BYTE, &md->status);
+
+                        MPI_Get_count(&md->status, MPI_BYTE, &count);
+                        if (count != write_len)
                         {
-                            disp[i] = disp[i - 1] + bytes_written[i - 1];
+                            log_error ("MPI_BGQ method, rank %d: Need to do multi-write 1 (tried: "
+                                    "%d wrote: %d) errno %d\n",
+                                    md->rank, write_len, count, errno);
+                            err = count;
+                            break;
                         }
-                        total_size += disp[new_group_size - 1]
-                            + bytes_written[new_group_size - 1];
+                        total_written += count;
+                        buf_ptr += count;
+                        to_write -= count;
+                        //err = total_written;
+                    }
+                }
+                if (err != MPI_SUCCESS)
+                {
+                    char e [MPI_MAX_ERROR_STRING];
+                    int len = 0;
+                    memset (e, 0, MPI_MAX_ERROR_STRING);
+                    MPI_Error_string (err, e, &len);
+                    adios_error (err_write_error,
+                            "MPI_BGQ method, rank %d: adios_close(): writing of index data "
+                            "of %llu bytes to file %s failed: '%s'\n",
+                            md->rank, buffer_offset, fd->name, e);
+                }
+            }
 
-                        if (is_aggregator(md->rank))
+            if (md->g_have_mdf)
+            {
+                // collect index among aggregators
+                if (md->file_comm_rank == 0)
+                {
+                    if (md->partition_id == 0)
+                    {
+                        int * index_sizes = malloc (4 * md->n_partitions);
+                        int * index_offsets = malloc (4 * md->n_partitions);
+                        char * recv_buffer = 0;
+                        uint32_t size = 0, total_size = 0;
+
+                        MPI_Gather (&size, 1, MPI_INT
+                                   ,index_sizes, 1, MPI_INT
+                                   ,0, new_comm2
+                                   );
+
+                        for (i = 0; i < md->n_partitions; i++)
                         {
-                            aggr_buff = malloc (total_size);
-                            if (aggr_buff == 0)
-                            {
-                                adios_error (err_no_memory, 
-                                        "MPI_AMR method (BG): Cannot allocate aggregation buffer.\n"
-                                        "Need to increase the number of aggregators.\n");
-                                return;
-                            }
+                            index_offsets [i] = total_size;
+                            total_size += index_sizes [i];
                         }
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                        MPI_Gatherv (fd->buffer, fd->bytes_written, MPI_BYTE
-                                ,aggr_buff, bytes_written, disp, MPI_BYTE
-                                ,0, new_comm);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                        recv_buffer = malloc (total_size);
+                        assert (recv_buffer);
 
-                        if (is_aggregator (md->rank))
-                        {
-                            START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                            count = adios_mpi_amr_striping_unit_write(
-                                    md->fh,
-                                    -1,
-                                    aggr_buff, //fd->buffer,
-                                    total_size //fd->bytes_written,
+                        MPI_Gatherv (&size, 0, MPI_BYTE
+                                    ,recv_buffer, index_sizes, index_offsets
+                                    ,MPI_BYTE, 0, new_comm2
                                     );
-                            STOP_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                            if (count != total_size)
-                            {
-                                log_warn ("e:MPI method tried to write %llu, only wrote %llu\n",
-                                          fd->bytes_written, count);
-                            }
-                        }
 
-                        // Broadcast new offsets to all processors in the communicator.
-                        uint64_t new_offsets[new_group_size];
+                        char * buffer_save = md->b.buff;
+                        uint64_t buffer_size_save = md->b.length;
+                        uint64_t offset_save = md->b.offset;
 
-                        if (is_aggregator (md->rank))
+                        for (i = 1; i < md->n_partitions; i++)
                         {
-                            new_offsets[0] = a->write_offset;
-                            for (i = 1; i < new_group_size; i++)
-                            {
-                                new_offsets[i] = new_offsets[i - 1] + bytes_written[i - 1];
-                            }
+                            md->b.buff = recv_buffer + index_offsets [i];
+                            md->b.length = index_sizes [i];
+                            md->b.offset = 0;
+
+                            adios_parse_process_group_index_v1 (&md->b
+                                                               ,&new_pg_root
+                                                               );
+                            adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
+                            adios_parse_attributes_index_v1 (&md->b
+                                                            ,&new_attrs_root
+                                                            );
+
+                            adios_merge_index_v1 (md->index
+                                                 ,new_pg_root, new_vars_root
+                                                 ,new_attrs_root
+                                                 );
+                            new_pg_root = 0;
+                            new_vars_root = 0;
+                            new_attrs_root = 0;
                         }
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                        MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, new_comm);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                        a->write_offset = new_offsets[new_rank];
+                        md->b.buff = buffer_save;
+                        md->b.length = buffer_size_save;
+                        md->b.offset = offset_save;
 
-                        fd->base_offset += count;
-                        fd->offset = 0;
-                        fd->bytes_written = 0;
-                        adios_shared_buffer_free (&md->b);
+                        free (recv_buffer);
+                        free (index_sizes);
+                        free (index_offsets);
+                    }
+                    else
+                    {
+                        char * buffer2 = 0;
+                        uint64_t buffer_size2 = 0;
+                        uint64_t buffer_offset2 = 0;
 
-                        a = a->next;
+                        adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
+                                             ,0, md->index
+                                             );
+                        uint32_t temp_buffer_size2 = buffer_offset2;
+
+/*
+                        MPI_Gather (&buffer_size2, 1, MPI_INT
+                                   ,0, 0, MPI_INT
+                                   ,0, new_comm2
+                                   );
+                        MPI_Gatherv (buffer2, buffer_size2, MPI_BYTE
+                                    ,0, 0, 0, MPI_BYTE
+                                    ,0, new_comm2
+                                    );
+*/
+                        MPI_Gather (&temp_buffer_size2, 1, MPI_INT
+                                   ,0, 0, MPI_INT
+                                   ,0, new_comm2
+                                   );
+                        MPI_Gatherv (buffer2, temp_buffer_size2, MPI_BYTE
+                                    ,0, 0, 0, MPI_BYTE
+                                    ,0, new_comm2
+                                    );
+
+                        if (buffer2)
+                        {
+                            free (buffer2);
+                            buffer2 = 0;
+                            buffer_size2 = 0;
+                            buffer_offset2 = 0;
+                        }
                     }
                 }
 
-                // set it up so that it will start at 0, but have correct sizes
-                fd->offset = fd->base_offset - md->vars_start;
-                fd->vars_start = 0;
-                fd->buffer_size = 0;
-                adios_write_close_attributes_v1 (fd);
-
-                // fd->vars_start gets updated with the size written
-                if (is_aggregator(md->rank))
+                // write out the metadata file from rank 0
+                if (md->partition_id == 0 && md->file_comm_rank == 0)
                 {
-                    *(uint16_t *)fd->buffer = *(uint16_t *)fd->buffer * new_group_size;
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    count = adios_mpi_amr_striping_unit_write(
-                                  md->fh,
-                                  md->vars_start,
-                                  fd->buffer,
-                                  md->vars_header_size
-                                  );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    if (count != md->vars_header_size)
+                    MPI_File m_file;
+                    char * global_index_buffer = 0;
+                    uint64_t global_index_buffer_size = 0;
+                    uint64_t global_index_buffer_offset = 0;
+                    uint64_t global_index_start = 0;
+                    uint16_t flag = 0;
+
+                    adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
+                                         ,&global_index_buffer_offset, global_index_start
+                                         ,md->index
+                                         );
+
+                    flag |= ADIOS_VERSION_HAVE_SUBFILE;
+
+                    adios_write_version_flag_v1 (&global_index_buffer
+                                                ,&global_index_buffer_size
+                                                ,&global_index_buffer_offset
+                                                ,flag
+                                                );
+
+                    adios_mpi_bgq_striping_unit_write(
+                                      md->mfh,
+                                      -1,
+                                      global_index_buffer,
+                                      global_index_buffer_offset
+                                      );
+
+                    if (global_index_buffer)
                     {
-                        log_warn ("f:MPI_AMR method tried to write %llu, only wrote %llu\n",
-                                  md->vars_header_size, count);
+                        free (global_index_buffer);
+                        global_index_buffer = 0;
+                        global_index_buffer_size = 0;
+                        global_index_buffer_offset = 0;
                     }
                 }
+            }
+
+            FREE (buffer);
+            buffer_size = 0;
+            buffer_offset = 0;
+
+            adios_clear_index_v1 (md->index);
+            md->index = 0;
+            md->g_num_aggregators = 0;
+            md->g_color2 = 0;
+
+            FREE (md->subfile_name);
+            FREE (md->g_is_aggregator);
+            FREE (md->g_offsets);
+            FREE (md->open_thread_data);
+        }
+
+        break;
+    }
+
+    if (md && md->fh)
+        MPI_File_close (&md->fh);
+
+    if (md && md->g_have_mdf && md->mfh)
+        MPI_File_close (&md->mfh);
+
+    if (   md->group_comm != MPI_COMM_WORLD
+        && md->group_comm != MPI_COMM_SELF
+        && md->group_comm != MPI_COMM_NULL
+       )
+    {   
+        md->group_comm = MPI_COMM_NULL;
+    }
+
+    md->fh = 0;
+    md->mfh = 0;
+    md->req = 0;
+    memset (&md->status, 0, sizeof (MPI_Status));
+
+    return;
+}
 
-                fd->offset = 0;
-                fd->bytes_written = 0;
+void adios_mpi_bgq_bg_close (struct adios_file_struct * fd
+                            ,struct adios_method_struct * method
+                            )
+{
+#if 0
+    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
+                                                 method->method_data;
+    struct adios_attribute_struct * a = fd->group->attributes;
 
-                MPI_File_seek (md->fh, fd->base_offset, MPI_SEEK_SET);
-            }
+    struct adios_index_process_group_struct_v1 * new_pg_root = 0;
+    struct adios_index_var_struct_v1 * new_vars_root = 0;
+    struct adios_index_attribute_struct_v1 * new_attrs_root = 0;
+
+    switch (fd->mode)
+    {
+        case adios_mode_read:
+        case adios_mode_append:
+        case adios_mode_update:
+        {
+            adios_error (err_invalid_file_mode, 
+                    "Only \"w\" mode is supported by MPI_BGQ\n");
+            break;
+        }
+        case adios_mode_write:
+        {
+            char * buffer = 0;
+            uint64_t buffer_size = 0;
+            uint64_t buffer_offset = 0;
+            uint64_t index_start = md->b.pg_index_offset, index_start1;
+            int * pg_sizes = 0, * disp = 0, * sendbuf = 0, * recvbuf = 0, * attr_sizes = 0;
+            void * aggr_buff = 0, * recv_buff = 0;
+            struct adios_MPI_thread_data_write write_thread_data;
+            int i, new_rank, new_group_size, new_rank2, new_group_size2, max_data_size = 0, total_data_size = 0, total_data_size1 = 0;
+            MPI_Comm new_comm2;
+
+            MPI_Comm_split (md->group_comm, md->file_comm_rank, md->rank, &new_comm2);
+            MPI_Comm_rank (new_comm2, &new_rank2);
+            MPI_Comm_size (new_comm2, &new_group_size2);
 
             // if not merge PG's on the aggregator side
-            if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
+            if (fd->shared_buffer == adios_flag_no)
+            {
+                log_warn ("The ADIOS buffer in the XML is not large enough for buffering.\n");
+            }
+            else
             {
-                //printf ("do not merge pg\n");
                 struct adios_bp_buffer_struct_v1 b;
                 struct adios_process_group_header_struct_v1 pg_header;
                 struct adios_vars_header_struct_v1 vars_header;
@@ -1949,16 +1664,14 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 disp = (int *) malloc (new_group_size * 4);
                 if (pg_sizes == 0 || disp == 0)
                 {
-                    adios_error (err_no_memory, "MPI_AMR method: Cannot allocate memory "
+                    adios_error (err_no_memory, "MPI_BGQ method: Cannot allocate memory "
                                 "for merging process blocks (mpi_amr_bg_close)\n");
                     return;
                 }
 
-                START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Allgather (&pg_size, 1, MPI_INT
                               ,pg_sizes, 1, MPI_INT
-                              ,new_comm);
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                              ,md->file_comm);
 
                 disp[0] = 0;
                 max_data_size = pg_size;
@@ -1973,7 +1686,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 {
                     if (2 * max_data_size > MAX_AGG_BUF)
                     {
-                        log_warn ("MPI_AMR method (BG): The max allowed aggregation "
+                        log_warn ("MPI_BGQ method (BG): The max allowed aggregation "
                                 "buffer is %llu bytes.\n"
                                 "But this ADIOS method needs %llu bytes for aggregation\n",
                                 MAX_AGG_BUF, 2 * max_data_size);
@@ -1983,7 +1696,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     recv_buff = malloc (max_data_size);
                     if (aggr_buff == 0 || recv_buff == 0)
                     {
-                        adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
+                        adios_error (err_no_memory, "MPI_BGQ method (BG): Cannot allocate "
                                     "2 x %llu bytes for aggregation buffers.\n", 
                                     max_data_size);
                         return;
@@ -1993,7 +1706,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 {
                     if (max_data_size > MAX_AGG_BUF)
                     {
-                        log_warn ("MPI_AMR method (BG): The max allowed aggregation "
+                        log_warn ("MPI_BGQ method (BG): The max allowed aggregation "
                                   "buffer is %llu bytes.\n",
                                   MAX_AGG_BUF);
                     }
@@ -2001,7 +1714,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     recv_buff = malloc (max_data_size);
                     if (recv_buff == 0)
                     {
-                        adios_error (err_no_memory, "MPI_AMR method (BG): Cannot allocate "
+                        adios_error (err_no_memory, "MPI_BGQ method (BG): Cannot allocate "
                                     "%llu bytes for receive buffer.\n", 
                                     max_data_size);
                         return;
@@ -2013,20 +1726,13 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                 if (is_aggregator (md->rank))
                 {
-                    if (md->g_threading)
-                    {
-                        pthread_join (md->g_sot, NULL);
-                    }
-
                     index_start1 = 0;
                     for (i = 0; i < new_group_size; i++)
                     {
                         if (i + 1 < new_group_size)
                         {
-                            START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                             MPI_Irecv (recv_buff, pg_sizes[i + 1], MPI_BYTE, new_rank + 1
-                                      ,0, new_comm, &request);
-                            STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                                      ,0, md->file_comm, &request);
                         }
 
                         write_thread_data.fh = &md->fh;
@@ -2035,17 +1741,13 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         write_thread_data.total_data_size = &pg_sizes[i];
 
                         // This write call is not threaded
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                        adios_mpi_amr_do_write_thread ((void *) &write_thread_data);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_IO);
+                        adios_mpi_bgq_do_write_thread ((void *) &write_thread_data);
 
                         index_start1 += pg_sizes[i];
 
                         if (i + 1 < new_group_size)
                         {
-                            START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                             MPI_Wait (&request, &status);
-                            STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                             memcpy (aggr_buff, recv_buff, pg_sizes[i + 1]);
                         }
@@ -2055,30 +1757,26 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 {
                     if (new_rank == new_group_size - 1)
                     {
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Send (fd->buffer, pg_size, MPI_BYTE, new_rank - 1
-                                 ,0, new_comm);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                                 ,0, md->file_comm);
                     }
                     else
                     {
                         for (i = new_rank + 1; i < new_group_size; i++)
                         {
-                            START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                             // Recv data from upstream rank
                             MPI_Irecv (recv_buff, pg_sizes[i], MPI_BYTE, new_rank + 1
-                                      ,0, new_comm, &request);
+                                      ,0, md->file_comm, &request);
 
                             if (i == new_rank + 1)
                                 // Send my data to downstream rank
                                 MPI_Send (fd->buffer, pg_size, MPI_BYTE, new_rank - 1
-                                         ,0, new_comm);
+                                         ,0, md->file_comm);
 
                             MPI_Wait (&request, &status);
                             // Send it to downstream rank
                             MPI_Send (recv_buff, pg_sizes[i], MPI_BYTE, new_rank - 1
-                                     ,0, new_comm);
-                            STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                                     ,0, md->file_comm);
                         }
                     }
                 }
@@ -2088,11 +1786,9 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
 
-            if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
+            if (fd->shared_buffer == adios_flag_yes)
             {
                 if (!is_aggregator(md->rank))
                 {
@@ -2116,7 +1812,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         var_offset_to_add += pg_sizes[i];
                     }
 
-                    adios_mpi_amr_add_offset (var_offset_to_add
+                    adios_mpi_bgq_add_offset (var_offset_to_add
                                              ,attr_offset_to_add
                                              ,md->old_vars_root
                                              ,md->old_attrs_root
@@ -2140,12 +1836,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     uint32_t size = 0, total_size = 0;
                     int i;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
-                               ,0, new_comm
+                               ,0, md->file_comm
                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     for (i = 0; i < new_group_size; i++)
                     {
@@ -2155,12 +1849,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
-                                ,MPI_BYTE, 0, new_comm
+                                ,MPI_BYTE, 0, md->file_comm
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -2175,16 +1867,12 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
-                        if (md->g_merging_pgs)
-                            new_pg_root = 0;
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
+                        adios_merge_index_v1 (md->index
                                              ,new_pg_root, new_vars_root
                                              ,new_attrs_root
                                              );
@@ -2204,20 +1892,29 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
+                                         ,0, md->index
                                          );
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+                    uint32_t temp_buffer_size = buffer_size;
+
+/*
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, new_comm
                                );
+*/
+                    MPI_Gather (&temp_buffer_size, 1, MPI_INT, 0, 0, MPI_INT
+                               ,0, md->file_comm
+                               );
+/*
                     MPI_Gatherv (buffer, buffer_size, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, new_comm
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+*/
+                    MPI_Gatherv (buffer, temp_buffer_size, MPI_BYTE
+                                ,0, 0, 0, MPI_BYTE
+                                ,0, md->file_comm
+                                );
                 }
             }
 
@@ -2229,9 +1926,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
-                                     ,md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
+                                     ,md->index
                                      );
 
                 adios_write_version_flag_v1 (&buffer, &buffer_size, &buffer_offset, flag);
@@ -2245,20 +1940,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     write_thread_data.base_offset = &index_start;
                     write_thread_data.aggr_buff = buffer;
                     write_thread_data.total_data_size = &total_data_size1;
-
-                    if (md->g_threading)
-                    {
-                        pthread_create (&md->g_swt, NULL
-                                       ,adios_mpi_amr_do_write_thread
-                                       ,(void *) &write_thread_data
-                                       );
-                    }
-                    else
-                    {
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                        adios_mpi_amr_do_write_thread ((void *) &write_thread_data); 
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                    }
+                    adios_mpi_bgq_do_write_thread ((void *) &write_thread_data); 
                 }
             }
 
@@ -2272,12 +1954,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     char * recv_buffer = 0;
                     uint32_t size = 0, total_size = 0;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, new_comm2
                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     for (i = 0; i < new_group_size2; i++)
                     {
@@ -2287,12 +1967,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, new_comm2
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -2307,14 +1985,12 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
+                        adios_merge_index_v1 (md->index
                                              ,new_pg_root, new_vars_root
                                              ,new_attrs_root
                                              );
@@ -2338,12 +2014,11 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                     uint64_t buffer_offset2 = 0;
 
                     adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
+                                         ,0, md->index
                                          );
+                    uint32_t temp_buffer_size2 = buffer_size2;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+/*
                     MPI_Gather (&buffer_size2, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, new_comm2
@@ -2352,7 +2027,16 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, new_comm2
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+*/
+                    MPI_Gather (&temp_buffer_size2, 1, MPI_INT
+                               ,0, 0, MPI_INT
+                               ,0, new_comm2
+                               );
+                    MPI_Gatherv (buffer2, temp_buffer_size2, MPI_BYTE
+                                ,0, 0, 0, MPI_BYTE
+                                ,0, new_comm2
+                                );
+
 
                     if (buffer2)
                     {
@@ -2376,7 +2060,7 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
                 adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                      ,&global_index_buffer_offset, global_index_start
-                                     ,md->old_pg_root, md->old_vars_root, md->old_attrs_root
+                                     ,md->index
                                      );
 
                 flag |= ADIOS_VERSION_HAVE_SUBFILE;
@@ -2387,14 +2071,12 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
                                             ,flag
                                             );
 
-                START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                adios_mpi_amr_striping_unit_write(
+                adios_mpi_bgq_striping_unit_write(
                                   md->mfh,
                                   -1,
                                   global_index_buffer,
                                   global_index_buffer_offset
                                   );
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
 
                 if (global_index_buffer)
                 {
@@ -2407,11 +2089,6 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
 
             if (is_aggregator (md->rank))
             {
-                if (md->g_threading)
-                {
-                    pthread_join (md->g_swt, NULL);
-                }
-
                 FREE (aggr_buff);
             }
 
@@ -2419,19 +2096,10 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
             buffer_size = 0;
             buffer_offset = 0;
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
+            adios_clear_index_v1 (md->index);
+            md->index = 0;
 
             md->g_num_aggregators = 0;
-            md->g_color1 = 0;
             md->g_color2 = 0;
 
             FREE (md->subfile_name);
@@ -2461,14 +2129,15 @@ void adios_mpi_amr_bg_close (struct adios_file_struct * fd
     md->mfh = 0;
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
-
+#endif
     return;
 }
 
-void adios_mpi_amr_ag_close (struct adios_file_struct * fd
+void adios_mpi_bgq_ag_close (struct adios_file_struct * fd
                             ,struct adios_method_struct * method
                             )
 {
+#if 0
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                  method->method_data;
     struct adios_attribute_struct * a = fd->group->attributes;
@@ -2483,7 +2152,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
         case adios_mode_append:
         {
             adios_error (err_invalid_file_mode, 
-                        "Only \"w\" mode is supported by MPI_AMR Aggregation IO\n");
+                        "Only \"w\" mode is supported by MPI_BGQ Aggregation IO\n");
             break;
         }
         case adios_mode_write:
@@ -2498,15 +2167,14 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             int i, new_rank, new_group_size, new_rank2, new_group_size2, total_data_size = 0, total_data_size1 = 0;;
             MPI_Comm new_comm, new_comm2;
 
-            START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
+/*
             MPI_Comm_split (md->group_comm, md->g_color1, md->rank, &new_comm);
             MPI_Comm_rank (new_comm, &new_rank);
             MPI_Comm_size (new_comm, &new_group_size);
-
+*/
             MPI_Comm_split (md->group_comm, md->g_color2, md->rank, &new_comm2);
             MPI_Comm_rank (new_comm2, &new_rank2);
             MPI_Comm_size (new_comm2, &new_group_size2);
-            STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
             if (fd->shared_buffer == adios_flag_no)
             {
@@ -2522,18 +2190,16 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 uint64_t count;
                 if (is_aggregator(md->rank))
                 {
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    count = adios_mpi_amr_striping_unit_write(
+                    count = adios_mpi_bgq_striping_unit_write(
                                    md->fh
                                   ,md->vars_start
                                   ,fd->buffer
                                   ,md->vars_header_size
                                   );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
 
                     if (count != md->vars_header_size)
                     {
-                        log_warn ("d:MPI_AMR method tried to write %llu, only wrote %d\n",
+                        log_warn ("d:MPI_BGQ method tried to write %llu, only wrote %d\n",
                                 md->vars_header_size, count);
                     }
                 }
@@ -2563,12 +2229,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         int total_size = 0;
                         void * aggr_buff;
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gather (&fd->bytes_written, 1, MPI_INT
                                 ,bytes_written, 1, MPI_INT
                                 ,0, new_comm
                                 );
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         disp[0] = 0;
                         for (i = 1; i < new_group_size; i++)
@@ -2584,33 +2248,29 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                             if (aggr_buff == 0)
                             {
                                 adios_error (err_no_memory, 
-                                        "MPI_AMR method (AG): Cannot allocate aggregation buffer.\n"
+                                        "MPI_BGQ method (AG): Cannot allocate aggregation buffer.\n"
                                         "Need to increase the number of aggregators.\n"
                                         );
                                 return;
                             }
                         }
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Gatherv (fd->buffer, fd->bytes_written, MPI_BYTE
                                 ,aggr_buff, bytes_written, disp, MPI_BYTE
                                 ,0, new_comm);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         if (is_aggregator (md->rank))
                         {
-                            START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                            count = adios_mpi_amr_striping_unit_write(
+                            count = adios_mpi_bgq_striping_unit_write(
                                     md->fh,
                                     -1,
                                     aggr_buff, //fd->buffer,
                                     total_size //fd->bytes_written,
                                     );
-                            STOP_TIMER (ADIOS_TIMER_MPI_AMR_IO);
 
                             if (count != total_size)
                             {
-                                log_warn ("e:MPI_AMR method tried to write %llu, only wrote %llu\n",
+                                log_warn ("e:MPI_BGQ method tried to write %llu, only wrote %llu\n",
                                         fd->bytes_written, count);
                             }
                         }
@@ -2627,9 +2287,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                             }
                         }
 
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                         MPI_Bcast (new_offsets, new_group_size, MPI_LONG_LONG, 0, new_comm);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                         a->write_offset = new_offsets[new_rank];
 
@@ -2653,18 +2311,16 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 {
                     *(uint16_t *)fd->buffer = *(uint16_t *)fd->buffer * new_group_size;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                    count = adios_mpi_amr_striping_unit_write(
+                    count = adios_mpi_bgq_striping_unit_write(
                                   md->fh,
                                   md->vars_start,
                                   fd->buffer,
                                   md->vars_header_size
                                   );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
 
                     if (count != md->vars_header_size)
                     {
-                        log_warn ("f:MPI_AMR method tried to write %llu, only wrote %llu\n",
+                        log_warn ("f:MPI_BGQ method tried to write %llu, only wrote %llu\n",
                                   md->vars_header_size, count);
                     }
                 }
@@ -2676,9 +2332,8 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
             }
 
             // if not merge PG's on the aggregator side
-            if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
+            if (fd->shared_buffer == adios_flag_yes)
             {
-                //printf ("do not merge pg\n");
                 struct adios_bp_buffer_struct_v1 b;
                 struct adios_process_group_header_struct_v1 pg_header;
                 struct adios_vars_header_struct_v1 vars_header;
@@ -2691,18 +2346,16 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 if (pg_sizes == 0 || disp == 0)
                 {
                     adios_error (err_no_memory, 
-                            "MPI_AMR method (AG): Cannot allocate buffers (%d bytes) "
+                            "MPI_BGQ method (AG): Cannot allocate buffers (%d bytes) "
                             "for merging process blocks.\n",
                             2*4*new_group_size
                             );
                     return;
                 }
 
-                START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Allgather (&pg_size, 1, MPI_INT
                               ,pg_sizes, 1, MPI_INT
                               ,new_comm);
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                 disp[0] = 0;
                 for (i = 1; i < new_group_size; i++)
@@ -2724,7 +2377,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     if (aggr_buff == 0)
                     {
                         adios_error (err_no_memory, 
-                                "MPI_AMR method (AG): Cannot allocate %llu bytes "
+                                "MPI_BGQ method (AG): Cannot allocate %llu bytes "
                                 "for aggregation buffer.\n"
                                 "Need to increase the number of aggregators.\n",
                                 total_data_size);
@@ -2735,259 +2388,15 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 {
                 }
 
-                START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 MPI_Gatherv (fd->buffer, pg_size, MPI_BYTE
                             ,aggr_buff, pg_sizes, disp, MPI_BYTE
                             ,0, new_comm);
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-            }
-
-            // Merge PG's on the aggregator side
-            if (fd->shared_buffer == adios_flag_yes && md->g_merging_pgs)
-            {
-                log_warn ("MPI_AMR method (AG): Merging process blocks is not supported yet\n");
-                // Merge PG's on the aggregator side
-                struct adios_bp_buffer_struct_v1 b;
-                struct adios_process_group_header_struct_v1 pg_header;
-                struct adios_vars_header_struct_v1 vars_header;
-                int pg_size, header_size;
-                uint32_t attr_size;
-                uint64_t vars_count_offset;
-
-                // Unfortunately, we need to walk through the buffer to get vars count
-                b.buff = fd->buffer;
-                b.change_endianness = md->b.change_endianness;
-                b.offset = 0;
-                b.length = fd->bytes_written;
-
-                adios_parse_process_group_header_v1 (&b, &pg_header);
-                vars_count_offset = b.offset;
-                adios_clear_process_group_header_v1 (&pg_header);
-
-                adios_parse_vars_header_v1 (&b, &vars_header);
-                header_size = b.offset;
-                attr_size = adios_mpi_amr_calculate_attributes_size (fd);
-
-                // reset vars count
-                if (vars_header.count * new_group_size > UINT16_MAX)
-                {
-                    adios_error (err_too_many_variables, 
-                        "MPI_AMR method (AG): Variable count exceeds UINT16_MAX (%d), UINT16_MAX");
-                    return;
-                }
-                *(uint16_t *) (b.buff + vars_count_offset) = 
-                                vars_header.count * new_group_size;
-
-                // attributes size is save in the end
-                adios_mpi_amr_buffer_write (&fd->buffer, &fd->buffer_size, &fd->offset, &attr_size, SHIM_FOOTER_SIZE);
-                fd->bytes_written += SHIM_FOOTER_SIZE;
-            
-                // PG header, vars header, vars, attrs header, attrs, 4 bytes
-                if (is_aggregator(md->rank))
-                {
-                    pg_size = fd->bytes_written;
-                }
-                else
-                {
-                    // Non-aggregator process doesn't need to send pg header + vars header
-                    pg_size = fd->bytes_written - header_size;
-                }
-
-                pg_sizes = (int *) malloc (new_group_size * 4);
-                attr_sizes = (int *) malloc (new_group_size * 4);
-                disp = (int *) malloc (new_group_size * 4);
-                sendbuf = (int *) malloc (2 * 4);
-                recvbuf = (int *) malloc (new_group_size * 2 * 4);
-                if (pg_sizes == 0 || attr_sizes == 0 || disp == 0
-                 || sendbuf == 0 || recvbuf == 0)
-                {
-                    adios_error (err_no_memory, 
-                            "MPI_AMR method (AG): Cannot allocate %llu bytes "
-                            "for send/recv/merge buffers.\n",
-                            5*4*new_group_size + 2*4
-                            );
-                    return;
-                }
-  
-                sendbuf[0] = pg_size;
-                sendbuf[1] = attr_size + SHIM_FOOTER_SIZE;
-
-                START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                MPI_Allgather (sendbuf, 2, MPI_INT
-                              ,recvbuf, 2, MPI_INT
-                              ,new_comm);
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-
-                for (i = 0; i < new_group_size; i++)
-                {
-                    pg_sizes[i] = recvbuf[i * 2];
-                    attr_sizes[i] = recvbuf[i * 2 + 1];
-                }
-   
-                free (sendbuf);
-                free (recvbuf);
-
-                disp[0] = 0;
-                for (i = 1; i < new_group_size; i++)
-                {
-                    disp[i] = disp[i - 1] + pg_sizes[i - 1];
-                }
-                total_data_size = disp[new_group_size - 1]
-                                + pg_sizes[new_group_size - 1];
-
-                if (is_aggregator (md->rank))
-                {
-                    aggr_buff = malloc (total_data_size);
-                    if (aggr_buff == 0)
-                    {
-                        adios_error (err_no_memory, "MPI_AMR method (AG): Cannot allocate "
-                                "%llu bytes for aggregation buffer.\n"
-                                "Need to increase the number of aggregators.\n",
-                                total_data_size);
-                        return;
-                    }
-                }
-                else
-                {
-                }
-
-                if (is_aggregator (md->rank))
-                { 
-                    uint32_t aggr_attr_size = 0;
-                    void * aggr_attr_buff, * temp_aggr_buff, * temp_aggr_attr_buff;
-                    uint16_t new_attr_count = 0, new_attr_len = 0;
-
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    MPI_Gatherv (fd->buffer, pg_size, MPI_BYTE
-                                ,aggr_buff, pg_sizes, disp, MPI_BYTE
-                                ,0, new_comm);
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-
-                    for (i= 0; i < new_group_size; i++)
-                    {
-                        aggr_attr_size += *(uint32_t *)(aggr_buff
-                                                       + disp[i]
-                                                       + pg_sizes[i]
-                                                       - SHIM_FOOTER_SIZE
-                                                       );
-                    }
-
-                    aggr_attr_buff = malloc (aggr_attr_size);
-                    if (aggr_attr_buff == 0)
-                    {
-                        adios_error (err_no_memory, "MPI_AMR method (AG): Cannot allocate "
-                                "%llu bytes for aggregation attribute buffer.\n"
-                                "Need to increase the number of aggregators.\n",
-                                aggr_attr_size);
-                        return;
-                    }
-
-                    temp_aggr_buff = aggr_buff
-                                   + pg_sizes[0]
-                                   - SHIM_FOOTER_SIZE
-                                   - attr_size;
-                    temp_aggr_attr_buff = aggr_attr_buff;
-
-                    for (i= 0; i < new_group_size; i++)
-                    {
-                        uint32_t temp_attr_size = *(uint32_t *)(aggr_buff
-                                                               + disp[i]
-                                                               + pg_sizes[i]
-                                                               - SHIM_FOOTER_SIZE
-                                                               );
-                        void * temp_attr_ptr = aggr_buff + disp[i] + pg_sizes[i] 
-                                             - SHIM_FOOTER_SIZE - temp_attr_size;
-
-                        new_attr_count += *(uint16_t *)temp_attr_ptr;
-
-                        if (i == 0)
-                        {
-                            new_attr_len += *(uint64_t *)(temp_attr_ptr + ATTR_COUNT_SIZE);
-
-                            memcpy (temp_aggr_attr_buff, temp_attr_ptr, temp_attr_size);
-                            temp_aggr_attr_buff += temp_attr_size;
-                        }
-                        else
-                        {
-                            new_attr_len += *(uint64_t *)(temp_attr_ptr + ATTR_COUNT_SIZE)
-                                          - ATTR_COUNT_SIZE - ATTR_LEN_SIZE;
-
-                            memcpy (temp_aggr_attr_buff
-                                   ,temp_attr_ptr + ATTR_COUNT_SIZE + ATTR_LEN_SIZE
-                                   ,temp_attr_size - ATTR_COUNT_SIZE - ATTR_LEN_SIZE
-                                   );
-                            temp_aggr_attr_buff += temp_attr_size - ATTR_COUNT_SIZE - ATTR_LEN_SIZE;
-
-                            memmove (temp_aggr_buff
-                                    ,aggr_buff + disp[i]
-                                    ,pg_sizes[i] - temp_attr_size - SHIM_FOOTER_SIZE
-                                    );
-                            temp_aggr_buff += pg_sizes[i] - temp_attr_size - SHIM_FOOTER_SIZE;
-                        }
-                    }
-
-                    memcpy (temp_aggr_buff, aggr_attr_buff, aggr_attr_size);
-
-                    *(uint16_t *)temp_aggr_buff = new_attr_count;  //attrs count
-                    *(uint64_t *)(temp_aggr_buff + ATTR_COUNT_SIZE) = new_attr_len;  //attrs length
-
-                    free (aggr_attr_buff);
-                }
-                else
-                {
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    MPI_Gatherv (fd->buffer + header_size, pg_size, MPI_BYTE
-                                ,aggr_buff, pg_sizes, disp, MPI_BYTE
-                                ,0, new_comm);
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                }
-
-                uint64_t count = 0;
-                if (is_aggregator(md->rank))
-                {
-#if 0
-                    pthread_join (t, NULL);
-          
-                    write_thread_data.fh = &md->fh;
-                    write_thread_data.base_offset = &fd->base_offset;
-                    write_thread_data.aggr_buff = aggr_buff;
-                    write_thread_data.total_data_size = &total_data_size;
- 
-                    pthread_create (&t, NULL
-                                   ,adios_mpi_amr_do_write_thread
-                                   ,(void *) &write_thread_data
-                                   );
-#endif
-
-#if 0 
-                    count = adios_mpi_amr_striping_unit_write(
-                               md->fh
-                              ,fd->base_offset
-                              ,aggr_buff
-                              ,total_data_size
-                              ,md->block_unit);
-
-                    if (count != total_data_size)
-                    {
-                        adios_error (err_unspecified, 
-                                     "Error in adios_mpi_amr_striping_unit_write()\n");
-                        return;
-                    }
-
-                    free (aggr_buff);
-#endif
-                }
-                else
-                {
-                }
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
 
-            if (fd->shared_buffer == adios_flag_yes && !md->g_merging_pgs)
+            if (fd->shared_buffer == adios_flag_yes)
             {
                 if (!is_aggregator(md->rank))
                 {
@@ -3018,7 +2427,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         var_offset_to_add += pg_sizes[i];
                     }
 
-                    adios_mpi_amr_add_offset (var_offset_to_add
+                    adios_mpi_bgq_add_offset (var_offset_to_add
                                               ,attr_offset_to_add
                                               ,md->old_vars_root
                                               ,md->old_attrs_root
@@ -3030,54 +2439,6 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 free (disp);
             }
 
-            if (fd->shared_buffer == adios_flag_yes && md->g_merging_pgs)
-            {
-                if (!is_aggregator(md->rank))
-                {
-                    uint64_t var_offset_to_add = 0, attr_offset_to_add = 0;
-                    uint64_t var_base_offset = 0, attr_base_offset = 0; 
-
-                    // change to relative offset
-                    if (md->old_vars_root)
-                    {
-                        var_base_offset = md->old_vars_root->characteristics [0].offset;
-                    }
-
-                    if (md->old_attrs_root)
-                    { 
-                        attr_base_offset = md->old_attrs_root->characteristics [0].offset;
-                    }
-
-                    adios_mpi_amr_subtract_offset (var_base_offset
-                                                   ,attr_base_offset
-                                                   ,md->old_vars_root
-                                                   ,md->old_attrs_root
-                                                   );
-
-                    for (i = 0; i < new_group_size; i++)
-                    {
-                        attr_offset_to_add += pg_sizes[i] - attr_sizes[i];  
-                    }
-
-                    for (i = 0; i < new_rank; i++)
-                    {
-                        attr_offset_to_add += attr_sizes[i] - SHIM_FOOTER_SIZE;  
-                        var_offset_to_add += pg_sizes[i] - attr_sizes[i]; 
-                    }
-
-                    adios_mpi_amr_add_offset (var_offset_to_add
-                                              ,attr_offset_to_add
-                                              ,md->old_vars_root
-                                              ,md->old_attrs_root
-                                              );
-                }
-
-                // pg_sizes, attr_sizs, disp are no longer needed from this point on.
-                free (pg_sizes);
-                free (attr_sizes);
-                free (disp);
-            }
-
             // if collective, gather the indexes from the rest and call
             if (md->group_comm != MPI_COMM_NULL)
             {
@@ -3090,12 +2451,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     uint32_t size = 0, total_size = 0;
                     int i;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, new_comm
                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     for (i = 0; i < new_group_size; i++)
                     {
@@ -3105,12 +2464,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, new_comm
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -3125,16 +2482,12 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
-                        if (md->g_merging_pgs)
-                            new_pg_root = 0;
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
+                        adios_merge_index_v1 (md->index
                                              ,new_pg_root, new_vars_root
                                              ,new_attrs_root
                                              );
@@ -3154,12 +2507,9 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
+                                         ,0, md->index
                                          );
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, new_comm
                                );
@@ -3167,7 +2517,6 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, new_comm
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                 }
             }
 
@@ -3189,9 +2538,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 #endif
                 adios_write_index_v1 (&buffer, &buffer_size
                                      ,&buffer_offset, index_start
-                                     ,md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
+                                     ,md->index
                                      );
 //FIXME
                 //adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset, flag);
@@ -3203,11 +2550,6 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     memcpy (aggr_buff + total_data_size, buffer, buffer_offset); 
 
                     // Waiting for the subfile to open if pthread is enabled
-                    if (md->g_threading)
-                    {
-                        pthread_join (md->g_sot, NULL);
-                    }
-
                     index_start1 = 0;
                     total_data_size1 = total_data_size + buffer_offset;
 
@@ -3216,20 +2558,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     write_thread_data.aggr_buff = aggr_buff;
                     write_thread_data.total_data_size = &total_data_size1;
 
-                    // Threading the write so that we can overlap write with index collection.
-                    if (md->g_threading)
-                    {
-                        pthread_create (&md->g_swt, NULL
-                                       ,adios_mpi_amr_do_write_thread
-                                       ,(void *) &write_thread_data
-                                       );
-                    }
-                    else
-                    {
-                        START_TIMER (ADIOS_TIMER_MPI_AMR_IO);
-                        adios_mpi_amr_do_write_thread ((void *) &write_thread_data);
-                        STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
-                    }
+                    adios_mpi_bgq_do_write_thread ((void *) &write_thread_data);
                 }
 #if 0
                 adios_mpi_amr_striping_unit_write(
@@ -3251,12 +2580,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     char * recv_buffer = 0;
                     uint32_t size = 0, total_size = 0;
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, new_comm2
                                );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     for (i = 0; i < new_group_size2; i++)
                     {
@@ -3266,12 +2593,10 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, new_comm2
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -3286,14 +2611,12 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
 
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
+                        adios_merge_index_v1 (md->index
                                              ,new_pg_root, new_vars_root
                                              ,new_attrs_root
                                              );
@@ -3317,12 +2640,9 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                     uint64_t buffer_offset2 = 0;
 
                     adios_write_index_v1 (&buffer2, &buffer_size2, &buffer_offset2
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
+                                         ,0, md->index
                                          );
 
-                    START_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
                     MPI_Gather (&buffer_size2, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, new_comm2
@@ -3331,7 +2651,6 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, new_comm2
                                 );
-                    STOP_TIMER (ADIOS_TIMER_MPI_AMR_COMM);
 
                     if (buffer2)
                     {
@@ -3355,7 +2674,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
                 adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                      ,&global_index_buffer_offset, global_index_start
-                                     ,md->old_pg_root, md->old_vars_root, md->old_attrs_root
+                                     ,md->index
                                      );
 
                 flag |= ADIOS_VERSION_HAVE_SUBFILE;
@@ -3379,14 +2698,12 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
                               ,MPI_INFO_NULL, &m_file
                               );
 #endif
-                START_TIMER (ADIOS_TIMER_MPI_AMR_MD);
-                adios_mpi_amr_striping_unit_write(
+                adios_mpi_bgq_striping_unit_write(
                                   md->mfh,
                                   -1,
                                   global_index_buffer,
                                   global_index_buffer_offset
                                   );
-                STOP_TIMER (ADIOS_TIMER_MPI_AMR_MD);
 
                 if (global_index_buffer)
                 {
@@ -3399,35 +2716,19 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
 
             if (is_aggregator (md->rank))
             {
-                if (md->g_threading)
-                {
-                    pthread_join (md->g_swt, NULL);
-                }
-
                 FREE (aggr_buff);
             }
             FREE (buffer);
             buffer_size = 0;
             buffer_offset = 0;
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
-
+            adios_clear_index_v1 (md->index);
+            md->index = 0;
             md->g_num_aggregators = 0;
-            md->g_color1 = 0;
             md->g_color2 = 0;
 
             FREE (md->subfile_name);
             FREE (md->g_is_aggregator);
-            FREE (md->g_ost_skipping_list);
             FREE (md->g_offsets);
             FREE (md->open_thread_data);
             break;
@@ -3436,7 +2737,7 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
         default:
         {
             adios_error (err_invalid_file_mode, 
-                    "MPI_AMR method (AG): Unknown file mode (%d) at close time\n", 
+                    "MPI_BGQ method (AG): Unknown file mode (%d) at close time\n", 
                     fd->mode);
         }
     }
@@ -3459,48 +2760,51 @@ void adios_mpi_amr_ag_close (struct adios_file_struct * fd
     md->mfh = 0;
     md->req = 0;
     memset (&md->status, 0, sizeof (MPI_Status));
+#endif
+    return;
 }
 
-void adios_mpi_amr_close (struct adios_file_struct * fd
+void adios_mpi_bgq_close (struct adios_file_struct * fd
                      ,struct adios_method_struct * method
                      )
 {
-    START_TIMER (ADIOS_TIMER_MPI_AMR_AD_CLOSE);
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                  method->method_data;
-    if (md->g_io_type == ADIOS_MPI_AMR_IO_AG)
+    if (md->g_io_type == ADIOS_MPI_BGQ_IO_AG)
+    {
+        adios_mpi_bgq_ag_close (fd, method);
+    }
+    else if (md->g_io_type == ADIOS_MPI_BGQ_IO_BG)
     {
-        adios_mpi_amr_ag_close (fd, method);
+        adios_mpi_bgq_bg_close (fd, method);
     }
-    else if (md->g_io_type == ADIOS_MPI_AMR_IO_BG)
+    else if (md->g_io_type == ADIOS_MPI_BGQ_IO_SIMPLE)
     {
-        adios_mpi_amr_bg_close (fd, method);
+        adios_mpi_bgq_simple_close (fd, method);
     }
     else
     {
-        adios_error (err_invalid_write_method, "MPI_AMR method: unknown I/O type (%d). "
-                "Only MPI_AMR_AGGREGATION and MPI_AMR_BRIGADE are supported\n",
+        adios_error (err_invalid_write_method, "MPI_BGQ method: unknown I/O type",
                 md->g_io_type);
         return;
     }
-    STOP_TIMER (ADIOS_TIMER_MPI_AMR_AD_CLOSE);
 }
 
-void adios_mpi_amr_finalize (int mype, struct adios_method_struct * method)
+void adios_mpi_bgq_finalize (int mype, struct adios_method_struct * method)
 {
 // nothing to do here
-    if (adios_mpi_amr_initialized)
-        adios_mpi_amr_initialized = 0;
+    if (adios_mpi_bgq_initialized)
+        adios_mpi_bgq_initialized = 0;
 }
 
-void adios_mpi_amr_end_iteration (struct adios_method_struct * method)
+void adios_mpi_bgq_end_iteration (struct adios_method_struct * method)
 {
 }
 
-void adios_mpi_amr_start_calculation (struct adios_method_struct * method)
+void adios_mpi_bgq_start_calculation (struct adios_method_struct * method)
 {
 }
 
-void adios_mpi_amr_stop_calculation (struct adios_method_struct * method)
+void adios_mpi_bgq_stop_calculation (struct adios_method_struct * method)
 {
 }
diff --git a/src/write/adios_mpi_lustre.c b/src/write/adios_mpi_lustre.c
index 9afa584..090908d 100644
--- a/src/write/adios_mpi_lustre.c
+++ b/src/write/adios_mpi_lustre.c
@@ -48,9 +48,7 @@ struct adios_MPI_data_struct
 
     struct adios_bp_buffer_struct_v1 b;
 
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
+    struct adios_index_struct_v1 * index;
 
     uint64_t vars_start;
     uint64_t vars_header_size;
@@ -165,10 +163,10 @@ void print_metrics (struct adios_MPI_data_struct * md, int iteration)
 #endif
 
 #if defined(__APPLE__)
-#	include <sys/param.h>
-#	include <sys/mount.h>
+#    include <sys/param.h>
+#    include <sys/mount.h>
 #else
-#	include <sys/statfs.h>
+#    include <sys/statfs.h>
 #endif
 
 // this should be determined at configure time
@@ -527,9 +525,7 @@ void adios_mpi_lustre_init (const PairStruct * parameters
     md->rank = 0;
     md->size = 0;
     md->group_comm = method->init_comm;//unused, adios_open sets current comm
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
+    md->index = adios_alloc_index_v1(1); // with hashtables
     md->vars_start = 0;
     md->vars_header_size = 0;
     md->striping_unit = 0;
@@ -591,9 +587,10 @@ int adios_mpi_lustre_open (struct adios_file_struct * fd
 static
 void build_offsets (struct adios_bp_buffer_struct_v1 * b
                    ,MPI_Offset * offsets, uint64_t size, char * group_name
-                   ,struct adios_index_process_group_struct_v1 * pg_root
+                   ,struct adios_index_struct_v1 * index
                    )
 {
+    struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
     while (pg_root)
     {
         if (!strcasecmp (pg_root->group_name, group_name))
@@ -637,7 +634,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
     gettimeofday (&t21, NULL);
 #endif
 
-	START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_SHOULD_BUFFER);
+    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_SHOULD_BUFFER);
 
 
     name = malloc (strlen (method->base_path) + strlen (fd->name) + 1);
@@ -701,9 +698,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.pg_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_process_group_index_v1 (&md->b
-                                                   ,&md->old_pg_root
-                                                   );
+                adios_parse_process_group_index_v1 (&md->b, &md->index->pg_root);
 
 #if 1
                 adios_init_buffer_read_vars_index (&md->b);
@@ -713,7 +708,9 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
+                adios_parse_vars_index_v1 (&md->b, &md->index->vars_root, 
+                                           md->index->hashtbl_vars,
+                                           &md->index->vars_tail);
 
                 adios_init_buffer_read_attributes_index (&md->b);
                 MPI_File_seek (md->fh, md->b.attrs_index_offset
@@ -722,7 +719,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                 MPI_File_read (md->fh, md->b.buff, md->b.attrs_size, MPI_BYTE
                               ,&md->status
                               );
-                adios_parse_attributes_index_v1 (&md->b, &md->old_attrs_root);
+                adios_parse_attributes_index_v1 (&md->b, &md->index->attrs_root);
 #endif
 
                 fd->base_offset = md->b.end_of_pgs;
@@ -741,7 +738,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
 
                     // go through the pg index to build the offsets array
                     build_offsets (&md->b, offsets, md->size
-                                  ,fd->group->name, md->old_pg_root
+                                  ,fd->group->name, md->index
                                   );
                     MPI_Scatter (offsets, 3, MPI_LONG_LONG
                                 ,MPI_IN_PLACE, 3, MPI_LONG_LONG
@@ -1032,9 +1029,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                     MPI_File_read (md->fh, md->b.buff, md->b.pg_size, MPI_BYTE
                                   ,&md->status
                                   );
-                    adios_parse_process_group_index_v1 (&md->b
-                                                       ,&md->old_pg_root
-                                                       );
+                    adios_parse_process_group_index_v1 (&md->b ,&md->index->pg_root);
 
                     adios_init_buffer_read_vars_index (&md->b);
                     MPI_File_seek (md->fh, md->b.vars_index_offset
@@ -1043,7 +1038,10 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                     MPI_File_read (md->fh, md->b.buff, md->b.vars_size, MPI_BYTE
                                   ,&md->status
                                   );
-                    adios_parse_vars_index_v1 (&md->b, &md->old_vars_root);
+                    adios_parse_vars_index_v1 (&md->b, &md->index->vars_root, 
+                                               md->index->hashtbl_vars,
+                                               &md->index->vars_tail);
+
 
                     adios_init_buffer_read_attributes_index (&md->b);
                     MPI_File_seek (md->fh, md->b.attrs_index_offset
@@ -1053,7 +1051,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
                                   ,MPI_BYTE, &md->status
                                   );
                     adios_parse_attributes_index_v1 (&md->b
-                                                    ,&md->old_attrs_root
+                                                    ,&md->index->attrs_root
                                                     );
 
                     fd->base_offset = md->b.end_of_pgs;
@@ -1295,7 +1293,7 @@ enum ADIOS_FLAG adios_mpi_lustre_should_buffer (struct adios_file_struct * fd
         adios_shared_buffer_free (&md->b);
     }
 
-	STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_SHOULD_BUFFER);
+    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_SHOULD_BUFFER);
 
 #if COLLECT_METRICS
     gettimeofday (&t22, NULL);
@@ -1312,7 +1310,7 @@ void adios_mpi_lustre_write (struct adios_file_struct * fd
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                       method->method_data;
 
-	START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_WRITE);
+    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_WRITE);
 
 
     if (v->got_buffer == adios_flag_yes)
@@ -1383,7 +1381,7 @@ void adios_mpi_lustre_write (struct adios_file_struct * fd
         adios_shared_buffer_free (&md->b);
     }
 
-	STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_WRITE);
+    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_WRITE);
 
 
 #if COLLECT_METRICS
@@ -1588,7 +1586,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
     static int iteration = 0;
 #endif
 
-	START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_CLOSE);
+    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_CLOSE);
 
     switch (fd->mode)
     {
@@ -1625,14 +1623,14 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 // fd->vars_start gets updated with the size written
                 uint64_t count;
                 int retlen;
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 count = adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   md->vars_start,
                                   fd->buffer,
                                   md->vars_header_size,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 if (count != md->vars_header_size)
                 {
                     fprintf (stderr, "d:MPI method tried to write %llu, "
@@ -1691,7 +1689,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 fd->offset = fd->base_offset - md->vars_start;
                 fd->vars_start = 0;
                 fd->buffer_size = 0;
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 adios_write_close_attributes_v1 (fd);
                 // fd->vars_start gets updated with the size written
                 count = adios_mpi_lustre_striping_unit_write(
@@ -1700,7 +1698,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                                   fd->buffer,
                                   md->vars_header_size,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 if (count != md->vars_header_size)
                 {
                     fprintf (stderr, "f:MPI method tried to write %llu, "
@@ -1723,9 +1721,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
             gettimeofday (&t12, NULL);
 #endif
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
             // if collective, gather the indexes from the rest and call
             if (md->group_comm != MPI_COMM_NULL)
             {
@@ -1738,12 +1734,12 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                     uint32_t total_size = 0;
                     int i;
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, md->group_comm
                                );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
 
                     for (i = 0; i < md->size; i++)
                     {
@@ -1753,12 +1749,12 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, md->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -1773,19 +1769,15 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
                          */
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -1801,20 +1793,17 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
-                    MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    MPI_Gather (&buffer_offset, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, md->group_comm
                                );
-                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, md->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                 }
             }
 
@@ -1828,33 +1817,30 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                     fprintf (stderr, "adios_mpi_write exceeds pg bound. File is corrupted. "
                              "Need to enlarge group size. \n");
 
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
                 adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   fd->base_offset,
                                   fd->buffer,
                                   fd->bytes_written,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
             }
 
             if (md->rank == 0)
             {
                 adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                     ,index_start, md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,index_start, md->index);
                 adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   md->b.pg_index_offset,
                                   buffer,
                                   buffer_offset,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
             }
 #if COLLECT_METRICS
             gettimeofday (&t8, NULL);
@@ -1874,16 +1860,6 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 buffer_offset = 0;
             }
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
 #if COLLECT_METRICS
             gettimeofday (&t11, NULL);
             t15.tv_sec = t11.tv_sec;
@@ -1911,14 +1887,14 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 adios_write_close_vars_v1 (fd);
                 // fd->vars_start gets updated with the size written
                 uint64_t count;
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 count = adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   md->vars_start,
                                   fd->buffer,
                                   md->vars_header_size,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 if (count != md->vars_header_size)
                 {
                     fprintf (stderr, "d:MPI method tried to write %llu, "
@@ -1976,14 +1952,14 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 fd->buffer_size = 0;
                 adios_write_close_attributes_v1 (fd);
                 // fd->vars_start gets updated with the size written
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 count = adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   md->vars_start,
                                   fd->buffer,
                                   md->vars_header_size,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 if (count != md->vars_header_size)
                 {
                     fprintf (stderr, "f:MPI method tried to write %llu, "
@@ -1997,9 +1973,7 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
             }
 
             // build index appending to any existing index
-            adios_build_index_v1 (fd, &md->old_pg_root, &md->old_vars_root
-                                 ,&md->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, md->index);
             // if collective, gather the indexes from the rest and call
             if (md->group_comm != MPI_COMM_NULL)
             {
@@ -2012,12 +1986,12 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                     uint32_t total_size = 0;
                     int i;
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, md->group_comm
                                );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
 
                     for (i = 0; i < md->size; i++)
                     {
@@ -2027,12 +2001,12 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, md->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
 
                     char * buffer_save = md->b.buff;
                     uint64_t buffer_size_save = md->b.length;
@@ -2047,19 +2021,15 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&md->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&md->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&md->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&md->b
                                                         ,&new_attrs_root
                                                         );
                          */
-                        adios_merge_index_v1 (&md->old_pg_root
-                                             ,&md->old_vars_root
-                                             ,&md->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (md->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -2075,68 +2045,51 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
                 else
                 {
                     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                         ,0, md->old_pg_root
-                                         ,md->old_vars_root
-                                         ,md->old_attrs_root
-                                         );
+                                         ,0, md->index);
 
-					START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
-                    MPI_Gather (&buffer_size, 1, MPI_INT, 0, 0, MPI_INT
+                    START_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    MPI_Gather (&buffer_offset, 1, MPI_INT, 0, 0, MPI_INT
                                ,0, md->group_comm
                                );
-                    MPI_Gatherv (buffer, buffer_size, MPI_BYTE
+                    MPI_Gatherv (buffer, buffer_offset, MPI_BYTE
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, md->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
+                    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_COMM);
                 }
             }
 
             if (fd->shared_buffer == adios_flag_yes)
             {
                 // everyone writes their data
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
                 adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   fd->base_offset,
                                   fd->buffer,
                                   fd->bytes_written,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_IO);
             }
 
             if (md->rank == 0)
             {
                 adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                     ,index_start, md->old_pg_root
-                                     ,md->old_vars_root
-                                     ,md->old_attrs_root
-                                     );
+                                     ,index_start, md->index);
                 adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
-				START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                START_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
                 adios_mpi_lustre_striping_unit_write(
                                   md->fh,
                                   md->b.pg_index_offset,
                                   buffer,
                                   buffer_offset,
                                   md->block_unit);
-				STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
+                STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_MD);
             }
 
             free (buffer);
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-            adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                                 ,md->old_attrs_root
-                                 );
-            new_pg_root = 0;
-            new_vars_root = 0;
-            new_attrs_root = 0;
-            md->old_pg_root = 0;
-            md->old_vars_root = 0;
-            md->old_attrs_root = 0;
-
             break;
         }
 
@@ -2162,14 +2115,9 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
     memset (&md->status, 0, sizeof (MPI_Status));
     md->group_comm = MPI_COMM_NULL;
 
-    adios_clear_index_v1 (md->old_pg_root, md->old_vars_root
-                         ,md->old_attrs_root
-                         );
-    md->old_pg_root = 0;
-    md->old_vars_root = 0;
-    md->old_attrs_root = 0;
+    adios_clear_index_v1 (md->index);
 
-	STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_CLOSE);
+    STOP_TIMER (ADIOS_TIMER_MPI_LUSTRE_AD_CLOSE);
 
 #if COLLECT_METRICS
     print_metrics (md, iteration++);
@@ -2178,7 +2126,10 @@ void adios_mpi_lustre_close (struct adios_file_struct * fd
 
 void adios_mpi_lustre_finalize (int mype, struct adios_method_struct * method)
 {
-// nothing to do here
+    struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
+                                                 method->method_data;
+    adios_free_index_v1 (md->index);
+
     if (adios_mpi_lustre_initialized)
         adios_mpi_lustre_initialized = 0;
 }
diff --git a/src/write/adios_nc4.c b/src/write/adios_nc4.c
index d42e5ea..505f484 100644
--- a/src/write/adios_nc4.c
+++ b/src/write/adios_nc4.c
@@ -240,14 +240,17 @@ static void parse_dimension_size(
         struct adios_dimension_item_struct *dim,
         size_t *dimsize)
 {
-    struct adios_var_struct *var_linked = NULL;
     struct adios_attribute_struct *attr_linked;
-    if (dim->id) {
-        var_linked = adios_find_var_by_id (pvar_root , dim->id);
-        if (!var_linked) {
-            attr_linked = adios_find_attribute_by_id (patt_root, dim->id);
-            if (!attr_linked->var) {
-                switch (attr_linked->type) {
+    if (dim->var) {
+        if (dim->var->data) {
+            *dimsize = *(int *)dim->var->data;
+        }
+    }
+    else if (dim->attr) 
+    {
+        attr_linked = dim->attr;
+        if (!attr_linked->var) {
+            switch (attr_linked->type) {
                 case adios_unsigned_byte:
                     *dimsize = *(uint8_t *)attr_linked->value;
                     break;
@@ -276,16 +279,14 @@ static void parse_dimension_size(
                     fprintf (stderr, "Invalid datatype for array dimension on "
                             "var %s: %s\n"
                             ,attr_linked->name
-                            ,adios_type_to_string_int (var_linked->type)
-                    );
+                            ,adios_type_to_string_int (attr_linked->type)
+                            );
                     break;
-                }
-            } else {
-                var_linked = attr_linked->var;
             }
-        }
-        if (var_linked && var_linked->data) {
-            *dimsize = *(int *)var_linked->data;
+        } else {
+            if (attr_linked->var->data) {
+                *dimsize = *(int *)attr_linked->var->data;
+            }
         }
     } else {
         if (dim->time_index == adios_flag_yes) {
@@ -307,24 +308,16 @@ static void parse_dimension_name(
 {
     struct adios_var_struct *var_linked = NULL;
     struct adios_attribute_struct *attr_linked;
-    if (dim->id) {
-        var_linked = adios_find_var_by_id (pvar_root , dim->id);
-        if (!var_linked) {
-            attr_linked = adios_find_attribute_by_id (patt_root, dim->id);
-            if (!attr_linked->var) {
-//				strcpy(dimname, attr_linked->name);
-                sprintf(dimname, "%s_dim", attr_linked->name);
-            } else {
-                var_linked = attr_linked->var;
-            }
-        }
-        if (var_linked && var_linked->name) {
-//			strcpy(dimname, var_linked->name);
-            sprintf(dimname, "%s_dim", var_linked->name);
+    if (dim->var) {
+        sprintf(dimname, "%s_dim", dim->var->name);
+    } else if (dim->attr) {
+        if (!dim->attr->var) {
+            sprintf(dimname, "%s_dim", dim->attr->name);
+        } else {
+            sprintf(dimname, "%s_dim", dim->attr->var->name);
         }
     } else {
         if (dim->time_index == adios_flag_yes) {
-//			strcpy(dimname, group->time_index_name);
             sprintf(dimname, "%s_dim", group->time_index_name);
         } else {
             if (dim->rank > 0) {
@@ -372,7 +365,7 @@ static int write_attribute(
         ncd_gen_name(varname, patt->path, "");
         rc = nc_inq_varid(ncid, varname, &varid);
         if (rc == NC_NOERR) {
-//    		if (myrank==0) fprintf (stderr, "NC4 ERROR variable(%s) exists in write_attribute, rc=%d\n", varname, rc);
+//            if (myrank==0) fprintf (stderr, "NC4 ERROR variable(%s) exists in write_attribute, rc=%d\n", varname, rc);
         } else if (rc == NC_ENOTVAR) {
             if (myrank==0) fprintf (stderr, "NC4 ERROR variable(%s) does not exist in write_attribute, rc=%d\n", varname, rc);
             err_code = -2;
@@ -384,22 +377,22 @@ static int write_attribute(
         }
     }
 
-//	printf("looking for var(%s)\n", last);
-//	printf("got varid(%d) for grp_id(%d).variable(%s) in write_attribute\n", varid, ncid, last);
+//    printf("looking for var(%s)\n", last);
+//    printf("got varid(%d) for grp_id(%d).variable(%s) in write_attribute\n", varid, ncid, last);
     rc = nc_inq_attid(ncid, varid, attname, &attid);
     if (rc == NC_NOERR) {
         if (myrank==0) fprintf (stderr, "NC4 ERROR attribute(%s) already exists in write_attribute, rc=%d\n", attname, rc);
         err_code = 0;
         goto escape;
     } else if (rc == NC_ENOTATT) {
-//		if (myrank==0) fprintf (stderr, "NC4 ERROR attribute(%s) does not exist in write_attribute, rc=%d\n", attname, rc);
+//        if (myrank==0) fprintf (stderr, "NC4 ERROR attribute(%s) does not exist in write_attribute, rc=%d\n", attname, rc);
     } else {
         if (myrank==0) fprintf (stderr, "NC4 ERROR inquiring about attribute(%s) in write_attribute, rc=%d\n", attname, rc);
         err_code = -2;
         goto escape;
     }
 
-//	printf("patt->type=%d attname : %s\n", patt->type, attname);
+//    printf("patt->type=%d attname : %s\n", patt->type, attname);
     if (patt->type == -1) {
         var_linked = patt->var;
         if (!var_linked || (var_linked && !var_linked->data)) {
@@ -526,34 +519,38 @@ static int decipher_dims(
     int local_offset_count=0;
 
     char dimname[255];
+    void * id;
 
     memset(deciphered_dims, 0, sizeof(deciphered_dims_t));
 
     dims=pvar->dimensions;
     while (dims) {
         if ((dims->dimension.time_index == adios_flag_yes) &&
-            (dims->dimension.id == 0)) {
+            (dims->dimension.var == NULL && dims->dimension.attr == NULL)) {
             has_timedim = adios_flag_yes;
             timedim_index = local_dim_count;
             local_dim_count++;
         } else if ((dims->dimension.rank != 0) ||
-            (dims->dimension.rank == 0) && (dims->dimension.id != 0)) {
+            (dims->dimension.rank == 0) && 
+            (dims->dimension.var != NULL || dims->dimension.attr != NULL)) {
             has_localdims=adios_flag_yes;
             local_dim_count++;
         }
         if ((dims->global_dimension.rank != 0) ||
-            (dims->global_dimension.rank == 0) && (dims->global_dimension.id != 0)) {
+            (dims->global_dimension.rank == 0) && 
+            (dims->global_dimension.var != NULL || dims->global_dimension.attr != NULL)) {
             has_globaldims=adios_flag_yes;
             global_dim_count++;
         }
         if ((dims->local_offset.rank != 0) ||
-            (dims->local_offset.rank == 0) && (dims->local_offset.id != 0)) {
+            (dims->local_offset.rank == 0) && 
+            (dims->local_offset.var != NULL || dims->local_offset.attr != NULL)) {
             has_localoffsets=adios_flag_yes;
             local_offset_count++;
         }
-        if (DEBUG>3) printf("gdims[%d].rank=%llu; id=%d, time_index=%d\n", i, dims->global_dimension.rank, dims->global_dimension.id, dims->global_dimension.time_index);
-        if (DEBUG>3) printf("ldims[%d].rank=%llu; id=%d, time_index=%d\n", i, dims->dimension.rank, dims->dimension.id, dims->dimension.time_index);
-        if (DEBUG>3) printf("loffs[%d].rank=%llu; id=%d, time_index=%d\n", i, dims->local_offset.rank, dims->local_offset.id, dims->local_offset.time_index);
+        if (DEBUG>3) printf("gdims[%d].rank=%llu; var=%d, attr=%d, time_index=%d\n", i, dims->global_dimension.rank, dims->global_dimension.var, dims->global_dimension.attr, dims->global_dimension.time_index);
+        if (DEBUG>3) printf("ldims[%d].rank=%llu; var=%d, attr=%d, time_index=%d\n", i, dims->dimension.rank, dims->dimension.var, dims->dimension.attr, dims->dimension.time_index);
+        if (DEBUG>3) printf("loffs[%d].rank=%llu; var=%d, attr=%d, time_index=%d\n", i, dims->local_offset.rank, dims->local_offset.var, dims->local_offset.attr, dims->local_offset.time_index);
         i++;
         dims = dims->next;
     }
@@ -583,8 +580,8 @@ static int decipher_dims(
         parse_dimension_name(group, pvar_root, patt_root, &dims->global_dimension, dimname);
         //ncd_gen_name(nc4_global_dimnames[i], pvar->path, dimname);
         ncd_gen_name(nc4_global_dimnames[i], "", dimname);
-        if (DEBUG>3) printf("global_dimension[%d]->name==%s, ->rank==%llu, ->id==%d, time_index==%d\n",
-                i, nc4_global_dimnames[i], dims->global_dimension.rank, dims->global_dimension.id, dims->global_dimension.time_index);
+        if (DEBUG>3) printf("global_dimension[%d]->name==%s, ->rank==%llu, ->var==%d, ->attr==%d, time_index==%d\n",
+                i, nc4_global_dimnames[i], dims->global_dimension.rank, dims->global_dimension.var, dims->global_dimension.attr, dims->global_dimension.time_index);
         if (dims) {
             dims = dims -> next;
         }
@@ -594,8 +591,8 @@ static int decipher_dims(
         parse_dimension_name(group, pvar_root, patt_root, &dims->dimension, dimname);
         //ncd_gen_name(nc4_local_dimnames[i], pvar->path, dimname);
         ncd_gen_name(nc4_local_dimnames[i], "", dimname);
-        if (DEBUG>3) printf("local_dimension[%d]->name ==%s, ->rank==%llu, ->id==%d, time_index==%d\n",
-                i, nc4_local_dimnames[i], dims->dimension.rank, dims->dimension.id, dims->dimension.time_index);
+        if (DEBUG>3) printf("local_dimension[%d]->name ==%s, ->rank==%llu, ->var==%d, ->attr==%d, time_index==%d\n",
+                i, nc4_local_dimnames[i], dims->dimension.rank, dims->dimension.var, dims->dimension.attr, dims->dimension.time_index);
         if (dims) {
             dims = dims -> next;
         }
@@ -605,8 +602,8 @@ static int decipher_dims(
         parse_dimension_name(group, pvar_root, patt_root, &dims->local_offset, dimname);
         //ncd_gen_name(nc4_local_offset_names[i], pvar->path, dimname);
         ncd_gen_name(nc4_local_offset_names[i], "", dimname);
-        if (DEBUG>3) printf("local_offset[%d]->name    ==%s, ->rank==%llu, ->id==%d, time_index==%d\n",
-                i, nc4_local_offset_names[i], dims->local_offset.rank, dims->local_offset.id, dims->local_offset.time_index);
+        if (DEBUG>3) printf("local_offset[%d]->name    ==%s, ->rank==%llu, ->var==%d, ->attr==%d, time_index==%d\n",
+                i, nc4_local_offset_names[i], dims->local_offset.rank, dims->local_offset.var, dims->local_offset.attr, dims->local_offset.time_index);
         if (dims) {
             dims = dims -> next;
         }
@@ -929,11 +926,11 @@ static int write_header(
     deciphered_dims_t deciphered_dims;
     char fullname[255];
 
-//	int myrank=md->rank;
-//	int nproc=md->size;
+//    int myrank=md->rank;
+//    int nproc=md->size;
 
-//	struct adios_var_struct *pvar=fd->group->vars;
-//	enum ADIOS_FLAG fortran_flag=fd->group->adios_host_language_fortran;
+//    struct adios_var_struct *pvar=fd->group->vars;
+//    enum ADIOS_FLAG fortran_flag=fd->group->adios_host_language_fortran;
 
     memset(&deciphered_dims, 0, sizeof(deciphered_dims_t));
 
@@ -1159,15 +1156,15 @@ static int write_var(
     Func_Timer("inqvar", rc = nc_inq_varid(ncid, fullname, &nc4_varid););
     if (rc == NC_ENOTVAR) {
         write_header(ncid, root_group, group, pvar_root, patt_root, pvar, fortran_flag, myrank, nproc);
-//		return 0;
+//        return 0;
     }
 
-//	Func_Timer("enddef", rc = nc_enddef(ncid););
-//	if (rc != NC_NOERR) {
-//		if (myrank==0) fprintf(stderr, "NC4 ERROR ending define mode for scalar variable(%s) in write_var, rc=%d\n", fullname, rc);
-////		return_code=-2;
-////		goto escape;
-//	}
+//    Func_Timer("enddef", rc = nc_enddef(ncid););
+//    if (rc != NC_NOERR) {
+//        if (myrank==0) fprintf(stderr, "NC4 ERROR ending define mode for scalar variable(%s) in write_var, rc=%d\n", fullname, rc);
+////        return_code=-2;
+////        goto escape;
+//    }
 
     if (DEBUG>3) printf("rank(%d) write_var: ncid(%lu) varid(%lu) pvar->data=%p\n", global_rank, ncid, nc4_varid, pvar->data);
 
@@ -1242,7 +1239,7 @@ static int write_var(
         if (DEBUG>3) printf("got varid(%d) for grp_id(%d).variable(%s) in write_var, rc=%d\n", nc4_varid, ncid, fullname, rc);
         if (DEBUG>3) printf("sizeof(size_t)==%d\n", sizeof(size_t));
 
-//		Func_Timer("putvars", rc = nc_put_vars(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, deciphered_dims.nc4_strides, pvar->data););
+//        Func_Timer("putvars", rc = nc_put_vars(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, deciphered_dims.nc4_strides, pvar->data););
         Func_Timer("putvars", rc = nc_put_vara(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, pvar->data););
         if (rc != NC_NOERR) {
             fprintf(stderr, "NC4 ERROR putting to array variable(%s) in write_var, rc=%d\n", fullname, rc);
@@ -1290,7 +1287,7 @@ static int write_var(
                     i, deciphered_dims.nc4_offsets[i],
                     i, deciphered_dims.nc4_localdims[i]);
         }
-//		Func_Timer("putvars", rc = nc_put_vars(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, deciphered_dims.nc4_strides, pvar->data););
+//        Func_Timer("putvars", rc = nc_put_vars(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, deciphered_dims.nc4_strides, pvar->data););
         Func_Timer("putvars", rc = nc_put_vara(ncid, nc4_varid, deciphered_dims.nc4_offsets, deciphered_dims.nc4_localdims, pvar->data););
         if (rc != NC_NOERR) {
             fprintf(stderr, "NC4 ERROR putting to array variable(%s) in write_var, rc=%d\n", fullname, rc);
@@ -1486,10 +1483,10 @@ void adios_nc4_write(
     md=of->md;
 
     if (fd->mode == adios_mode_write || fd->mode == adios_mode_append) {
-//		if (first_write == 1) {
-//			write_header(fd, md);
-//			first_write = 0;
-//		}
+//        if (first_write == 1) {
+//            write_header(fd, md);
+//            first_write = 0;
+//        }
 
         if (md->rank==0) {
             if (DEBUG>3) fprintf(stderr, "-------------------------\n");
@@ -1598,6 +1595,10 @@ void adios_nc4_close(
         }
     } else if (fd->mode == adios_mode_write || fd->mode == adios_mode_append) {
         if (DEBUG>3) fprintf(stderr, "entering nc4 write attribute mode!\n");
+        // FIXME: temporarily removed attributes writing and right now,
+        // we don't support writing attrs in PHDF5/NC4 methods. 
+     
+/*
         while(a) {
             if (strcmp(a->path, "/__adios__")) {
                 Func_Timer("write_attribute", 
@@ -1608,6 +1609,7 @@ void adios_nc4_close(
             }
             a = a->next;
         }
+*/
         if (md->rank==0) {
             if (DEBUG>1) fprintf(stderr, "-------------------------\n");
             if (DEBUG>1) fprintf(stderr, "writing done, nc4 file is virtually closed;\n");
diff --git a/src/write/adios_nssi.c b/src/write/adios_nssi.c
index 5f9b515..637b6e8 100644
--- a/src/write/adios_nssi.c
+++ b/src/write/adios_nssi.c
@@ -445,19 +445,19 @@ static void parse_dimension_name(
         if (!var_linked) {
             attr_linked = adios_find_attribute_by_id (patt_root, dim->id);
             if (!attr_linked->var) {
-//				strcpy(dimname, attr_linked->name);
+//                strcpy(dimname, attr_linked->name);
                 sprintf(dimname, "%s", attr_linked->name);
             } else {
                 var_linked = attr_linked->var;
             }
         }
         if (var_linked && var_linked->name) {
-//			strcpy(dimname, var_linked->name);
+//            strcpy(dimname, var_linked->name);
             sprintf(dimname, "%s", var_linked->name);
         }
     } else {
         if (dim->time_index == adios_flag_yes) {
-//			strcpy(dimname, group->time_index_name);
+//            strcpy(dimname, group->time_index_name);
             sprintf(dimname, "%s", group->time_index_name);
         } else {
             dimname[0] = '\0';
diff --git a/src/write/adios_phdf5.c b/src/write/adios_phdf5.c
index 55405f9..425ff40 100644
--- a/src/write/adios_phdf5.c
+++ b/src/write/adios_phdf5.c
@@ -339,10 +339,10 @@ void adios_phdf5_finalize (int mype, struct adios_method_struct * method)
 }
 
 int hw_attribute ( hid_t root_id
-		,struct adios_var_struct *pvar_root
-		,struct adios_attribute_struct *patt
-		,enum ADIOS_FLAG fortran_flag
-		,int myrank
+                ,struct adios_var_struct *pvar_root
+                ,struct adios_attribute_struct *patt
+                ,enum ADIOS_FLAG fortran_flag
+                ,int myrank
                 ,int nproc) {
 
     H5Eset_auto ( NULL, NULL);
@@ -393,7 +393,7 @@ int hw_attribute ( hid_t root_id
                                           ,h5_type_id,h5_dataspace_id,0);
                 }
                 if (h5_attribute_id > 0) {
-                        if (myrank == 0)	
+                        if (myrank == 0)        
                             H5Awrite ( h5_attribute_id, h5_type_id, var_linked->data);
                 }
                 H5Aclose (h5_attribute_id);
@@ -413,14 +413,17 @@ int hw_attribute ( hid_t root_id
              h5_localdims = (hsize_t *) malloc (rank * sizeof(hsize_t));
              dims = var_linked->dimensions;
              for ( i = 0; i < rank; i++) {
-                 if ( dims->dimension.rank == 0 && dims->dimension.id) { 
-                     var_linked = adios_find_var_by_id (pvar_root , dims->dimension.id);
-                     if ( var_linked) {
-                         h5_localdims [i] = *(int *)var_linked->data;
-                     }
+                 if ( dims->dimension.var) { 
+                     h5_localdims [i] = *(int *)dims->dimension.var->data;
                  }
-                 else
+                 else if ( dims->dimension.attr) { 
+                     if ( dims->dimension.attr->var)
+                         h5_localdims [i] = *(int *)dims->dimension.attr->var->data;
+                     else 
+                         h5_localdims [i] = *(int *)dims->dimension.attr->value;
+                 } else {
                      h5_localdims [i] = dims->dimension.rank;
+                 }
              }
              h5_dataspace_id = H5Screate_simple(rank,h5_localdims, NULL);
              h5_attribute_id = H5Aopen_name ( grp_ids[level], patt->name);
@@ -455,7 +458,7 @@ int hw_attribute ( hid_t root_id
                     h5_attribute_id = H5Acreate ( grp_ids[level], patt->name 
                                         ,h5_type_id, h5_dataspace_id, 0);
                     if (h5_attribute_id > 0) { 
-                       if (myrank == 0)	
+                       if (myrank == 0)        
                           H5Awrite(h5_attribute_id, h5_type_id, patt->value);
                      }
                 }
@@ -539,8 +542,10 @@ int hr_var (hid_t root_id
     }
     dims = pvar->dimensions;
 
-    if ( dims->global_dimension.rank
-        || (dims->global_dimension.rank == 0  && dims->global_dimension.id)) {
+    if ( dims->global_dimension.rank || 
+         dims->global_dimension.var  || 
+         dims->global_dimension.attr) 
+    {
 
         hsize_t * h5_globaldims, * h5_localdims, * h5_offsets, * h5_strides; 
         hsize_t h5_gbstrides[2],h5_gbglobaldims[2], h5_gblocaldims[2], h5_gboffsets[2], *h5_gbdims;
@@ -735,8 +740,10 @@ int hw_var (hid_t root_id
     }
     dims = pvar->dimensions;
     hsize_t * h5_globaldims, * h5_localdims, * h5_offsets, * h5_strides, * h5_gbdims; 
-    if ( dims->dimension.rank 
-        || (dims->dimension.rank == 0  && dims->dimension.id)) {
+    if ( dims->dimension.rank || 
+         dims->dimension.var  ||
+         dims->dimension.attr ) 
+    {
 
         hsize_t h5_gbstrides[2], h5_gbglobaldims[2], h5_gblocaldims[2], h5_gboffsets[2];
         char name[256];
@@ -992,10 +999,10 @@ int getH5TypeId(enum ADIOS_DATATYPES type, hid_t* h5_type_id \
             break;
         case adios_unsigned_integer:
             *h5_type_id = H5Tcopy(H5T_NATIVE_UINT32);
-	    break;
+            break;
         case adios_unsigned_long:
             *h5_type_id = H5Tcopy(H5T_NATIVE_UINT64);
-	    break;
+            break;
         default:
             status = -1;
             break;
@@ -1080,12 +1087,12 @@ void hw_gopen (hid_t root_id, char * path, hid_t * grp_id, int * level, enum ADI
     pch = strtok(tmpstr,"/");
     grp_name = (char **) malloc(NUM_GP);
     while ( pch!=NULL && *pch!=' ') {
-	len = strlen(pch);
-	grp_name[idx]  = (char *)malloc(len+1);
-	grp_name[idx][0]='\0';
-	strcat(grp_name[idx],pch);
-	pch=strtok(NULL,"/");
-	idx=idx+1;
+        len = strlen(pch);
+        grp_name[idx]  = (char *)malloc(len+1);
+        grp_name[idx][0]='\0';
+        strcat(grp_name[idx],pch);
+        pch=strtok(NULL,"/");
+        idx=idx+1;
     }
     *level = idx;
     grp_id [0] = root_id; 
@@ -1135,12 +1142,15 @@ hsize_t parse_dimension(struct adios_var_struct *pvar_root,
     hsize_t dimsize;
     struct adios_var_struct *var_linked = NULL;
     struct adios_attribute_struct *attr_linked;
-    if ( dim->id) {
-        var_linked = adios_find_var_by_id (pvar_root , dim->id);
-        if (!var_linked) {
-            attr_linked = adios_find_attribute_by_id ( patt_root, dim->id);
-            if (!attr_linked->var) {
-                switch (attr_linked->type) {
+    if ( dim->var) {
+        if ( dim->var->data){
+            dimsize = *(int *)dim->var->data;
+        }
+    } else if ( dim->attr) {
+
+        attr_linked = dim->attr;
+        if (!attr_linked->var) {
+            switch (attr_linked->type) {
                 case adios_unsigned_byte:
                     dimsize = *(uint8_t *)attr_linked->value;
                     break;
@@ -1167,21 +1177,18 @@ hsize_t parse_dimension(struct adios_var_struct *pvar_root,
                     break;
                 default:
                     fprintf (stderr, "Invalid datatype for array dimension on "
-                             "var %s: %s\n"
+                            "var %s: %s\n"
                             ,attr_linked->name
                             ,adios_type_to_string_int (var_linked->type)
                             );
                     break;
-                }
-            }
-            else {
-                var_linked = attr_linked->var;
             }
         }
-        if ( var_linked && var_linked->data){
-            dimsize = *(int *)var_linked->data;
+        else {
+            if (attr_linked->var->data) {
+                dimsize = *(int *)attr_linked->var->data;
+            }
         }
-
     }
     else {
         if (dim->time_index == adios_flag_yes)
diff --git a/src/write/adios_posix.c b/src/write/adios_posix.c
index 1003c65..1b71ccd 100644
--- a/src/write/adios_posix.c
+++ b/src/write/adios_posix.c
@@ -53,9 +53,7 @@ struct adios_POSIX_data_struct
     struct adios_bp_buffer_struct_v1 b;
 
     // old index structs we read in and have to be merged in
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
+    struct adios_index_struct_v1 * index;
 
     uint64_t vars_start;
     uint64_t vars_header_size;
@@ -83,9 +81,7 @@ void adios_posix_init (const PairStruct * parameters
     method->method_data = malloc (sizeof (struct adios_POSIX_data_struct));
     p = (struct adios_POSIX_data_struct *) method->method_data;
     adios_buffer_struct_init (&p->b);
-    p->old_pg_root = 0;
-    p->old_vars_root = 0;
-    p->old_attrs_root = 0;
+    p->index = adios_alloc_index_v1(1); // with hashtables
     p->vars_start = 0;
     p->vars_header_size = 0;
 #ifdef HAVE_MPI
@@ -391,14 +387,12 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
                         adios_parse_index_offsets_v1 (&p->b);
 
                         adios_posix_read_process_group_index (&p->b);
-                        adios_parse_process_group_index_v1 (&p->b
-                                                           ,&p->old_pg_root
-                                                           );
+                        adios_parse_process_group_index_v1 (&p->b, &p->index->pg_root);
 
                         // find the largest time index so we can append properly
                         struct adios_index_process_group_struct_v1 * pg;
                         uint32_t max_time_index = 0;
-                        pg = p->old_pg_root;
+                        pg = p->index->pg_root;
                         while (pg)
                         {
                             if (pg->time_index > max_time_index)
@@ -408,12 +402,12 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
                         fd->group->time_index = ++max_time_index;
 
                         adios_posix_read_vars_index (&p->b);
-                        adios_parse_vars_index_v1 (&p->b, &p->old_vars_root);
+                        adios_parse_vars_index_v1 (&p->b, &p->index->vars_root, 
+                                                   p->index->hashtbl_vars,
+                                                   &p->index->vars_tail);
 
                         adios_posix_read_attributes_index (&p->b);
-                        adios_parse_attributes_index_v1 (&p->b
-                                                        ,&p->old_attrs_root
-                                                        );
+                        adios_parse_attributes_index_v1 (&p->b, &p->index->attrs_root);
 
                         fd->base_offset = p->b.end_of_pgs;
                         fd->pg_start_in_file = p->b.end_of_pgs;
@@ -448,8 +442,8 @@ START_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
 
     free (subfile_name);
     free (mdfile_name);
-	
-	STOP_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
+    
+    STOP_TIMER (ADIOS_TIMER_POSIX_AD_OPEN);
 
     return 1;
 }
@@ -461,7 +455,7 @@ enum ADIOS_FLAG adios_posix_should_buffer (struct adios_file_struct * fd
     struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
                                                           method->method_data;
 
-	START_TIMER (ADIOS_TIMER_POSIX_AD_SHOULD_BUFFER);
+    START_TIMER (ADIOS_TIMER_POSIX_AD_SHOULD_BUFFER);
 
     if (fd->shared_buffer == adios_flag_no && fd->mode != adios_mode_read)
     {
@@ -469,9 +463,9 @@ enum ADIOS_FLAG adios_posix_should_buffer (struct adios_file_struct * fd
         adios_write_process_group_header_v1 (fd, fd->write_size_bytes);
 
         lseek (p->b.f, fd->base_offset, SEEK_SET);
-		START_TIMER (ADIOS_TIMER_POSIX_MD);
+        START_TIMER (ADIOS_TIMER_POSIX_MD);
         ssize_t s = write (p->b.f, fd->buffer, fd->bytes_written);
-		STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+        STOP_TIMER (ADIOS_TIMER_POSIX_MD);
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX method tried to write %llu, "
@@ -496,7 +490,7 @@ enum ADIOS_FLAG adios_posix_should_buffer (struct adios_file_struct * fd
         adios_shared_buffer_free (&p->b);
     }
 
-	STOP_TIMER (ADIOS_TIMER_POSIX_AD_SHOULD_BUFFER);
+    STOP_TIMER (ADIOS_TIMER_POSIX_AD_SHOULD_BUFFER);
 
     return fd->shared_buffer;   // buffer if there is space
 }
@@ -510,7 +504,7 @@ void adios_posix_write (struct adios_file_struct * fd
     struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
                                                           method->method_data;
 
-	START_TIMER (ADIOS_TIMER_POSIX_AD_WRITE);
+    START_TIMER (ADIOS_TIMER_POSIX_AD_WRITE);
 
     if (v->got_buffer == adios_flag_yes)
     {
@@ -533,9 +527,9 @@ void adios_posix_write (struct adios_file_struct * fd
     {
         // var payload sent for sizing information
         adios_write_var_header_v1 (fd, v);
-		START_TIMER (ADIOS_TIMER_POSIX_MD);
+        START_TIMER (ADIOS_TIMER_POSIX_MD);
         ssize_t s = write (p->b.f, fd->buffer, fd->bytes_written);
-		STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+        STOP_TIMER (ADIOS_TIMER_POSIX_MD);
         if (s != fd->bytes_written)
         {
             fprintf (stderr, "POSIX method tried to write %llu, "
@@ -569,9 +563,9 @@ void adios_posix_write (struct adios_file_struct * fd
 
         while (bytes_written < var_size)
         {
-			START_TIMER (ADIOS_TIMER_POSIX_IO);
+            START_TIMER (ADIOS_TIMER_POSIX_IO);
             bytes_written += write (p->b.f, v->data + bytes_written, to_write);
-			STOP_TIMER (ADIOS_TIMER_POSIX_IO);
+            STOP_TIMER (ADIOS_TIMER_POSIX_IO);
             if (var_size > bytes_written)
             {
                 if (var_size - bytes_written > INT32_MAX)
@@ -585,9 +579,9 @@ void adios_posix_write (struct adios_file_struct * fd
             }
         }
 
-		START_TIMER (ADIOS_TIMER_POSIX_IO);
+        START_TIMER (ADIOS_TIMER_POSIX_IO);
         s = write (p->b.f, v->data, var_size);
-		STOP_TIMER (ADIOS_TIMER_POSIX_IO);
+        STOP_TIMER (ADIOS_TIMER_POSIX_IO);
         s = bytes_written;
         if (s != var_size)
         {
@@ -603,7 +597,7 @@ void adios_posix_write (struct adios_file_struct * fd
         adios_shared_buffer_free (&p->b);
     }
 
-	STOP_TIMER (ADIOS_TIMER_POSIX_AD_WRITE);
+    STOP_TIMER (ADIOS_TIMER_POSIX_AD_WRITE);
 }
 
 void adios_posix_get_write_buffer (struct adios_file_struct * fd
@@ -754,10 +748,9 @@ static void adios_posix_do_read (struct adios_file_struct * fd
     {
         case 1:
         {
-            struct adios_index_process_group_struct_v1 * pg_root = 0;
+            struct adios_index_struct_v1 * index = adios_alloc_index_v1(0); // no hashtables
+            struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
             struct adios_index_process_group_struct_v1 * pg_root_temp = 0;
-            struct adios_index_var_struct_v1 * vars_root = 0;
-            struct adios_index_attribute_struct_v1 * attrs_root = 0;
 
             adios_posix_read_index_offsets (&p->b);
             adios_parse_index_offsets_v1 (&p->b);
@@ -766,10 +759,10 @@ static void adios_posix_do_read (struct adios_file_struct * fd
             adios_parse_process_group_index_v1 (&p->b, &pg_root);
 #if 1
             adios_posix_read_vars_index (&p->b);
-            adios_parse_vars_index_v1 (&p->b, &vars_root);
+            adios_parse_vars_index_v1 (&p->b, &index->vars_root, NULL, NULL);
 
             adios_posix_read_attributes_index (&p->b);
-            adios_parse_attributes_index_v1 (&p->b, &attrs_root);
+            adios_parse_attributes_index_v1 (&p->b, &index->attrs_root);
 #endif
 
             // the three section headers
@@ -852,7 +845,7 @@ static void adios_posix_do_read (struct adios_file_struct * fd
             }
 #endif
             adios_clear_process_group_header_v1 (&pg_header);
-            adios_clear_index_v1 (pg_root, vars_root, attrs_root);
+            adios_clear_index_v1 (index);
             break;
         }
 
@@ -878,7 +871,7 @@ void adios_posix_close (struct adios_file_struct * fd
     struct adios_index_var_struct_v1 * new_vars_root = 0;
     struct adios_index_attribute_struct_v1 * new_attrs_root = 0;
 
-	START_TIMER (ADIOS_TIMER_POSIX_AD_CLOSE);
+    START_TIMER (ADIOS_TIMER_POSIX_AD_CLOSE);
 
     switch (fd->mode)
     {
@@ -895,9 +888,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 adios_write_close_vars_v1 (fd);
                 // fd->vars_start gets updated with the size written
                 fd->offset = lseek (p->b.f, p->vars_start, SEEK_SET);
-				START_TIMER (ADIOS_TIMER_POSIX_IO);
+                START_TIMER (ADIOS_TIMER_POSIX_IO);
                 ssize_t s = write (p->b.f, fd->buffer, p->vars_header_size);
-				STOP_TIMER (ADIOS_TIMER_POSIX_IO);
+                STOP_TIMER (ADIOS_TIMER_POSIX_IO);
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
@@ -953,9 +946,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 adios_write_close_attributes_v1 (fd);
                 fd->offset = lseek (p->b.f, p->vars_start, SEEK_SET);
                 // fd->vars_start gets updated with the size written
-				START_TIMER (ADIOS_TIMER_POSIX_MD);
+                START_TIMER (ADIOS_TIMER_POSIX_MD);
                 s = write (p->b.f, fd->buffer, p->vars_header_size);
-				STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+                STOP_TIMER (ADIOS_TIMER_POSIX_MD);
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
@@ -975,19 +968,15 @@ void adios_posix_close (struct adios_file_struct * fd
             uint64_t index_start = fd->base_offset + fd->offset;
 
             // build index
-            adios_build_index_v1 (fd, &p->old_pg_root, &p->old_vars_root
-                                 ,&p->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, p->index);
             // if collective, gather the indexes from the rest and call
             // adios_merge_index_v1 (&new_pg_root, &new_vars_root, pg, vars);
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                 ,index_start, p->old_pg_root, p->old_vars_root
-                                 ,p->old_attrs_root
-                                 );
+                                 ,index_start, p->index);
             adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
-			START_TIMER (ADIOS_TIMER_POSIX_IO);
+            START_TIMER (ADIOS_TIMER_POSIX_IO);
             adios_posix_do_write (fd, method, buffer, buffer_offset); // Buffered vars written here
-			STOP_TIMER (ADIOS_TIMER_POSIX_IO);
+            STOP_TIMER (ADIOS_TIMER_POSIX_IO);
 #ifdef HAVE_MPI
             if (p->group_comm != MPI_COMM_SELF)
             {
@@ -999,12 +988,12 @@ void adios_posix_close (struct adios_file_struct * fd
                     int i;
                     uint32_t size = 0, total_size = 0;
 
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, p->group_comm
                                );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
 
                     for (i = 0; i < p->size; i++)
                     {
@@ -1013,12 +1002,12 @@ void adios_posix_close (struct adios_file_struct * fd
                     }
 
                     recv_buffer = malloc (total_size);
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, p->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
 
                     char * buffer_save = p->b.buff;
                     uint64_t buffer_size_save = p->b.length;
@@ -1033,7 +1022,7 @@ void adios_posix_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&p->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&p->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&p->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&p->b
@@ -1041,12 +1030,8 @@ void adios_posix_close (struct adios_file_struct * fd
                                                         );
                         */
 
-                        adios_merge_index_v1 (&p->old_pg_root
-                                             ,&p->old_vars_root
-                                             ,&p->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (p->index, new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
@@ -1068,8 +1053,7 @@ void adios_posix_close (struct adios_file_struct * fd
 
                     adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                          ,&global_index_buffer_offset, global_index_start
-                                         ,p->old_pg_root, p->old_vars_root, p->old_attrs_root
-                                         );
+                                         ,p->index);
 
                     flag |= ADIOS_VERSION_HAVE_SUBFILE;
 
@@ -1078,9 +1062,9 @@ void adios_posix_close (struct adios_file_struct * fd
                                                 ,&global_index_buffer_offset
                                                 ,flag
                                                 );
-					START_TIMER (ADIOS_TIMER_POSIX_MD);
+                    START_TIMER (ADIOS_TIMER_POSIX_MD);
                     ssize_t s = write (p->mf, global_index_buffer, global_index_buffer_offset);
-					STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_MD);
                     if (s != global_index_buffer_offset)
                     {
                         fprintf (stderr, "POSIX method tried to write %llu, "
@@ -1094,9 +1078,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 }
                 else
                 {
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
-					// Added this explicit cast to avoid truncation of low-order bytes on BGP
-					int i_buffer_size = (int) buffer_size;
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    // Added this explicit cast to avoid truncation of low-order bytes on BGP
+                    int i_buffer_size = (int) buffer_size;
                     MPI_Gather (&i_buffer_size, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, p->group_comm
@@ -1106,14 +1090,12 @@ void adios_posix_close (struct adios_file_struct * fd
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, p->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
                 }
             }
 #endif
             free (buffer);
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-
             break;
         }
 
@@ -1131,9 +1113,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 adios_write_close_vars_v1 (fd);
                 // fd->vars_start gets updated with the size written
                 fd->offset = lseek (p->b.f, p->vars_start, SEEK_SET);
-				START_TIMER (ADIOS_TIMER_POSIX_IO);
+                START_TIMER (ADIOS_TIMER_POSIX_IO);
                 ssize_t s = write (p->b.f, fd->buffer, p->vars_header_size);
-				STOP_TIMER (ADIOS_TIMER_POSIX_IO);
+                STOP_TIMER (ADIOS_TIMER_POSIX_IO);
                 if (s != fd->vars_start)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
@@ -1186,9 +1168,9 @@ void adios_posix_close (struct adios_file_struct * fd
                 adios_write_close_attributes_v1 (fd);
                 fd->offset = lseek (p->b.f, p->vars_start, SEEK_SET);
                 // fd->vars_start gets updated with the size written
-				START_TIMER (ADIOS_TIMER_POSIX_MD);
+                START_TIMER (ADIOS_TIMER_POSIX_MD);
                 s = write (p->b.f, fd->buffer, p->vars_header_size);
-				STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+                STOP_TIMER (ADIOS_TIMER_POSIX_MD);
                 if (s != p->vars_header_size)
                 {
                     fprintf (stderr, "POSIX method tried to write %llu, "
@@ -1207,13 +1189,9 @@ void adios_posix_close (struct adios_file_struct * fd
             uint64_t index_start = fd->base_offset + fd->offset;
 
             // build index
-            adios_build_index_v1 (fd, &p->old_pg_root, &p->old_vars_root
-                                 ,&p->old_attrs_root
-                                 );
+            adios_build_index_v1 (fd, p->index);
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                 ,index_start, p->old_pg_root, p->old_vars_root
-                                 ,p->old_attrs_root
-                                 );
+                                 ,index_start, p->index);
 #ifdef HAVE_MPI
             if (p->group_comm != MPI_COMM_SELF)
             {
@@ -1225,12 +1203,12 @@ void adios_posix_close (struct adios_file_struct * fd
                     int i;
                     uint32_t size = 0, total_size = 0;
 
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
                     MPI_Gather (&size, 1, MPI_INT
                                ,index_sizes, 1, MPI_INT
                                ,0, p->group_comm
                                );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
 
                     for (i = 0; i < p->size; i++)
                     {
@@ -1240,12 +1218,12 @@ void adios_posix_close (struct adios_file_struct * fd
 
                     recv_buffer = malloc (total_size);
 
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
                     MPI_Gatherv (&size, 0, MPI_BYTE
                                 ,recv_buffer, index_sizes, index_offsets
                                 ,MPI_BYTE, 0, p->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
 
                     char * buffer_save = p->b.buff;
                     uint64_t buffer_size_save = p->b.length;
@@ -1260,7 +1238,7 @@ void adios_posix_close (struct adios_file_struct * fd
                         adios_parse_process_group_index_v1 (&p->b
                                                            ,&new_pg_root
                                                            );
-                        adios_parse_vars_index_v1 (&p->b, &new_vars_root);
+                        adios_parse_vars_index_v1 (&p->b, &new_vars_root, NULL, NULL);
                         // do not merge attributes from other processes from 1.4
                         /*
                         adios_parse_attributes_index_v1 (&p->b
@@ -1268,21 +1246,17 @@ void adios_posix_close (struct adios_file_struct * fd
                                                         );
                          */
 
-                        adios_merge_index_v1 (&p->old_pg_root
-                                             ,&p->old_vars_root
-                                             ,&p->old_attrs_root
-                                             ,new_pg_root, new_vars_root
-                                             ,new_attrs_root
-                                             );
+                        adios_merge_index_v1 (p->index,new_pg_root, 
+                                              new_vars_root, new_attrs_root);
                     
                         new_pg_root = 0;
                         new_vars_root = 0;
                         new_attrs_root = 0;
                     }
 
-                    adios_sort_index_v1 (&p->old_pg_root
-                                        ,&p->old_vars_root
-                                        ,&p->old_attrs_root
+                    adios_sort_index_v1 (&p->index->pg_root
+                                        ,&p->index->vars_root
+                                        ,&p->index->attrs_root
                                         );
 
                     p->b.buff = buffer_save;
@@ -1301,8 +1275,7 @@ void adios_posix_close (struct adios_file_struct * fd
 
                     adios_write_index_v1 (&global_index_buffer, &global_index_buffer_size
                                          ,&global_index_buffer_offset, global_index_start
-                                         ,p->old_pg_root, p->old_vars_root, p->old_attrs_root
-                                         );
+                                         ,p->index);
 
                     flag |= ADIOS_VERSION_HAVE_SUBFILE;
 
@@ -1312,9 +1285,9 @@ void adios_posix_close (struct adios_file_struct * fd
                                                 ,flag
                                                 );
 
-					START_TIMER (ADIOS_TIMER_POSIX_MD);
+                    START_TIMER (ADIOS_TIMER_POSIX_MD);
                     ssize_t s = write (p->mf, global_index_buffer, global_index_buffer_offset);
-					STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_MD);
                     if (s != global_index_buffer_offset)
                     {
                         fprintf (stderr, "POSIX method tried to write %llu, "
@@ -1330,7 +1303,7 @@ void adios_posix_close (struct adios_file_struct * fd
                 }
                 else
                 {
-					START_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    START_TIMER (ADIOS_TIMER_POSIX_COMM);
                     MPI_Gather (&buffer_size, 1, MPI_INT
                                ,0, 0, MPI_INT
                                ,0, p->group_comm
@@ -1340,14 +1313,14 @@ void adios_posix_close (struct adios_file_struct * fd
                                 ,0, 0, 0, MPI_BYTE
                                 ,0, p->group_comm
                                 );
-					STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
+                    STOP_TIMER (ADIOS_TIMER_POSIX_COMM);
                 }
             }
 #endif
             adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
-			START_TIMER (ADIOS_TIMER_POSIX_MD);
+            START_TIMER (ADIOS_TIMER_POSIX_MD);
             adios_posix_do_write (fd, method, buffer, buffer_offset);
-			STOP_TIMER (ADIOS_TIMER_POSIX_MD);
+            STOP_TIMER (ADIOS_TIMER_POSIX_MD);
 
             free (buffer);
 
@@ -1377,18 +1350,17 @@ void adios_posix_close (struct adios_file_struct * fd
     }
 
     adios_posix_close_internal (&p->b);
-    adios_clear_index_v1 (p->old_pg_root, p->old_vars_root, p->old_attrs_root);
-    p->old_pg_root = 0;
-    p->old_vars_root = 0;
-    p->old_attrs_root = 0;
+    adios_clear_index_v1 (p->index);
 
-	STOP_TIMER (ADIOS_TIMER_POSIX_AD_CLOSE);
+    STOP_TIMER (ADIOS_TIMER_POSIX_AD_CLOSE);
 
 }
 
 void adios_posix_finalize (int mype, struct adios_method_struct * method)
 {
-// nothing to do here
+    struct adios_POSIX_data_struct * p = (struct adios_POSIX_data_struct *)
+                                                          method->method_data;
+    adios_free_index_v1 (p->index);
     if (adios_posix_initialized)
         adios_posix_initialized = 0;
 }
diff --git a/src/write/adios_posix1.c b/src/write/adios_posix1.c
index a628c9e..6f9a1c6 100644
--- a/src/write/adios_posix1.c
+++ b/src/write/adios_posix1.c
@@ -35,9 +35,7 @@ struct adios_POSIX1_data_struct
     struct adios_bp_buffer_struct_v1 b;
 
     // old index structs we read in and have to be merged in
-    struct adios_index_process_group_struct_v1 * old_pg_root;
-    struct adios_index_var_struct_v1 * old_vars_root;
-    struct adios_index_attribute_struct_v1 * old_attrs_root;
+    struct adios_index_struct_v1 * index;
 
     uint64_t vars_start;
     uint64_t vars_header_size;
@@ -56,9 +54,7 @@ void adios_posix1_init (const PairStruct * parameters
     method->method_data = malloc (sizeof (struct adios_POSIX1_data_struct));
     p = (struct adios_POSIX1_data_struct *) method->method_data;
     adios_buffer_struct_init (&p->b);
-    p->old_pg_root = 0;
-    p->old_vars_root = 0;
-    p->old_attrs_root = 0;
+    p->index = adios_alloc_index_v1(1); // with hashtables
     p->vars_start = 0;
     p->vars_header_size = 0;
 }
@@ -178,13 +174,13 @@ int adios_posix1_open (struct adios_file_struct * fd
 
                         adios_posix_read_process_group_index (&p->b);
                         adios_parse_process_group_index_v1 (&p->b
-                                                           ,&p->old_pg_root
+                                                           ,&p->index->pg_root
                                                            );
 
                         // find the largest time index so we can append properly
                         struct adios_index_process_group_struct_v1 * pg;
                         uint32_t max_time_index = 0;
-                        pg = p->old_pg_root;
+                        pg = p->index->pg_root;
                         while (pg)
                         {
                             if (pg->time_index > max_time_index)
@@ -194,11 +190,11 @@ int adios_posix1_open (struct adios_file_struct * fd
                         fd->group->time_index = ++max_time_index;
 
                         adios_posix_read_vars_index (&p->b);
-                        adios_parse_vars_index_v1 (&p->b, &p->old_vars_root);
+                        adios_parse_vars_index_v1 (&p->b, &p->index->vars_root, NULL, NULL);
 
                         adios_posix_read_attributes_index (&p->b);
                         adios_parse_attributes_index_v1 (&p->b
-                                                        ,&p->old_attrs_root
+                                                        ,&p->index->attrs_root
                                                         );
 
                         fd->base_offset = p->b.end_of_pgs;
@@ -518,10 +514,9 @@ static void adios_posix1_do_read (struct adios_file_struct * fd
     {
         case 1:
         {
-            struct adios_index_process_group_struct_v1 * pg_root = 0;
+            struct adios_index_struct_v1 * index = adios_alloc_index_v1(0); // no hashtables
+            struct adios_index_process_group_struct_v1 * pg_root = index->pg_root;
             struct adios_index_process_group_struct_v1 * pg_root_temp = 0;
-            struct adios_index_var_struct_v1 * vars_root = 0;
-            struct adios_index_attribute_struct_v1 * attrs_root = 0;
 
             adios_posix_read_index_offsets (&p->b);
             adios_parse_index_offsets_v1 (&p->b);
@@ -530,10 +525,10 @@ static void adios_posix1_do_read (struct adios_file_struct * fd
             adios_parse_process_group_index_v1 (&p->b, &pg_root);
 #if 1
             adios_posix_read_vars_index (&p->b);
-            adios_parse_vars_index_v1 (&p->b, &vars_root);
+            adios_parse_vars_index_v1 (&p->b, &index->vars_root, NULL, NULL);
 
             adios_posix_read_attributes_index (&p->b);
-            adios_parse_attributes_index_v1 (&p->b, &attrs_root);
+            adios_parse_attributes_index_v1 (&p->b, &index->attrs_root);
 #endif
 
             // the three section headers
@@ -616,7 +611,7 @@ static void adios_posix1_do_read (struct adios_file_struct * fd
             }
 #endif
             adios_clear_process_group_header_v1 (&pg_header);
-            adios_clear_index_v1 (pg_root, vars_root, attrs_root);
+            adios_clear_index_v1 (index);
             break;
         }
 
@@ -638,10 +633,6 @@ void adios_posix1_close (struct adios_file_struct * fd
                                                           method->method_data;
     struct adios_attribute_struct * a = fd->group->attributes;
 
-    struct adios_index_process_group_struct_v1 * new_pg_root = 0;
-    struct adios_index_var_struct_v1 * new_vars_root = 0;
-    struct adios_index_attribute_struct_v1 * new_attrs_root = 0;
-
     switch (fd->mode)
     {
         case adios_mode_write:
@@ -729,22 +720,14 @@ void adios_posix1_close (struct adios_file_struct * fd
             uint64_t index_start = fd->base_offset + fd->offset;
 
             // build index
-            adios_build_index_v1 (fd, &new_pg_root, &new_vars_root
-                                 ,&new_attrs_root
-                                 );
-            // if collective, gather the indexes from the rest and call
-            // adios_merge_index_v1 (&new_pg_root, &new_vars_root, pg, vars);
+            adios_build_index_v1 (fd, p->index);
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                 ,index_start, new_pg_root, new_vars_root
-                                 ,new_attrs_root
-                                 );
+                                 ,index_start, p->index);
             adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
             adios_posix1_do_write (fd, method, buffer, buffer_offset);
 
             free (buffer);
 
-            adios_clear_index_v1 (new_pg_root, new_vars_root, new_attrs_root);
-
             break;
         }
 
@@ -828,19 +811,15 @@ void adios_posix1_close (struct adios_file_struct * fd
             uint64_t buffer_offset = 0;
             uint64_t index_start = fd->base_offset + fd->offset;
 
-            // build index
-            adios_build_index_v1 (fd, &new_pg_root, &new_vars_root
-                                 ,&new_attrs_root
-                                 );
+            // build index. Note: It merges with old indices already stored 
+            //                    in p->index in adios_posix_open's append case
+            adios_build_index_v1 (fd, p->index);
             // merge in old indicies
-            adios_merge_index_v1 (&p->old_pg_root, &p->old_vars_root
-                                 ,&p->old_attrs_root
-                                 ,new_pg_root, new_vars_root, new_attrs_root
-                                 );
+            //adios_merge_index_v1 (p->index, new_pg_root, 
+            //                      new_vars_root, new_attrs_root
+            //                     );
             adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset
-                                 ,index_start, p->old_pg_root, p->old_vars_root
-                                 ,p->old_attrs_root
-                                 );
+                                 ,index_start, p->index);
             adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
             adios_posix1_do_write (fd, method, buffer, buffer_offset);
 
@@ -872,15 +851,14 @@ void adios_posix1_close (struct adios_file_struct * fd
     }
 
     adios_posix_close_internal (&p->b);
-    adios_clear_index_v1 (p->old_pg_root, p->old_vars_root, p->old_attrs_root);
-    p->old_pg_root = 0;
-    p->old_vars_root = 0;
-    p->old_attrs_root = 0;
+    adios_clear_index_v1 (p->index);
 }
 
 void adios_posix1_finalize (int mype, struct adios_method_struct * method)
 {
-// nothing to do here
+    struct adios_POSIX1_data_struct * p = (struct adios_POSIX_data_struct *)
+        method->method_data;
+    adios_free_index_v1 (p->index);
     if (adios_posix1_initialized)
         adios_posix1_initialized = 0;
 }
diff --git a/src/write/adios_var_merge.c b/src/write/adios_var_merge.c
index efb5cef..5c8a2fe 100644
--- a/src/write/adios_var_merge.c
+++ b/src/write/adios_var_merge.c
@@ -31,7 +31,7 @@
 extern struct adios_transport_struct * adios_transports;
 static int varcnt=0;
 static char io_method[16]; //the IO method for data output
-static char io_parameters[256]; //the IO method parameters 
+static char io_parameters[256]; //the IO method parameters
 static uint64_t totalsize=0;
 static int grpflag=0; //if there's data left in buffer
 static char *grp_name;
@@ -39,7 +39,7 @@ static int64_t grp;
 static int aggr_level; // currently fixed to 2 level of aggregation the most
 static int aggr_chunksize=1048576*2; //default aggregated chunk size = 2MB
 static int aggr_cnt[3][2]; //number of clients at each level for 1D, 2D and 3D variables
-static int my_aggregator[3][2]; //2 level of aggregators for three dimensions 
+static int my_aggregator[3][2]; //2 level of aggregators for three dimensions
 static int layout;
 static int *proc_map;
 static int *sequence;
@@ -58,7 +58,7 @@ struct aggr_client
 struct aggr_var_struct
 {
     char * name;
-    char * path; 
+    char * path;
     enum ADIOS_DATATYPES type;
     enum ADIOS_FLAG multidim;
     char * dimensions;
@@ -66,7 +66,7 @@ struct aggr_var_struct
     char * local_offsets;
     void * data;
     int set_aggr; //1D - 3D aggregation flags; 0:1D; 1:2D; 2:3D
-//    int decomp[3]; //1D -3D decomposition 0:1D; 1:2D; 2:3D 
+//    int decomp[3]; //1D -3D decomposition 0:1D; 1:2D; 2:3D
 
     struct aggr_var_struct *prev;
     struct aggr_var_struct *next;
@@ -86,10 +86,10 @@ struct adios_MPI_data_struct
     char * file_mode;
 
     int vid;
-    int64_t group_id; 
+    int64_t group_id;
  //   int set_aggr; //1D - 3D aggregation flags; 0:1D; 1:2D; 2:3D
-    int layout[3]; //1D -3D if the process layout has been determined; 
-                   //XXX: we have the assumption here that all the variables with same number of dimensions have the same processes layout 
+    int layout[3]; //1D -3D if the process layout has been determined;
+                   //XXX: we have the assumption here that all the variables with same number of dimensions have the same processes layout
     int *procs[3]; //the proceess layout, supporting up to 3D right now
                       //e.g. nprocs[0][3]: process layout for 1D variable
     int decomp[3];
@@ -162,21 +162,33 @@ static uint64_t cast_var_data_as_uint64 (const char * parent_name
 }
 
 
-static uint64_t get_value_for_dim (struct adios_file_struct * fd,
-                                   struct adios_dimension_item_struct * dimension)
+static uint64_t get_value_for_dim (struct adios_dimension_item_struct * dimension)
 {
     uint64_t dim = 0;
 
-    if (dimension->id != 0)
+    if (dimension->var != NULL)
     {
-        struct adios_var_struct * var = adios_find_var_by_id (fd->group->vars
-                                                             ,dimension->id
-                                                             );
-        if (var)
+        struct adios_var_struct * var = dimension->var;
+        if (var->data)
         {
-            if (var->data)
+            dim = cast_var_data_as_uint64 (var->name, var->type, var->data);
+        }
+        else
+        {
+            adios_error (err_dimension_required, "array dimension data missing\n");
+        }
+    }
+    else if (dimension->attr != NULL)
+    {
+        struct adios_attribute_struct * attr = dimension->attr;
+        if (attr->var)
+        {
+            if (attr->var->data)
             {
-                dim = cast_var_data_as_uint64 (var->name, var->type, var->data);
+                dim = cast_var_data_as_uint64 (attr->var->name
+                        ,attr->var->type
+                        ,attr->var->data
+                        );
             }
             else
             {
@@ -185,39 +197,7 @@ static uint64_t get_value_for_dim (struct adios_file_struct * fd,
         }
         else
         {
-            struct adios_attribute_struct * attr = adios_find_attribute_by_id
-                                                        (fd->group->attributes
-                                                        ,dimension->id
-                                                        );
-            if (attr)
-            {
-                if (attr->var)
-                {
-                    if (attr->var->data)
-                    {
-                        dim = cast_var_data_as_uint64 (attr->var->name
-                                                      ,attr->var->type
-                                                      ,attr->var->data
-                                                      );
-                    }
-                    else
-                    {
-                        adios_error (err_dimension_required, "array dimension data missing\n");
-                    }
-                }
-                else
-                {
-                    dim = cast_var_data_as_uint64 (attr->name, attr->type
-                                                  ,attr->value
-                                                  );
-                }
-            }
-            else
-            {
-                adios_error (err_invalid_dimension,
-                             "invalid dimension member id: %d\n",
-                             dimension->id);
-            }
+            dim = cast_var_data_as_uint64 (attr->name, attr->type, attr->value);
         }
     }
     else
@@ -231,22 +211,24 @@ static uint64_t get_value_for_dim (struct adios_file_struct * fd,
     return dim;
 }
 
-static uint8_t count_dimensions (struct adios_dimension_struct * dimensions)
-{   
-    uint8_t count = 0;
-
-    while (dimensions)
-    {
-        count++;
-        dimensions = dimensions->next;
-    }
-    
-    return count;
-}       
+// NCSU ALACRITY-ADIOS: This function was shared from adios_internals.c,
+//   since it's also needed in the transform layer
+//static uint8_t count_dimensions (struct adios_dimension_struct * dimensions)
+//{
+//    uint8_t count = 0;
+//
+//    while (dimensions)
+//    {
+//        count++;
+//        dimensions = dimensions->next;
+//    }
+//
+//    return count;
+//}
 
 
 //prepare the number of processes on each dimension
-static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm, uint64_t *ldims, uint64_t *gdims, uint64_t *offsets) 
+static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm, uint64_t *ldims, uint64_t *gdims, uint64_t *offsets)
 {
     char *sbuf, *recvbuf;
     int slen, recvlen, blen;
@@ -255,7 +237,7 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
     int decomp=0;
 
 
-    for(i=0;i<3;i++){ 
+    for(i=0;i<3;i++){
         procs[i]=-1;
         sequence[i]=-1;
     }
@@ -267,10 +249,10 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
     slen+=ndims*sizeof(uint64_t);
     memcpy(sbuf+slen, offsets, ndims*sizeof(uint64_t));
     slen+=ndims*sizeof(uint64_t);
-            
+
     recvbuf=(char *)malloc(nprocs*ndims*2*sizeof(uint64_t));
     recvlen=0;
-    //rank 0 calculate the info then send to the rest 
+    //rank 0 calculate the info then send to the rest
     if(rank==0) {
         //gather all the info to rank 0
         MPI_Gather(MPI_IN_PLACE, slen, MPI_BYTE, recvbuf, slen, MPI_BYTE, 0, comm);
@@ -293,7 +275,7 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
             //keep the process count on each dimension
             //the last process on the (0,0,k) dimension will be the first
             //edge process on k
-            //FIXME: hard coded for 3-D 
+            //FIXME: hard coded for 3-D
             for(j=0;j<ndims;j++) {
                 if(t_offsets[j]!=0 && t_ldims[j]+t_offsets[j]==gdims[j]) {
                     if(procs[j]==-1) {
@@ -326,7 +308,7 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
 
         //see if the processes are laid out along the fast dimension or
         //slow dimension
-        if(ndims==1 || (ndims>1 && sequence[0]<sequence[1])) 
+        if(ndims==1 || (ndims>1 && sequence[0]<sequence[1]))
             layout=FORWARD; //along the fast dimension
         else
             layout=REVERSE; //along the slow dimension
@@ -378,10 +360,10 @@ static int cal_layout(int *procs, int rank, int nprocs, int ndims, MPI_Comm comm
     free(recvbuf);
 
     return decomp;
-} 
+}
 
 static void cal_offsets(int *procs, int rank, int ndims, int decomp, int *offsets)
-{ 
+{
     int i;
 
     if(decomp>=1) {
@@ -399,7 +381,7 @@ static void cal_offsets(int *procs, int rank, int ndims, int decomp, int *offset
 static void cal_process_map(int rank, int *procs)
 {
     int i,j,k;
-    int pos, cnt=0; 
+    int pos, cnt=0;
 
     if(layout==0) {
         for(i=0;i<procs[2];i++) {
@@ -422,7 +404,7 @@ static void cal_process_map(int rank, int *procs)
                 }
             }
         }
-    
+
     }
 }
 
@@ -550,8 +532,8 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
     for(i=1; i<=level; i++) {
         scale=(int)pow(2, (i-1));
         step=(int)pow(2, i);
-        
-        //detemine the aggregators and clients 
+
+        //detemine the aggregators and clients
         hole=0;
         for(j=0;j<ndims;j++) {
             if(offsets[j]%step!=0){
@@ -565,16 +547,16 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
             //allocate the space for the list of clients
             int mal_size=(int)pow(2, decomp)-1;
             if(ndims==3){
-                //aggr_clients[i-1] = malloc(mal_size*sizeof(int)); 
-                aggr3d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client)); 
+                //aggr_clients[i-1] = malloc(mal_size*sizeof(int));
+                aggr3d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client));
                 memset(aggr3d_clients[i-1], 0x00, mal_size*sizeof(struct aggr_client));
             }
             else if (ndims==2) {
-                aggr2d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client)); 
+                aggr2d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client));
                 memset(aggr2d_clients[i-1], 0x00, mal_size*sizeof(struct aggr_client));
             }
             else if(ndims==1){
-                aggr1d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client)); 
+                aggr1d_clients[i-1] = malloc(mal_size*sizeof(struct aggr_client));
                 memset(aggr1d_clients[i-1], 0x00, mal_size*sizeof(struct aggr_client));
             }
 
@@ -604,15 +586,15 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
          else { //I am the clients
              aggrx=aggry=aggrz=0;
              aggrx=offsets[0]-offsets[0]%step;
-             if(ndims>=2) 
+             if(ndims>=2)
                 aggry=offsets[1]-offsets[1]%step;
-             if(ndims>=3) 
+             if(ndims>=3)
                  aggrz=offsets[2]-offsets[2]%step;
 
              my_aggregator[ndims-1][i-1] = proc_map[aggrz*procs[0]*procs[1]+aggry*procs[0]+aggrx];
-                 
- 
-             //check if this process needs to be included within the  
+
+
+             //check if this process needs to be included within the
              //communication of this level
              if(i>1) {
                  hole=0;
@@ -626,11 +608,11 @@ static void prep_aggr(int *procs, int ndims, int decomp, int rank, int size, int
                      my_aggregator[ndims-1][i-1]=-1;
              }
          } //end of if(hole==0)
-         prev_step=step; 
+         prev_step=step;
     }//end of for()
 }
- 
- 
+
+
 
 static int do_write (int64_t fd_p, const char * name, void * var)
 {
@@ -651,7 +633,7 @@ static int do_write (int64_t fd_p, const char * name, void * var)
         return 0;
     }
 
-    v = adios_find_var_by_name (v, name, fd->group->all_unique_var_names);
+    v = adios_find_var_by_name (fd->group, name);
 
     if (!v)
     {
@@ -664,7 +646,7 @@ static int do_write (int64_t fd_p, const char * name, void * var)
 
     return 0;
 }
-                       
+
 
 // temporary solution for compiling error
 static int declare_group (int64_t * id, const char * name
@@ -706,7 +688,7 @@ static int convert_file_mode(enum ADIOS_METHOD_MODE mode, char * file_mode)
            if (mode == adios_mode_append)
        strcpy(file_mode,"a");
            else
-               if (mode == adios_mode_update) 
+               if (mode == adios_mode_update)
        strcpy(file_mode,"u");
                else
                {
@@ -724,7 +706,7 @@ static int var_lookup(const char *varname, char *path, struct aggr_var_struct *l
 {
     int cnt=0;
 
-    for(cnt=0;cnt<varcnt;cnt++) 
+    for(cnt=0;cnt<varcnt;cnt++)
     {
         //compare both the variable name and path
         if(strcmp(varname, list->name)==0 && strcmp(path, list->path)==0) {
@@ -742,7 +724,7 @@ static int var_lookup(const char *varname, char *path, struct aggr_var_struct *l
 }
 
 static void output_vars(struct aggr_var_struct *vars, int varcnt, struct
-        adios_MPI_data_struct * md, struct adios_file_struct * fd) 
+        adios_MPI_data_struct * md, struct adios_file_struct * fd)
 {
     int i,j;
     char file_mode[2];
@@ -758,7 +740,7 @@ static void output_vars(struct aggr_var_struct *vars, int varcnt, struct
     common_adios_group_size (md->fpr, totalsize, &adios_size);
 
     //move pointer to the first variable in the list
-    vars=header; 
+    vars=header;
     //write it out
     for(i=0;i<varcnt;i++) {
         do_write(md->fpr, vars->name, vars->data);
@@ -773,7 +755,7 @@ static void define_iogroup(char *group_name)
 {
     int len;
 
-    // is it necessary to have different group name? XXX:FIXME 
+    // is it necessary to have different group name? XXX:FIXME
     len=5+strlen(group_name); //new groupname= tg_groupname
     grp_name=(char *)malloc(len);
     memset(grp_name, 0x00, len);
@@ -789,7 +771,7 @@ static void init_vars(struct aggr_var_struct *var, struct adios_var_struct * v,
     int i;
 
     vars->name=(char *)malloc(strlen(v->name)+1);
-    strcpy(vars->name, v->name); 
+    strcpy(vars->name, v->name);
     vars->type=v->type;
     vars->path=(char *)malloc(strlen(v->path)+1);
     strcpy(vars->path, v->path);
@@ -861,7 +843,7 @@ void init_output_parameters(const PairStruct *params)
 }
 
 
-void adios_var_merge_init(const PairStruct * parameters, 
+void adios_var_merge_init(const PairStruct * parameters,
                      struct adios_method_struct * method)
 {
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
@@ -935,7 +917,7 @@ static void adios_var_to_comm (const char * comm_name
                  {
                      log_warn ("TIAN method: communicator not provided but one "
                                "listed in XML.  Defaulting to MPI_COMM_WORLD\n");
- 
+
                      *comm = MPI_COMM_WORLD;
                  }
                  else
@@ -956,7 +938,7 @@ static void adios_var_to_comm (const char * comm_name
      {
          log_warn ("TIAN method: coordination-communication not provided. "
                    "Using MPI_COMM_WORLD instead\n");
- 
+
          *comm = MPI_COMM_WORLD;
      }
 }
@@ -976,7 +958,7 @@ int adios_var_merge_open (struct adios_file_struct * fd
 
     struct adios_MPI_data_struct * md = (struct adios_MPI_data_struct *)
                                                     method->method_data;
- 
+
     switch (fd->mode)
     {
         case adios_mode_read:
@@ -1023,11 +1005,11 @@ enum ADIOS_FLAG adios_var_merge_should_buffer (struct adios_file_struct * fd
             adios_error (err_invalid_file_mode, "VAR_MERGE method: Read mode is not supported.\n");
             break;
         }
- 
+
         case adios_mode_append:
         case adios_mode_write:
-        { 
-            define_iogroup(method->group->name); 
+        {
+            define_iogroup(method->group->name);
             break;
         }
         default:
@@ -1040,12 +1022,12 @@ enum ADIOS_FLAG adios_var_merge_should_buffer (struct adios_file_struct * fd
     //this method handles its own buffering
     return adios_flag_no;
 }
-                                         
+
 static void prepare_data(void **data, uint64_t varsize, int dims)
 {
     int i,j,k,l;
     double val;
-    
+
     l=0;
     for(val=0;val<8;val++) {
         for(i=0;i<dims;i++) {
@@ -1110,7 +1092,7 @@ void adios_var_merge_write (struct adios_file_struct * fd
     init_vars(vars, v, ndims);
 
     //retrieve the chunk size
-    varsize=adios_get_var_size(v, method->group, data); 
+    varsize=adios_get_var_size(v, method->group, data);
 
     //number of the dimensions of this variable
     ndims=count_dimensions(v->dimensions);
@@ -1118,14 +1100,14 @@ void adios_var_merge_write (struct adios_file_struct * fd
     if(ndims) //multidimensional data
     {
         vars->multidim=adios_flag_yes;
-           
+
         ldims=(uint64_t *)malloc(ndims*sizeof(uint64_t));
         offsets=(uint64_t *)malloc(ndims*sizeof(uint64_t));
         gdims=(uint64_t *)malloc(ndims*sizeof(uint64_t));
         while (d) {
             uint64_t dim = 0;
             //local dimension
-            dim = get_value_for_dim (fd, &d->dimension);
+            dim = get_value_for_dim (&d->dimension);
             ldims[dims_count]=dim;
             if(dims_count==0)
                 sprintf(vars->dimensions,"%llu", dim);
@@ -1133,7 +1115,7 @@ void adios_var_merge_write (struct adios_file_struct * fd
                 sprintf(vars->dimensions,"%s,%llu",vars->dimensions, dim);
 
             //global dimension
-            dim = get_value_for_dim (fd, &d->global_dimension);
+            dim = get_value_for_dim (&d->global_dimension);
             gdims[dims_count]=dim;
             if(dims_count==0)
                 sprintf(vars->global_dimensions,"%llu", dim);
@@ -1141,22 +1123,22 @@ void adios_var_merge_write (struct adios_file_struct * fd
                 sprintf(vars->global_dimensions,"%s,%llu",vars->global_dimensions, dim);
 
             //local offsets
-            dim = get_value_for_dim (fd, &d->local_offset);
+            dim = get_value_for_dim (&d->local_offset);
             offsets[dims_count]=dim;
             if(dims_count==0)
                 sprintf(vars->local_offsets,"%llu", dim);
             else
                 sprintf(vars->local_offsets,"%s,%llu",vars->local_offsets, dim);
-            
+
             dims_count++;
             d=d->next;
-        } //end of while (d) 
+        } //end of while (d)
 
         if(type_size==1) {
-            vars->multidim=adios_flag_yes; 
-            varsize=adios_get_var_size(v, method->group, data); 
+            vars->multidim=adios_flag_yes;
+            varsize=adios_get_var_size(v, method->group, data);
             vars->data=malloc(varsize);
-            memcpy(vars->data, data, varsize); 
+            memcpy(vars->data, data, varsize);
         }
         else {
 
@@ -1169,7 +1151,7 @@ void adios_var_merge_write (struct adios_file_struct * fd
             if(md->layout[ndims-1]==-1) {
                 //process layout
                 md->procs[ndims-1]=(int *)malloc(3*sizeof(int)); //FIXME
-                //prepare the process map space 
+                //prepare the process map space
                 proc_map=(int *)malloc(md->size*sizeof(int));
                 sequence=(int *)malloc(3*sizeof(int));
                 memset(sequence,0x00,3*sizeof(int));
@@ -1185,14 +1167,14 @@ void adios_var_merge_write (struct adios_file_struct * fd
                 adios_error(err_corrupted_variable, "Unrecognizable decomposition.");
                 exit(-1);
             }
-            else { 
-                //the number of chunks to aggregate in one level of spatial aggregation 
+            else {
+                //the number of chunks to aggregate in one level of spatial aggregation
                 //is decided by the domain decomposition
                 chunk_cnt=(int)pow(2, decomp);
 
                 //too few process or chunk size is large enough, we do not need to aggregate
                 //XXX: default the aggregated chunksize=2MB
-                if (md->size < chunk_cnt || varsize > aggr_chunksize/chunk_cnt)  
+                if (md->size < chunk_cnt || varsize > aggr_chunksize/chunk_cnt)
                     vars->set_aggr=0;
                 else {
                     vars->set_aggr=1;
@@ -1204,35 +1186,35 @@ void adios_var_merge_write (struct adios_file_struct * fd
                         // we need at least twice the number of chunks for
                         // the first level aggregation in order to do higher
                         // level aggregation
-                        if(md->size<chunk_cnt*2) 
+                        if(md->size<chunk_cnt*2)
                             aggr_level=1;
                         else
-                            aggr_level=2; 
+                            aggr_level=2;
                     }
-                    
+
                     //calculating the aggregator and client processes
                     prep_aggr(md->procs[ndims-1], ndims, decomp, md->rank, md->size, aggr_level);
                 }
             }
         }
-        else 
-            log_error("Current VAR_MERGE only supports up to 3-D variables with minimum of 2 processes with 1D decomposition. No spatial merging will be performed.\n"); 
-                    
+        else
+            log_error("Current VAR_MERGE only supports up to 3-D variables with minimum of 2 processes with 1D decomposition. No spatial merging will be performed.\n");
+
         //no spatial aggregation, just copy data
         if(vars->set_aggr!=1) {
             vars->data=malloc(varsize);
             memcpy(vars->data, data, varsize);
             //varcnt++;
         }
-        else { //if we need to do spatial aggregation 
-            //only the highest level aggregators need to allocate space for output 
+        else { //if we need to do spatial aggregation
+            //only the highest level aggregators need to allocate space for output
             if(my_aggregator[ndims-1][aggr_level-1]==md->rank) {
                 //allocate the total buffer for the output data
                 alloc_size=varsize;
                 for(i=0;i<aggr_level;i++)
                     alloc_size*=(aggr_cnt[ndims-1][i]+1);
                 vars->data=malloc(alloc_size);
-            } 
+            }
 
             new_ldims=(char *)malloc(128*sizeof(char));
             memset(new_ldims, 0x00, 128);
@@ -1249,18 +1231,19 @@ void adios_var_merge_write (struct adios_file_struct * fd
         } //end of if(do_spatial_aggr)
         }
     } //end of if(ndims)
-    else //scalar 
+    else //scalar
     {
         vars->multidim=adios_flag_no;
 
-        varsize=adios_get_var_size(v, method->group, data); 
+        varsize=adios_get_var_size(v, method->group, data);
         vars->data=malloc(varsize);
-        memcpy(vars->data, data, varsize); 
+        memcpy(vars->data, data, varsize);
     }
 
     totalsize+=varsize;
     if(varsize>0) {
-        adios_common_define_var(grp, vars->name, vars->path, vars->type, vars->dimensions, vars->global_dimensions, vars->local_offsets);
+        // NCSU ALACRITY-ADIOS: In the future, the transform type string here needs to be reconsidered, to possibly allow transforms after aggregation...
+        adios_common_define_var(grp, vars->name, vars->path, vars->type, vars->dimensions, vars->global_dimensions, vars->local_offsets, "");
         varcnt++;
     }
     else { //move back the pointer, and release the memory
@@ -1279,20 +1262,20 @@ void adios_var_merge_read (struct adios_file_struct * fd
 }
 
 void release_resource()
-{ 
+{
     int cnt;
     struct aggr_var_struct *next;
 
     vars=header;
     for(cnt=0;cnt<varcnt;cnt++)
     {
-        if(cnt!=(varcnt-1)) 
+        if(cnt!=(varcnt-1))
             next=vars->next;
         free(vars->data);
         free(vars->dimensions);
         free(vars->global_dimensions);
         free(vars->local_offsets);
-        free(vars); 
+        free(vars);
         vars=next;
     }
 }
@@ -1363,7 +1346,7 @@ void copy_aggr_data (void *dst, void *src,
         uint64_t* size_in_dset,
         uint64_t* ldims,
         const uint64_t * readsize,
-        uint64_t dst_stride, //8 
+        uint64_t dst_stride, //8
         uint64_t src_stride, //9
         uint64_t dst_offset,
         uint64_t src_offset,
@@ -1388,7 +1371,7 @@ void copy_aggr_data (void *dst, void *src,
     }
 
     for (i = 0; i<size_in_dset[idim];i++) {
-        // get the different step granularity 
+        // get the different step granularity
         // for each different reading pattern broke
         src_step = 1;
         dst_step = 1;
@@ -1409,13 +1392,13 @@ static void cal_gdims(int ndims, uint64_t *p_offsets, uint64_t *offsets, uint64_
         gdims[0]=ldims[0]+p_dims[0];
     }
     else if(ndims==2) {
-        if(p_offsets[0]!=offsets[0] && p_offsets[1]==offsets[1]) 
+        if(p_offsets[0]!=offsets[0] && p_offsets[1]==offsets[1])
                gdims[0]=ldims[0]+p_dims[0];
-        else if(p_offsets[1]!=offsets[1] && p_offsets[0]==offsets[0]) 
+        else if(p_offsets[1]!=offsets[1] && p_offsets[0]==offsets[0])
             gdims[1]=ldims[1]+p_dims[1];
     }
     else if(ndims==3) {
-        if(p_offsets[0]!=offsets[0] && p_offsets[1]==offsets[1] && p_offsets[2]==offsets[2]) 
+        if(p_offsets[0]!=offsets[0] && p_offsets[1]==offsets[1] && p_offsets[2]==offsets[2])
                gdims[0]=ldims[0]+p_dims[0];
         else if(p_offsets[1]!=offsets[1] && p_offsets[0]==offsets[0] && p_offsets[2]==offsets[2])
             gdims[1]=ldims[1]+p_dims[1];
@@ -1424,7 +1407,7 @@ static void cal_gdims(int ndims, uint64_t *p_offsets, uint64_t *offsets, uint64_
     }
 }
 
-static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldims, uint64_t *offsets, char *new_ldims, int rank,  void *data, uint64_t varsize, void *output, int type_size, MPI_Comm comm) 
+static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldims, uint64_t *offsets, char *new_ldims, int rank,  void *data, uint64_t varsize, void *output, int type_size, MPI_Comm comm)
 {
     //struct adios_var_struct * v = g->vars;
     int i, j, k, client_cnt, lev;
@@ -1454,7 +1437,7 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
                 tmp_dims=(uint64_t *)malloc(ndims*sizeof(uint64_t));
                 tmp_offsets=(uint64_t *)malloc(ndims*sizeof(uint64_t));
             }
-            
+
             else{
                 tmpbuf=(char *)realloc(tmpbuf, (aggr_cnt[ndims-1][lev]+1)*varsize);
                 buff_offset=varsize;
@@ -1476,16 +1459,16 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
             //gather data from clients
             for(i=0;i<aggr_cnt[ndims-1][lev];i++) {
                 //receive the ldims of the client process
-                if(ndims==1) { 
-                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr1d_clients[lev][i].rank, 
+                if(ndims==1) {
+                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr1d_clients[lev][i].rank,
                         aggr1d_clients[lev][i].rank, comm, &status);
                 }
-                else if(ndims==2) { 
-                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr2d_clients[lev][i].rank, 
+                else if(ndims==2) {
+                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr2d_clients[lev][i].rank,
                         aggr2d_clients[lev][i].rank, comm, &status);
                 }
-                else if(ndims==3) { 
-                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr3d_clients[lev][i].rank, 
+                else if(ndims==3) {
+                    MPI_Recv (recvbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, aggr3d_clients[lev][i].rank,
                         aggr3d_clients[lev][i].rank, comm, &status);
                 }
 
@@ -1506,7 +1489,7 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
                 //XXX: FIXME harded for now
                 //FIXME: incorrent algorithm, it only works for 3D domain
                 //decomposition, probably we need a map
-                
+
                 //get the offsets
                 memcpy(tmp_offsets, recvbuf+ndims*sizeof(uint64_t), ndims*sizeof(uint64_t));
 
@@ -1515,16 +1498,16 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
                 cal_gdims(ndims, tmp_offsets, offsets, tmp_dims, ldims, gdims);
 
                 //receive the data from the client process
-                if(ndims==1) { 
-                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE, 
+                if(ndims==1) {
+                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE,
                             aggr1d_clients[lev][i].rank, aggr1d_clients[lev][i].rank, comm, &status);
                 }
-                else if(ndims==2) { 
-                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE, 
+                else if(ndims==2) {
+                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE,
                             aggr2d_clients[lev][i].rank, aggr2d_clients[lev][i].rank, comm, &status);
                 }
-                if(ndims==3) { 
-                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE, 
+                if(ndims==3) {
+                    MPI_Recv (tmpbuf+buff_offset, tmpsize, MPI_BYTE,
                             aggr3d_clients[lev][i].rank, aggr3d_clients[lev][i].rank, comm, &status);
                 }
 
@@ -1538,31 +1521,31 @@ static uint64_t do_spatial_aggr(int level, int *procs, int ndims, uint64_t *ldim
                 else
                     sprintf(new_ldims, "%s,%llu", new_ldims, gdims[i]);
             }
-                
+
             //aggregate the chunks
             //1D variable doesn't need to do this since the data is already
             //aligned in the buffer
-            if(ndims>1) 
+            if(ndims>1)
                 aggr_chunks(&tmpbuf, procs, ndims, ldims_list, gdims, size_list, buff_offset, aggr_cnt[ndims-1][lev]+1, rank, lev, type_size);
 
-            //update the local dimensions at the aggregators 
+            //update the local dimensions at the aggregators
             memcpy(ldims, gdims, ndims*sizeof(uint64_t));
             //the buffer offset marks the current variable size
             varsize=buff_offset;
         }
         else{
 
-            //the previous level clients don't need to do anything 
+            //the previous level clients don't need to do anything
             if(lev>0 && my_aggregator[ndims-1][lev-1]!=rank)
                 continue;
-            else 
+            else
                 sendbuf=(char *)malloc(2*ndims*sizeof(uint64_t));
-                
+
             //put in local dimensions
             memcpy(sendbuf, ldims, ndims*sizeof(uint64_t));
             //put in offsets
             memcpy(sendbuf+ndims*sizeof(uint64_t), offsets, ndims*sizeof(uint64_t));
-            
+
             //clients send out the local dimension of data chunks
             MPI_Send(sendbuf, 2*ndims*sizeof(uint64_t), MPI_BYTE, my_aggregator[ndims-1][lev], rank, comm);
 
@@ -1608,7 +1591,7 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
 
     chunk_cnt=(int)pow(2, ndims);
     input=(char *)malloc(totalsize);
-    memcpy(input, *output, totalsize); 
+    memcpy(input, *output, totalsize);
 
     dst_stride=1;
     src_stride=1;
@@ -1632,7 +1615,7 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
     //determine the number of chunks on each dimension
     for(i=0;i<aggr_cnt[ndims-1][level];i++) {
         offx=offy=offz=0;
-        if(ndims==1) { 
+        if(ndims==1) {
             offx=aggr1d_clients[level][i].rank%procs[sequence[0]];
         }
         if(ndims==2) {
@@ -1668,15 +1651,15 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
                nk++;
         }
         else if(offy!=m_offy && offx==m_offx) {
-           if(ndims==2 ||(ndims==3 && offz==m_offz)) 
-               nj++; 
+           if(ndims==2 ||(ndims==3 && offz==m_offz))
+               nj++;
         }
-        
+
         //only applies for 3D
         if(ndims==3 && offz!=m_offz && offx==m_offx && offy==m_offy)
             ni++;
     }
-    
+
     cnt=0;
     prev_x=prev_y=prev_z=0;
     for(i=0;i<ni;i++) {
@@ -1686,11 +1669,11 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
                     size_in_dset[0]=1;
                     size_in_dset[1]=ldims_list[ndims*cnt+0];
                 }
-                if(ndims==2) { 
+                if(ndims==2) {
                     size_in_dset[0]=ldims_list[ndims*cnt+1];
                     size_in_dset[1]=ldims_list[ndims*cnt+0];
                 }
-                else if(ndims==3) { 
+                else if(ndims==3) {
                     size_in_dset[0]=ldims_list[ndims*cnt+2];
                     size_in_dset[1]=ldims_list[ndims*cnt+1];
                 }
@@ -1700,10 +1683,10 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
                 dst_stride=gdims[0];
                 var_offset=0;
 
-                if(cnt!=0) { 
-                    //start offset in the aggregated chunk 
+                if(cnt!=0) {
+                    //start offset in the aggregated chunk
                     dset_offset=i*prev_z*gdims[0]*gdims[1]+j*prev_y*gdims[0]+k*prev_x;
-                    //start offset in the input buffer 
+                    //start offset in the input buffer
                     buff_offset+=size_list[cnt-1];
                 }
                 else {
@@ -1731,7 +1714,7 @@ static void aggr_chunks(char **output, int *procs, int ndims, uint64_t *ldims_li
             }
             prev_y=ldims_list[ndims*(cnt-1)+1];
         }//end of j
-        if(ndims==3) { 
+        if(ndims==3) {
             prev_z=ldims_list[ndims*(cnt-1)+2];
         }
     } //end of i
diff --git a/tests/C/CMakeLists.txt b/tests/C/CMakeLists.txt
index 95910a8..2fd55a7 100644
--- a/tests/C/CMakeLists.txt
+++ b/tests/C/CMakeLists.txt
@@ -1,13 +1,18 @@
 include_directories(${PROJECT_SOURCE_DIR}/tests/C)
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/src)
-link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
 link_directories(${MXML_INCLUDE_DIR}/../lib)
 
 add_executable(adios_test_c adios_test_c.c)
-target_link_libraries(adios_test_c adios ${ADIOSLIB_LDADD}) 
+target_link_libraries(adios_test_c adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
 set(adios_test_c_CPPFLAGS "${ADIOSLIB_CPPFLAGS}")
 set(adios_test_c_CFLAGS "${ADIOSLIB_CFLAGS}")
-set_target_properties(adios_test_c PROPERTIES COMPILE_FLAGS "${adios_test_c_CFLAGS} ${adios_test_c_CPPFLAGS}")
+set_target_properties(adios_test_c PROPERTIES COMPILE_FLAGS "${adios_test_c_CFLAGS} ${adios_test_c_CPPFLAGS} ${MPI_C_COMPILE_FLAGS}")
+if(MPI_LINK_FLAGS)
+   set_target_properties(adios_test_c PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
 
-#install(FILES config_c.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C)
+file(COPY config_c.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C)
+
+add_subdirectory(flexpath_tests)
diff --git a/tests/C/Makefile.am b/tests/C/Makefile.am
index 8a64259..d221309 100644
--- a/tests/C/Makefile.am
+++ b/tests/C/Makefile.am
@@ -1,8 +1,13 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+SUBDIRS=flexpath_tests
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS=adios_test_c
 
 adios_test_c_SOURCES = adios_test_c.c
diff --git a/tests/C/Makefile.in b/tests/C/Makefile.in
index 6f645ae..4b6f3b1 100644
--- a/tests/C/Makefile.in
+++ b/tests/C/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = adios_test_c$(EXEEXT)
 subdir = tests/C
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -88,9 +96,47 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	$(LDFLAGS) -o $@
 SOURCES = $(adios_test_c_SOURCES)
 DIST_SOURCES = $(adios_test_c_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
 ETAGS = etags
 CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
 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@
 ADIOSLIB_CFLAGS = @ADIOSLIB_CFLAGS@
 ADIOSLIB_CPPFLAGS = @ADIOSLIB_CPPFLAGS@
@@ -113,12 +159,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -181,6 +236,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -253,7 +311,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -308,8 +375,9 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
+SUBDIRS = flexpath_tests
 AUTOMAKE_OPTIONS = no-dependencies
 adios_test_c_SOURCES = adios_test_c.c
 adios_test_c_CPPFLAGS = $(ADIOSLIB_CPPFLAGS)
@@ -318,7 +386,7 @@ adios_test_c_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 adios_test_c_LDFLAGS = $(ADIOSLIB_LDFLAGS) 
 CLEANFILES = restart.bp
 EXTRA_DIST = config_c.xml
-all: all-am
+all: all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
@@ -392,6 +460,76 @@ mostlyclean-libtool:
 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.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -402,10 +540,23 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	mkid -fID $$unique
 tags: TAGS
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	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; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
@@ -424,7 +575,7 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  fi; \
 	fi
 ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -474,19 +625,48 @@ distdir: $(DISTFILES)
 	    || exit 1; \
 	  fi; \
 	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    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-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS) 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-am
+installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -504,90 +684,96 @@ distclean-generic:
 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: clean-recursive
 
 clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
 	mostlyclean-am
 
-distclean: distclean-am
+distclean: distclean-recursive
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
 
-dvi: dvi-am
+dvi: dvi-recursive
 
 dvi-am:
 
-html: html-am
+html: html-recursive
 
 html-am:
 
-info: info-am
+info: info-recursive
 
 info-am:
 
 install-data-am:
 
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
 
 install-dvi-am:
 
 install-exec-am:
 
-install-html: install-html-am
+install-html: install-html-recursive
 
 install-html-am:
 
-install-info: install-info-am
+install-info: install-info-recursive
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
 
 install-pdf-am:
 
-install-ps: install-ps-am
+install-ps: install-ps-recursive
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
 
 mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 	mostlyclean-libtool
 
-pdf: pdf-am
+pdf: pdf-recursive
 
 pdf-am:
 
-ps: ps-am
+ps: ps-recursive
 
 ps-am:
 
 uninstall-am:
 
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags ctags-recursive \
+	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-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-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/tests/C/flexpath_tests/1D_arr_global/CMakeLists.txt b/tests/C/flexpath_tests/1D_arr_global/CMakeLists.txt
new file mode 100644
index 0000000..2207a63
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/CMakeLists.txt
@@ -0,0 +1,23 @@
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
+link_directories(${PROJECT_BINARY_DIR}/src)
+
+add_executable(writer_global writer.c ../common/utils.c)
+target_link_libraries(writer_global adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+#add_custom_target(
+#    writer ALL
+#    COMMAND $(CC) writer.c ../common/utils.c -o writer -I${PROJECT_SOURCE_DIR}/src/public -I${CMAKE_CURRENT_SOURCE_DIR}/../include -ladios -L${PROJECT_BINARY_DIR}/src ${ADIOSLIB_LDADD}
+#    DEPENDS writer.c ../common/utils.c
+#    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+
+add_executable(reader_global reader.c ../common/utils.c)
+target_link_libraries(reader_global adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+#add_custom_target(
+#    reader ALL
+#    COMMAND $(CC) reader.c ../common/utils.c -o reader -I${PROJECT_SOURCE_DIR}/src/public -I${CMAKE_CURRENT_SOURCE_DIR}/../include -ladios -L${PROJECT_BINARY_DIR}/src ${ADIOSLIB_LDADD}
+#    DEPENDS reader.c ../common/utils.c
+#    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+file(COPY test_config_flex.xml readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/1D_arr_global)
diff --git a/tests/C/flexpath_tests/1D_arr_global/Makefile.am b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
new file mode 100644
index 0000000..b89db08
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.am
@@ -0,0 +1,21 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
+
+noinst_PROGRAMS = writer_global reader_global
+
+writer_global_SOURCES = writer.c ../common/utils.c
+writer_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_global_SOURCES = reader.c ../common/utils.c
+reader_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+EXTRA_DIST = test_config_flex.xml cfg.h 
diff --git a/examples/C/scalars/Makefile.in b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
similarity index 79%
copy from examples/C/scalars/Makefile.in
copy to tests/C/flexpath_tests/1D_arr_global/Makefile.in
index b08ba8c..82f0926 100644
--- a/examples/C/scalars/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global/Makefile.in
@@ -34,12 +34,15 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = scalars_write$(EXEEXT) scalars_read$(EXEEXT) \
-	scalars_write_step$(EXEEXT)
-subdir = examples/C/scalars
+noinst_PROGRAMS = writer_global$(EXEEXT) reader_global$(EXEEXT)
+subdir = tests/C/flexpath_tests/1D_arr_global
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,28 +74,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_scalars_read_OBJECTS = scalars_read.$(OBJEXT)
-scalars_read_OBJECTS = $(am_scalars_read_OBJECTS)
+am_reader_global_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
+reader_global_OBJECTS = $(am_reader_global_OBJECTS)
 am__DEPENDENCIES_1 =
-scalars_read_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+reader_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_read_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_OBJECTS = $(am_scalars_write_OBJECTS)
-scalars_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_global_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_global_OBJECTS = writer.$(OBJEXT) utils.$(OBJEXT)
+writer_global_OBJECTS = $(am_writer_global_OBJECTS)
+writer_global_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_global_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_step_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_step_OBJECTS = $(am_scalars_write_step_OBJECTS)
-scalars_write_step_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-scalars_write_step_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_step_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_global_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -101,10 +101,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
-DIST_SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
+SOURCES = $(reader_global_SOURCES) $(writer_global_SOURCES)
+DIST_SOURCES = $(reader_global_SOURCES) $(writer_global_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -130,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -198,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -270,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -325,22 +344,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
-scalars_write_SOURCES = scalars_write.c
-scalars_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-scalars_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-scalars_read_SOURCES = scalars_read.c
-scalars_read_LDADD = $(top_builddir)/src/libadiosread.a \
-	$(ADIOSREADLIB_LDADD)
-scalars_read_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
-scalars_write_step_SOURCES = scalars_write.c
-scalars_write_step_LDADD = $(top_builddir)/src/libadios.a \
-	$(ADIOSLIB_LDADD)
-scalars_write_step_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+writer_global_SOURCES = writer.c ../common/utils.c
+writer_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_global_SOURCES = reader.c ../common/utils.c
+reader_global_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_global_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = scalars.xml gwrite_scalars.ch gread_scalars.ch job.pbs
+EXTRA_DIST = test_config_flex.xml cfg.h 
 all: all-am
 
 .SUFFIXES:
@@ -354,9 +368,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/scalars/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/1D_arr_global/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/scalars/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/1D_arr_global/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -384,15 +398,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-scalars_read$(EXEEXT): $(scalars_read_OBJECTS) $(scalars_read_DEPENDENCIES) 
-	@rm -f scalars_read$(EXEEXT)
-	$(scalars_read_LINK) $(scalars_read_OBJECTS) $(scalars_read_LDADD) $(LIBS)
-scalars_write$(EXEEXT): $(scalars_write_OBJECTS) $(scalars_write_DEPENDENCIES) 
-	@rm -f scalars_write$(EXEEXT)
-	$(scalars_write_LINK) $(scalars_write_OBJECTS) $(scalars_write_LDADD) $(LIBS)
-scalars_write_step$(EXEEXT): $(scalars_write_step_OBJECTS) $(scalars_write_step_DEPENDENCIES) 
-	@rm -f scalars_write_step$(EXEEXT)
-	$(scalars_write_step_LINK) $(scalars_write_step_OBJECTS) $(scalars_write_step_LDADD) $(LIBS)
+reader_global$(EXEEXT): $(reader_global_OBJECTS) $(reader_global_DEPENDENCIES) 
+	@rm -f reader_global$(EXEEXT)
+	$(reader_global_LINK) $(reader_global_OBJECTS) $(reader_global_LDADD) $(LIBS)
+writer_global$(EXEEXT): $(writer_global_OBJECTS) $(writer_global_DEPENDENCIES) 
+	@rm -f writer_global$(EXEEXT)
+	$(writer_global_LINK) $(writer_global_OBJECTS) $(writer_global_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -409,6 +420,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+utils.o: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../common/utils.c' || echo '$(srcdir)/'`../common/utils.c
+
+utils.obj: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../common/utils.c'; then $(CYGPATH_W) '../common/utils.c'; else $(CYGPATH_W) '$(srcdir)/../common/utils.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -499,7 +516,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -598,19 +615,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
 
 # 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.
diff --git a/tests/C/flexpath_tests/1D_arr_global/cfg.h b/tests/C/flexpath_tests/1D_arr_global/cfg.h
new file mode 100644
index 0000000..f8f905d
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/cfg.h
@@ -0,0 +1,15 @@
+/**
+ * cfg.h
+ *
+ *  Created on: Sep 4, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CFG_H_
+#define CFG_H_
+
+//! size of the X dimension
+#define NX_DIM 10
+
+
+#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/1D_arr_global/reader.c b/tests/C/flexpath_tests/1D_arr_global/reader.c
new file mode 100644
index 0000000..113db07
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/reader.c
@@ -0,0 +1,188 @@
+/**
+ * reader.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ * Created on: Jul 1, 2013
+ * Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is a test for the FlexPath method based on examples/C/flexpath_arrays
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#include "misc.h"
+#include "utils.h"
+#include "test_common.h"
+#include "cfg.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main (int argc, char **argv){
+	int rank =0, size =0;
+	int NX = 0;
+	double *t = NULL;
+	// this is an array we expect as a reference array
+	double *t_ref = NULL;
+	MPI_Comm comm = MPI_COMM_WORLD;
+	diag_t diag = DIAG_OK;  // to store the diagnostic information
+	struct test_info test_result = { TEST_PASSED, "1D_arr_global" };
+	struct err_counts err = { 0, 0};
+	struct adios_tsprt_opts adios_opts;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs readers. It is recommended to run as many readers as writers.");
+
+	// adios read initialization
+	MPI_Init( &argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+
+	// depending on the method
+	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
+	RET_IF_ERROR(err.adios, rank);
+
+	// I will be working with streams so the lock mode is necessary,
+	// return immediately if the stream unavailable
+	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME,adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
+	if ( !adios_handle){
+		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
+		return DIAG_ERR;
+	}
+
+	// define portions of data how they will be read
+	ADIOS_SELECTION *sel = NULL;
+	ADIOS_VARINFO *avi = NULL;
+
+
+	int64_t adios_buf_size;
+
+	int step = 0;
+	int n = 0;
+
+	// read how many processors wrote that array
+	avi = adios_inq_var (adios_handle, "size");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		return DIAG_ERR;
+	}
+	size = *((int*)avi->value);
+	adios_free_varinfo(avi);
+	avi = NULL;
+
+	// if I run the more readers than writers; just release
+	// the excessive readers
+	if (rank >= size){
+		p_info("rank %d: I am an excessive rank. Nothing to read ...\n", rank);
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		return DIAG_OK;
+	}
+
+	// read the size of the array
+	avi = adios_inq_var (adios_handle, "NX");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		return DIAG_ERR;
+	}
+
+	// I expect a scalar that will tell me the size of an array
+	assert(0 == avi->ndim);
+	assert(adios_integer == avi->type);
+	NX = *((int*)avi->value);
+	// I don't need that variable any more
+	adios_free_varinfo(avi);
+	assert(NX_DIM == NX);
+	avi = NULL;
+
+
+	// this will define the slice that we want to read; each rank should
+	// read its own slice written by a corresponding writer rank
+	// the var_1d is a 2-dim ADIOS variable (because we decided to have
+	// it as a global array); that's why we need a 2-dim ADIOS variable
+	uint64_t count[2] = {1,0};
+	count[1] = NX;
+	uint64_t start[2] = {0,0};
+	start[0] = rank;
+
+	sel = adios_selection_boundingbox(2,start, count);
+	if( !sel ){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
+	// allocate the memory for the actual array to be read
+	t = calloc(NX, sizeof(double));
+
+	if (adios_schedule_read(adios_handle, sel, "var_1d_array",0,1,t) != 0){
+		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto just_clean;
+	}
+
+	// not sure if this assumption is correct; difficult to find in the ADIOS sources
+	if (adios_perform_reads(adios_handle, 1) != 0){
+		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto just_clean;
+	}
+
+	// make the reference array with reference values I expect to get
+	t_ref = calloc(NX, sizeof(double));
+	gen_1D_array(t_ref, NX, rank);
+
+	// compare the values what you get with what you expect
+	int i = 0;
+	for (i = 0; i < NX; ++i) {
+		if (t[i] != t_ref[i]) {
+			p_test_failed("%s: rank %d: for t[%d] (expected %.1f, got %.1f)\n",
+					test_result.name, rank, i, t_ref[i], t[i]);
+			test_result.result = TEST_FAILED;
+			break;
+		}
+	}
+
+	if (TEST_PASSED == test_result.result)
+		p_test_passed("%s: rank %d\n", test_result.name, rank);
+
+
+/*#ifdef FLEXPATH_METHOD
+	adios_release_step(adios_handler);
+	// 0 - next available step, block for max 30 seconds until the next step
+	// is available
+	adios_advance_step(adios_handler, 0, 30);
+	if (0 == adios_errno){
+		printf("Rank %d: proceeding to the next step ...\n", rank);
+	} else {
+		printf("ERROR: adios_advance_step(); anyway Quitting ... Rank %d: (%d) %s\n", rank, adios_errno, adios_errmsg());
+	}
+#endif
+*/
+
+just_clean:
+	// clean everything
+	adios_selection_delete(sel);
+	sel = NULL;
+	free(t);
+	t = NULL;
+	free(t_ref);
+	t_ref = NULL;
+
+close_adios:
+	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+
+	if ((DIAG_OK == diag) && (TEST_PASSED == test_result.result)) {
+		return 0;
+	} else {
+		return 1;
+	}
+}
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays.xml b/tests/C/flexpath_tests/1D_arr_global/test_config_flex.xml
similarity index 73%
copy from examples/C/flexpath_arrays/global_range_select/arrays.xml
copy to tests/C/flexpath_tests/1D_arr_global/test_config_flex.xml
index 33cec61..e359fa8 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays.xml
+++ b/tests/C/flexpath_tests/1D_arr_global/test_config_flex.xml
@@ -2,16 +2,15 @@
 <adios-config host-language="C">
 <adios-group name="temperature" coordination-communicator="comm" stats="On">
     <var name="NX" type="integer"/>
-    <var name="NY" type="integer"/>
     <var name="size" type="integer"/>
     <var name="rank" type="integer"/>
-    <var name="test_scalar" type="integer"/>
     <global-bounds dimensions="size,NX" offsets="rank,0">
-        <var name="var_2d_array" gwrite="t" type="double" dimensions="NY,NX"/>
+    	<var name="var_1d_array" type="double" dimensions="1,NX"/>
     </global-bounds>
 </adios-group>
 
-<method group="temperature"  method="FLEXPATH">QUEUE_SIZE=4;</method>
+<!-- The queue size says how many timesteps the writer can buffer before it blocks -->
+<method group="temperature"  method="FLEXPATH">QUEUE_SIZE=4;</method>    
 
 <buffer size-MB="20" allocate-time="now"/>
 
diff --git a/tests/C/flexpath_tests/1D_arr_global/writer.c b/tests/C/flexpath_tests/1D_arr_global/writer.c
new file mode 100644
index 0000000..9dd9cf3
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global/writer.c
@@ -0,0 +1,88 @@
+/**
+ * writer.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ *  Created on: Jul 1, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is an example of writing a 1D array of doubles. Each process
+ * writes the NX sized array of doubles.
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"  // for adios_errno
+
+#include "misc.h"
+#include "utils.h"
+#include "cfg.h"
+#include "test_common.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main(int argc, char ** argv){
+	int  rank=0, size=0;
+	int  NX = NX_DIM;                // size of 1D array we will write
+	double t[NX_DIM];                // this will contain the variables
+	MPI_Comm  comm = MPI_COMM_WORLD; // required for ADIOS
+
+	int64_t 	adios_handle;        // the ADIOS file handler
+	int retval;
+	struct adios_tsprt_opts adios_opts;
+	int err_count = 0;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs writers. It is recommended to run as many writers as readers.");
+
+	// I assume that I have all required options set in adios_opts
+
+	// sanity check
+	assert(NX==NX_DIM);
+
+	// ADIOS initialization
+	MPI_Init(&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+	SET_ERROR_IF_ZERO(adios_init(adios_opts.xml_adios_init_filename, comm), err_count);
+	RET_IF_ERROR(err_count, rank);
+
+	// init the array that I will transport
+	if (gen_1D_array(t, NX, rank) == DIAG_ERR){
+		printf("ERROR: Generating 1D array. Quitting ...\n");
+		return DIAG_ERR;
+	}
+
+	uint64_t adios_groupsize, adios_totalsize;
+
+	// open with the group name as specified in the xml file
+	adios_open( &adios_handle, "temperature", FILE_NAME, "w", comm);
+	adios_groupsize = 4 + 4 + 4 + 8 * (NX);
+	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+			rank, adios_groupsize, adios_totalsize, retval);
+
+	// write; don't check errors for simplicity reasons
+	adios_write(adios_handle, "NX", &NX);
+	adios_write(adios_handle, "size", &size);
+	adios_write(adios_handle, "rank", &rank);
+	adios_write(adios_handle, "var_1d_array", t);
+
+	fprintf(stderr, "Rank=%d committed write\n", rank);
+
+	adios_close(adios_handle);
+
+	// clean and finalize the system
+	adios_finalize(rank);
+	MPI_Finalize();
+
+	return DIAG_OK;
+}
+
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/CMakeLists.txt b/tests/C/flexpath_tests/1D_arr_global_noxml/CMakeLists.txt
new file mode 100644
index 0000000..8c644f9
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
+link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(writer_global_noxml writer.c ../common/utils.c)
+target_link_libraries(writer_global_noxml adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
+add_executable(reader_global_noxml reader.c ../common/utils.c)
+target_link_libraries(reader_global_noxml adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/1D_arr_global_noxml)
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
new file mode 100644
index 0000000..85251ae
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.am
@@ -0,0 +1,22 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
+
+noinst_PROGRAMS = writer_global_noxml reader_global_noxml
+
+writer_global_noxml_SOURCES = writer.c ../common/utils.c
+writer_global_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_global_noxml_SOURCES = reader.c ../common/utils.c
+reader_global_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+
+EXTRA_DIST = cfg.h
+
diff --git a/examples/C/attributes/Makefile.in b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
similarity index 78%
copy from examples/C/attributes/Makefile.in
copy to tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
index 709e850..c57469d 100644
--- a/examples/C/attributes/Makefile.in
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/Makefile.in
@@ -34,11 +34,16 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = attributes_write$(EXEEXT) attributes_read$(EXEEXT)
-subdir = examples/C/attributes
+noinst_PROGRAMS = writer_global_noxml$(EXEEXT) \
+	reader_global_noxml$(EXEEXT)
+subdir = tests/C/flexpath_tests/1D_arr_global_noxml
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -66,21 +75,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_attributes_read_OBJECTS = attributes_read.$(OBJEXT)
-attributes_read_OBJECTS = $(am_attributes_read_OBJECTS)
+am_reader_global_noxml_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
+reader_global_noxml_OBJECTS = $(am_reader_global_noxml_OBJECTS)
 am__DEPENDENCIES_1 =
-attributes_read_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+reader_global_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-attributes_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_global_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(attributes_read_LDFLAGS) $(LDFLAGS) -o $@
-am_attributes_write_OBJECTS = attributes_write.$(OBJEXT)
-attributes_write_OBJECTS = $(am_attributes_write_OBJECTS)
-attributes_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_global_noxml_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_global_noxml_OBJECTS = writer.$(OBJEXT) utils.$(OBJEXT)
+writer_global_noxml_OBJECTS = $(am_writer_global_noxml_OBJECTS)
+writer_global_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-attributes_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_global_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(attributes_write_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_global_noxml_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -93,8 +102,10 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(attributes_read_SOURCES) $(attributes_write_SOURCES)
-DIST_SOURCES = $(attributes_read_SOURCES) $(attributes_write_SOURCES)
+SOURCES = $(reader_global_noxml_SOURCES) \
+	$(writer_global_noxml_SOURCES)
+DIST_SOURCES = $(reader_global_noxml_SOURCES) \
+	$(writer_global_noxml_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -120,12 +131,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +208,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +283,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,19 +347,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
-attributes_write_SOURCES = attributes_write.c
-attributes_write_LDADD = $(top_builddir)/src/libadios.a \
-	$(ADIOSLIB_LDADD)
-attributes_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-attributes_read_SOURCES = attributes_read.c
-attributes_read_LDADD = $(top_builddir)/src/libadiosread.a \
-	$(ADIOSREADLIB_LDADD)
-attributes_read_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
+writer_global_noxml_SOURCES = writer.c ../common/utils.c
+writer_global_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_global_noxml_SOURCES = reader.c ../common/utils.c
+reader_global_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_global_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = attributes.xml gwrite_temperature.ch gread_temperature.ch
+EXTRA_DIST = cfg.h
 all: all-am
 
 .SUFFIXES:
@@ -341,9 +371,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/attributes/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/1D_arr_global_noxml/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/attributes/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/1D_arr_global_noxml/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -371,12 +401,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-attributes_read$(EXEEXT): $(attributes_read_OBJECTS) $(attributes_read_DEPENDENCIES) 
-	@rm -f attributes_read$(EXEEXT)
-	$(attributes_read_LINK) $(attributes_read_OBJECTS) $(attributes_read_LDADD) $(LIBS)
-attributes_write$(EXEEXT): $(attributes_write_OBJECTS) $(attributes_write_DEPENDENCIES) 
-	@rm -f attributes_write$(EXEEXT)
-	$(attributes_write_LINK) $(attributes_write_OBJECTS) $(attributes_write_LDADD) $(LIBS)
+reader_global_noxml$(EXEEXT): $(reader_global_noxml_OBJECTS) $(reader_global_noxml_DEPENDENCIES) 
+	@rm -f reader_global_noxml$(EXEEXT)
+	$(reader_global_noxml_LINK) $(reader_global_noxml_OBJECTS) $(reader_global_noxml_LDADD) $(LIBS)
+writer_global_noxml$(EXEEXT): $(writer_global_noxml_OBJECTS) $(writer_global_noxml_DEPENDENCIES) 
+	@rm -f writer_global_noxml$(EXEEXT)
+	$(writer_global_noxml_LINK) $(writer_global_noxml_OBJECTS) $(writer_global_noxml_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -393,6 +423,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+utils.o: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../common/utils.c' || echo '$(srcdir)/'`../common/utils.c
+
+utils.obj: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../common/utils.c'; then $(CYGPATH_W) '../common/utils.c'; else $(CYGPATH_W) '$(srcdir)/../common/utils.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -483,7 +519,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -582,19 +618,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
 
 # 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.
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/cfg.h b/tests/C/flexpath_tests/1D_arr_global_noxml/cfg.h
new file mode 100644
index 0000000..f8f905d
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/cfg.h
@@ -0,0 +1,15 @@
+/**
+ * cfg.h
+ *
+ *  Created on: Sep 4, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CFG_H_
+#define CFG_H_
+
+//! size of the X dimension
+#define NX_DIM 10
+
+
+#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c b/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c
new file mode 100644
index 0000000..e14ec0e
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/reader.c
@@ -0,0 +1,184 @@
+/**
+ * arrays_read.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ * Created on: Jul 1, 2013
+ * Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is a test for the FlexPath method based on examples/C/flexpath_arrays
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#include "misc.h"
+#include "utils.h"
+#include "test_common.h"
+#include "cfg.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 3000
+
+
+
+int main (int argc, char **argv){
+	char filename[256];
+	int rank =0, size =0;
+	int NX = 0;
+	double *t = NULL;
+	// this is an array we expect as a reference array
+	double *t_ref = NULL;
+	MPI_Comm comm = MPI_COMM_WORLD;
+	diag_t diag = DIAG_OK;  // to store the diagnostic information
+	struct test_info test_result = {TEST_PASSED, "1D_arr_global_noxml"};
+	struct err_counts err = { 0, 0};
+	struct adios_tsprt_opts adios_opts;
+
+	GET_ENTRY_OPTIONS(adios_opts,  "Runs readers. It is recommended to run as many readers as writers.");
+
+	// adios read initialization
+	MPI_Init( &argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+
+	// depending on the method
+	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
+	RET_IF_ERROR(err.adios, rank);
+
+
+	// I will be working with streams so the lock mode is necessary,
+	// return immediately if the stream unavailable
+	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME, adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
+	if ( !adios_handle){
+		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
+		return DIAG_ERR;
+	}
+
+	// define portions of data how they will be read
+	ADIOS_SELECTION *sel = NULL;
+	ADIOS_VARINFO *avi = NULL;
+
+
+	int64_t adios_buf_size;
+	// for storing the variables
+	char buf[STR_BUFFER_SIZE];
+
+	int step = 0;
+	int n = 0;
+
+	// read how many processors wrote that array
+	avi = adios_inq_var (adios_handle, "size");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+	size = *((int*)avi->value);
+	adios_free_varinfo(avi);
+	avi = NULL;
+
+	// if I run the more readers than writers; just release
+	// the excessive readers
+	if (rank >= size){
+		p_info("rank %d: I am an excessive rank. Nothing to read ...\n", rank);
+		diag = DIAG_OK;
+		goto close_adios;
+	}
+
+	// read the size of the array
+	avi = adios_inq_var (adios_handle, "NX");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
+	// I expect a scalar that will tell me the size of an array
+	assert(0 == avi->ndim);
+	assert(adios_integer == avi->type);
+	NX = *((int*)avi->value);
+	// I don't need that variable any more
+	adios_free_varinfo(avi);
+	assert(NX_DIM == NX);
+	avi = NULL;
+
+
+	// this will define the slice that we want to read; each rank should
+	// read its own slice written by a corresponding writer rank
+	uint64_t count[1] = { NX };
+	uint64_t start[1] = { 0 };
+	start[0] = rank*NX;
+
+	sel = adios_selection_boundingbox(1,start, count);
+	if( !sel ){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
+	// make the reference array with reference values I expect to get
+	t_ref = calloc(NX, sizeof(double));
+	if (gen_1D_array(t_ref, NX, rank) == DIAG_ERR){
+		p_error("Generating 1D array. Quitting ...\n");
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
+	// allocate the memory for the actual array to be read
+	t = calloc(NX, sizeof(double));
+
+	if (adios_schedule_read(adios_handle, sel, "var_1d_array",0,1,t) != 0){
+		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto just_clean;
+	}
+
+	// not sure if this assumption is correct; difficult to find in the ADIOS sources
+	if (adios_perform_reads(adios_handle, 1) != 0){
+		p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto just_clean;
+	}
+
+	n = sprintf(buf, "Rank %d: var_1d_array: step %d: t: ", rank, step);
+
+	int i = 0;
+	for(i=0; i < NX; ++i){
+		if( t[i] != t_ref[i] ){
+			p_test_failed("%s: rank %d: for t[%d] (expected %.1f, got %.1f)\n", test_result.name, rank,  i, t_ref[i], t[i] );
+			test_result.result = TEST_FAILED;
+			break;
+		}
+	}
+
+	if (TEST_PASSED == test_result.result)
+		p_test_passed("%s: rank %d\n", test_result.name, rank);
+
+just_clean:
+	// clean everything
+	adios_selection_delete(sel);
+	sel = NULL;
+	free(t);
+	t = NULL;
+	free(t_ref);
+	t_ref = NULL;
+
+close_adios:
+	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+
+	if ((DIAG_OK == diag) && (TEST_PASSED == test_result.result)) {
+		return 0;
+	} else {
+		return 1;
+	}
+}
diff --git a/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
new file mode 100644
index 0000000..62adab8
--- /dev/null
+++ b/tests/C/flexpath_tests/1D_arr_global_noxml/writer.c
@@ -0,0 +1,124 @@
+/**
+ * arrays_write.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ *  Created on: Jul 1, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is an example of writing a 1D array of doubles. Each process
+ * writes the NX sized array of doubles.
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"  // for adios_errno
+
+#include "misc.h"
+#include "utils.h"
+#include "cfg.h"
+#include "test_common.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main(int argc, char ** argv){
+	char filename[256];           // the name of the file to write data and compare with flexpath
+	int  rank=0, size=0;
+	int  NX = NX_DIM;             // size of 1D array we will write
+	double t[NX_DIM];             // this will contain the variables to be tranpsorted
+	MPI_Comm  comm = MPI_COMM_WORLD; // required for ADIOS
+
+	int64_t 	adios_handle;   // the ADIOS file handler
+	int retval;
+
+	struct adios_tsprt_opts adios_opts;
+	int err_count = 0;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs writers. It is recommended to run as many writers as readers.");
+
+
+	// sanity check
+	assert(NX==NX_DIM);
+
+	// where I will write the data
+	strcpy(filename, FILE_NAME);
+
+	// ADIOS initialization
+	MPI_Init(&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+	// From sources it just returns 1 (2013-07-16, whatever)
+	adios_init_noxml(comm);
+
+	// returns 0 (buffer allocated) or 1 (seems everything fine)
+	// I guess size of the buffer in MB
+	adios_allocate_buffer(ADIOS_BUFFER_ALLOC_NOW, 20);
+
+	// this will hold the group id for all variables defined within this group
+	int64_t	adios_grp;
+
+	// now declare a group
+	adios_declare_group(&adios_grp, "temperature", "iter", adios_flag_yes);
+
+	SET_ERROR_IF_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
+	RET_IF_ERROR(err_count, rank);
+
+
+	// I am defining here a global array - global bounds is the size
+	// of global array for all writers; within that array there is
+	// an offset from which each rank has its space
+	int global_bounds= NX * size;
+	int		offsets= NX * rank;
+
+
+	adios_define_var (adios_grp, "NX", "", adios_integer, 0, 0, 0);
+	adios_define_var (adios_grp, "size", "", adios_integer, 0, 0, 0);
+	adios_define_var (adios_grp, "rank", "", adios_integer, 0, 0, 0);
+	adios_define_var (adios_grp, "global_bounds", "", adios_integer, 0, 0, 0);
+	adios_define_var (adios_grp, "offsets", "", adios_integer, 0, 0, 0);
+	// NX - local var dimensions, global_bounds - global dimension, offsets - variable local offsets
+	adios_define_var (adios_grp, "var_1d_array", "", adios_double, "NX", "global_bounds", "offsets");
+
+	// open our group and transport method associated with it
+	adios_open (&adios_handle, "temperature", FILE_NAME, "w", comm);
+	// NX, size, rank, global_bounds, offsets,var_1d_array
+	uint64_t adios_groupsize = 4 + 4 + 4 + 4 + 4 + NX * 8;
+	uint64_t adios_totalsize = 0;
+
+	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+				rank, adios_groupsize, adios_totalsize, retval);
+
+	// init the array that I will transport over the sea
+	if (gen_1D_array(t, NX, rank) == DIAG_ERR){
+		printf("ERROR: Generating 1D array. Quitting ...\n");
+		return DIAG_ERR;
+	}
+
+	// write; don't check errors for simplicity reasons
+	adios_write(adios_handle, "NX", &NX);
+	adios_write(adios_handle, "size", &size);
+	adios_write(adios_handle, "rank", &rank);
+	adios_write(adios_handle, "global_bounds", &global_bounds);
+	adios_write(adios_handle, "offsets", &offsets);
+	adios_write(adios_handle, "var_1d_array", t);
+
+	fprintf(stderr, "Rank=%d committed write\n", rank);
+
+	adios_close(adios_handle);
+
+	// clean and finalize the system
+	adios_finalize(rank);
+	MPI_Finalize();
+
+	return 0;
+}
+
diff --git a/tests/C/flexpath_tests/CMakeLists.txt b/tests/C/flexpath_tests/CMakeLists.txt
new file mode 100644
index 0000000..ae40d2f
--- /dev/null
+++ b/tests/C/flexpath_tests/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_subdirectory(1D_arr_global)
+add_subdirectory(1D_arr_global_noxml)
+add_subdirectory(global_range_select)
+add_subdirectory(maya_noxml)
+add_subdirectory(maya_append)
+add_subdirectory(scalar)
+
+file(COPY README DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/)
diff --git a/tests/C/flexpath_tests/Makefile.am b/tests/C/flexpath_tests/Makefile.am
new file mode 100644
index 0000000..5a751b4
--- /dev/null
+++ b/tests/C/flexpath_tests/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS=1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml maya_append scalar
+
+EXTRA_DIST = include/misc.h include/test_common.h  include/utils.h  
+
+
diff --git a/utils/Makefile.in b/tests/C/flexpath_tests/Makefile.in
similarity index 93%
copy from utils/Makefile.in
copy to tests/C/flexpath_tests/Makefile.in
index a13c5a0..0acfe30 100644
--- a/utils/Makefile.in
+++ b/tests/C/flexpath_tests/Makefile.in
@@ -33,13 +33,14 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
- at BUILD_WRITE_TRUE@am__append_1 = adios_lint bp2bp
- at HAVE_HDF5_TRUE@am__append_2 = bp2h5
- at HAVE_NETCDF_TRUE@am__append_3 = bp2ncd
-subdir = utils
+subdir = tests/C/flexpath_tests
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -82,8 +87,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = gpp bpdump bp2ascii bpsplit bpls adios_lint bp2bp bp2h5 \
-	bp2ncd skel
+DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -132,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -200,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -272,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -327,8 +352,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = gpp bpdump bp2ascii bpsplit bpls $(am__append_1) \
-	$(am__append_2) $(am__append_3) skel
+SUBDIRS = 1D_arr_global 1D_arr_global_noxml global_range_select maya_noxml maya_append scalar
+EXTRA_DIST = include/misc.h include/test_common.h  include/utils.h  
 all: all-recursive
 
 .SUFFIXES:
@@ -341,9 +366,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
diff --git a/tests/C/flexpath_tests/README b/tests/C/flexpath_tests/README
new file mode 100644
index 0000000..9d27d3d
--- /dev/null
+++ b/tests/C/flexpath_tests/README
@@ -0,0 +1,128 @@
+Flexpath Testing
+================
+
+Possible Test Setups
+--------------------
+
+1. Program which directly calls adios_flexpath functions and checks returns.
+2. Program which forks readers and writers, which dump to file and checks file contents.
+
+Existing Directories
+--------------------
+
+* global_range_select - runs tests using the global range selectors. Current tests are listed below:
+	- 1 to 1 all to all
+
+* scalar - read/write a scalar with (XML API)
+
+* 1D_arr_global - read/write a 1D array of doubles (XML API)
+
+* 1D_arr_global_noxml - read/write a 1D array of doubles but no XML API (analogous
+  to 1D_arr_global)
+  
+* maya_noxml - inspired by maya; same variables written multiple times (doesn't work with Flexpath)
+
+* maya_append - inspired by maya; testing the append mode (doesn't work with Flexpath)
+  
+How to build and clean the build 
+--------------------------------
+# build
+$ make 
+# clean
+$ make clean
+
+How to run regression tests (might be outdated 2013-09-04)
+----------------------------
+# be sure that appropriate paths for openmpi, mxml, and evpath are
+# set appropriately
+ 
+module list
+Currently Loaded Modules:
+  1) openmpi/1.6.3    2) mxml/2.7    3) evpath
+
+There is a convenience bash script 
+
+./run_tests.sh
+
+Run it without options to see how to run all tests.
+
+# to run test
+# in one terminal run writers
+./run_tests.sh -flx-w
+# in the second terminal run readers
+./run_tests.sh -flx-r
+
+Notes
+------
+There are directories that are used to most of the tests (2013-09-04)
+
+include
+common
+
+If you want to copy the individual regression test, then
+copy the include and common directory and the test directory as well.
+
+
+Recent tests
+------------
+
+MPI transport (2013-09-04) - my laptop
+
+TEST_PASSED scalar: rank 0
+TEST_PASSED scalar: rank 1
+TEST_PASSED 1D_arr_global: rank 0
+TEST_PASSED 1D_arr_global: rank 1
+TEST_PASSED 1D_arr_global_noxml: rank 0
+TEST_PASSED 1D_arr_global_noxml: rank 1
+TEST_PASSED maya_append: rank 0
+TEST_PASSED maya_noxml: rank 0
+
+FLEXPATH transport (2013-09-04) - my laptop
+
+TEST_PASSED scalar: rank 0
+TEST_PASSED scalar: rank 1
+TEST_PASSED 1D_arr_global: rank 0
+TEST_PASSED 1D_arr_global: rank 1
+TEST_PASSED 1D_arr_global_noxml: rank 0
+TEST_PASSED 1D_arr_global_noxml: rank 1
+
+maya_append and maya_noxml tests failed
+
+Some tests produced message
+
+1D_arr_global_noxml
+
+mpirun -np 2 ./writer -t flx
+Rank=1 adios_group_size(): adios_groupsize=100, adios_totalsize=558, retval=0
+Rank=1 committed write
+Rank=0 adios_group_size(): adios_groupsize=100, adios_totalsize=558, retval=0
+Rank=0 committed write
+No event handler with takeable buffer executing on this CM.
+No event handler with takeable buffer executing on this CM.
+Event 2ad30c000b60 not found in taken events list
+Event 2b3260000b60 not found in taken events list
+No event handler with takeable buffer executing on this CM.
+No event handler with takeable buffer executing on this CM.
+Event 2b3260001b90 not found in taken events list
+Event 2ad30c001b90 not found in taken events list
+No event handler with takeable buffer executing on this CM.
+No event handler with takeable buffer executing on this CM.
+No event handler with takeable buffer executing on this CM.
+Event 2ad30c03f200 not found in taken events list
+No event handler with takeable buffer executing on this CM.
+Event 2b326003f200 not found in taken events list
+No event handler with takeable buffer executing on this CM.
+Event 2ad30c03fad0 not found in taken events list
+No event handler with takeable buffer executing on this CM.
+Event 2b326003fad0 not found in taken events list
+make[1]: Leaving directory `/rock/synchrobox/proj/w-ecl/2013-06-17-adios/tests/C/flexpath_tests/1D_arr_global_noxml'
+
+1D_arr_global_noxml'
+mpirun -np 2 ./reader -t flx
+DEBUG: DEBUG: matched overlap type 1
+matched overlap type 1
+TEST_PASSED 1D_arr_global_noxml: rank 1
+TEST_PASSED 1D_arr_global_noxml: rank 0
+DEBUG: adios_read_finalize_method completed
+DEBUG: adios_read_finalize_method completed
+make[1]: Leaving directory `/rock/synchrobox/proj/w-ecl/2013-06-17-adios/tests/C/flexpath_tests/1D_arr_global_noxml'
diff --git a/tests/C/flexpath_tests/common/utils.c b/tests/C/flexpath_tests/common/utils.c
new file mode 100644
index 0000000..65df51c
--- /dev/null
+++ b/tests/C/flexpath_tests/common/utils.c
@@ -0,0 +1,317 @@
+/**
+ * utils.c
+ *
+ *  Created on: Jul 5, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ *  Utility functions.
+ */
+#include "mpi.h"
+#include "adios_read.h"
+#include "adios.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "misc.h"
+#include "utils.h"
+
+
+/**
+ * @param program_name The name of the program
+ * @param program_desc The description of the program
+ * @return DIAG_OK Returns always DIAG_OK
+ */
+diag_t usage(char *program_name, char *program_desc){
+	printf("USAGE\n");
+	printf("  mpirun -np nprocs %s [-h] -t method\n", program_name);
+	printf("\nDESCRIPTION\n");
+	printf("  %s\n", program_desc);
+	printf("\n nprocs Number of processors you want to use\n");
+	printf(" -t method\n");
+	printf("     The transport/read method. Currently supported flx and mpi.\n");
+	printf("     flx sets the FLEXPATH/ADIOS_READ_METHOD_FLEXPATH\n");
+	printf("     mpi sets the MPI/ADIOS_READ_METHOD_BP\n");
+	printf(" -h\n");
+	printf("     show usage\n");
+	printf("\nEXAMPLES\n");
+	printf("mpirun -np 2 %s -t flx\n", program_name);
+	printf("mpirun -np 2 %s -t mpi\n", program_name);
+
+	return DIAG_OK;
+}
+
+/**
+ * Generates the 1D array of length arr_len, based on the provided rank
+ *
+ * 	 p_arr : rank 0: 1, 2, 3, 4, 5, ....
+ *           rank 1: 10, 11, 12, 13, ...
+ *           rank 2: 20, 21, 22, 23, ...
+ *
+ * The function does not check if arr_len does check if the memory is overwritten
+ *
+ * @param p_arr The pointer to the array that will hold the values
+ * @param arr_len The number of elements in the array
+ * @param rank The rank for which I want to have the number generated
+ *
+ * @return DIAG_ERR if the p_arr is NULL
+ *         DIAG_OK otherwise
+ *          p_arr (with generated numbers)
+ */
+diag_t gen_1D_array(double *p_arr, int arr_len, int rank){
+
+	if (!p_arr){
+		fprintf(stderr, "ERROR: p_arr is NULL\n.");
+		return DIAG_ERR;
+	}
+	int i = 0;
+	for( i = 0; i < arr_len; i++){
+		p_arr[i] = rank * 10 + i;
+	}
+
+	return DIAG_OK;
+}
+
+/**
+ * TODO each rank generates the same sequence of numbers
+ * Generates the 1D array of length arr_len, based on the provided rank
+ * It assumes that the memory is allocated for p_arr
+ *
+ * 	 p_arr : rank 0: 1, 2, 3, 4, 5, ....
+ *           rank 1: 10, 11, 12, 13, ...
+ *           rank 2: 20, 21, 22, 23, ...
+ *
+ * The function does not check if the memory is overwritten
+ *
+ * @param p_arr The pointer to the array that will hold the values
+ * @param arr_len The number of elements in the array
+ * @param rank The rank for which I want to have the number generated
+ *
+ * @return DIAG_ERR if the p_arr is NULL
+ *         DIAG_OK otherwise
+ *          p_arr (with generated numbers)
+ */
+diag_t gen_1D_array2(double *p_arr, int arr_len, int rank){
+
+	if (!p_arr){
+		fprintf(stderr, "ERROR: p_arr is NULL\n.");
+		return DIAG_ERR;
+	}
+	int i = 0;
+	for( i = 0; i < arr_len; i++){
+		// see comment in @gen_1D_array
+		//p_arr[i] = rank * 10.0 + i;
+		p_arr[i] = i * 1.0;
+	}
+
+	return DIAG_OK;
+}
+
+/**
+ * TODO this is not true; each rank generates the same sequence of numbers
+ * Generates the 1D array of length arr_len, based on the provided rank
+ * It assumes that the memory is allocated for p_arr
+ *
+ * 	 p_arr : rank 0: 1, 2, 3, 4, 5, ....
+ *           rank 1: 10, 11, 12, 13, ...
+ *           rank 2: 20, 21, 22, 23, ...
+ *
+ * The function does not check if the memory is overwritten
+ *
+ * @param p_arr The pointer to the array that will hold the values
+ * @param arr_len The number of elements in the array
+ * @param rank The rank for which I want to have the number generated
+ *
+ * @return DIAG_ERR if the p_arr is NULL
+ *         DIAG_OK otherwise
+ *          p_arr (with generated numbers)
+ */
+diag_t gen_1D_array_int(int *p_arr, int arr_len, int rank){
+
+	if (!p_arr){
+		fprintf(stderr, "ERROR: p_arr is NULL\n.");
+		return DIAG_ERR;
+	}
+	int i = 0;
+	for( i = 0; i < arr_len; i++){
+		// the diversification with rank will not work for as the last one will be used
+		// if more than 1 ranks will be used and the reader will signal the error
+		// that's why I decided to go with the same value independent on
+		// the rank
+		// TODO but the above and below is something to explore
+		//p_arr[i] = rank * 10 + i;
+		p_arr[i] = i;
+	}
+
+	return DIAG_OK;
+}
+
+/**
+ * get the commandline options and fills the p_tsprt_opts structure with
+ * relevant parameters for ADIOS; sets *p_show_help to 1 if the user
+ * requested the help information
+ *
+ * Currently the following options are supported:
+ * ./executable -h
+ * ./executable -t flx
+ * ./executable -t mpi
+ *
+ * @param p_tsprt_opts (OUT) the structure filled with parameters from
+ *                           the command line
+ * @param argc (IN) as from main()
+ * @param argv (IN) same meaning as main()
+ * @param p_show_help (OUT) 0 - means no help printf requested
+ *                          1 - means the help printf info requested
+ *
+ * @return DIAG_OK if everything ok
+ *         DIAG_ERR if some errors, e.g., the option has not been found
+ *
+ */
+diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help){
+
+	diag_t diag = DIAG_OK;
+	int tsprt_flag = 0;
+	int c;
+	char *cvalue = NULL;
+	int i = 0;
+
+	opterr = 0;
+
+	// assume that no showing help
+	*p_show_help = 0;
+
+	while( (c = getopt(argc, argv, "ht:")) != -1){
+		switch(c){
+		case 'h':
+			*p_show_help = 1;
+			break;
+		case 't':
+			cvalue = optarg;
+			// by default I set adios options to be verbosed
+			// TODO might be changed to the actual option
+			strcpy(p_tsprt_opts->adios_options, "verbose=4; show hidden_attrs");
+
+			if (strcmp(cvalue, "flx") == 0){
+				p_tsprt_opts->method = ADIOS_READ_METHOD_FLEXPATH;
+				strcpy(p_tsprt_opts->transport, "FLEXPATH");
+				strcpy(p_tsprt_opts->xml_adios_init_filename, "test_config_flex.xml");
+			} else if (strcmp(cvalue, "mpi") == 0) {
+				p_tsprt_opts->method = ADIOS_READ_METHOD_BP;
+				strcpy(p_tsprt_opts->transport, "MPI");
+				strcpy(p_tsprt_opts->xml_adios_init_filename, "test_config_mpi.xml");
+			} else {
+				diag = DIAG_ERR;
+			}
+			break;
+		case '?':
+			if ('t' == optopt){
+				fprintf(stderr, "ERROR: option -%c requires transport argument. See help '-h'.\n", optopt);
+			} else if (isprint (optopt)) {
+				fprintf (stderr, "ERROR: Unknown option `-%c'.\n", optopt);
+			} else {
+				fprintf (stderr, "ERROR: Unknown option character `\\x%x'.\n", optopt);
+			}
+			diag = DIAG_ERR;
+	        break;
+	    default:
+	    	break;
+		}
+	}
+
+	for(i = optind; i < argc; ++i){
+		printf("ERROR: non-option argument %s\n", argv[i]);
+	}
+
+	if (DIAG_OK != diag) {
+		p_tsprt_opts->transport[0]='\0';
+	}
+	return diag;
+}
+
+
+/**
+ * Sets values the 1D array of length arr_len with a specified value
+ * It assumes that the memory is allocated for p_arr
+ *
+ * The function does not check if the memory is overwritten
+ *
+ * @param p_arr The pointer to the array that will hold the values
+ * @param arr_len The number of elements in the array
+ * @param value The value to be set
+ *
+ * @return DIAG_ERR if the p_arr is NULL
+ *          DIAG_OK otherwise
+ *          p_arr (with generated numbers)
+ */
+diag_t set_value(double *p_arr, int arr_len, double value){
+
+	if (!p_arr){
+		fprintf(stderr, "p_arr is NULL\n.");
+		return DIAG_ERR;
+	}
+	int i = 0;
+	for( i = 0; i < arr_len; i++){
+		p_arr[i] = value;
+	}
+
+	return DIAG_OK;
+}
+
+/**
+ * Get the size of the data. The function assumes that the data will be
+ * of a "double" type
+ *
+ * @param shape The array containing the shape values
+ * @param shape_elem_count How many elements is in th the shape array
+ * @param data_size (OUT) This value is computed based on the shape array
+ *
+ * @return DIAG_ERR if the shape is null
+ *          DIAG_OK if the data_size contains the valid value
+ */
+diag_t get_data_size(int *shape, int shape_elem_count, int* data_size){
+
+	if (!shape){
+		fprintf(stderr, "ERROR: shape is NULL\n");
+		return DIAG_ERR;
+	}
+
+	int i = 0;
+	int my_size = 8; //sizeof(double);
+
+	for(i = 0; i < shape_elem_count; ++i){
+		my_size *= shape[i];
+	}
+
+	*data_size = my_size;
+
+	return DIAG_OK;
+}
+
+/**
+ * Generates the maya var name based on the value of MAYA_GF_VAR_PFX macro and the number.
+ * Now it generates: MAYA_GF_VAR_PFX0, MAYA_GF_VAR_PFX1, ...
+ *
+ * The function doesn't protect against too small arra
+ * @param (in/out) buf  the buffer for holding the maya variable; it should be big enough
+ *                to hold additional characters that will create the final
+ *                name of the variable; it is cleaned
+ * @param (in) buf_size The size of the buffer in characters
+ * @param (in) maya_var_pfx The prefix for the maya variable
+ * @param (in) number  The number that will be concatenated with the prefix;
+ *                     the number should be positive
+ *
+ * @return DIAG_OK everything is ok
+ *         != DIAG_OK something is wrong
+ */
+diag_t gen_maya_var_name(char *buf, int buf_size, char *maya_var_pfx, int number){
+	if (number < 0){
+		return DIAG_ERR;
+	}
+
+	memset(buf, 0, buf_size);
+	sprintf(buf, "%s%d", maya_var_pfx, number);
+
+	return DIAG_OK;
+}
+
diff --git a/tests/C/flexpath_tests/global_range_select/CMakeLists.txt b/tests/C/flexpath_tests/global_range_select/CMakeLists.txt
new file mode 100644
index 0000000..29450c6
--- /dev/null
+++ b/tests/C/flexpath_tests/global_range_select/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/test/C/flexpath_tests/include)
+link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(arrays_writer arrays_write.c)
+target_link_libraries(arrays_writer adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
+add_executable(arrays_reader arrays_read.c)
+target_link_libraries(arrays_reader adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY arrays.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/global_range_select)
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.am b/tests/C/flexpath_tests/global_range_select/Makefile.am
similarity index 61%
copy from examples/C/flexpath_arrays/global_range_select/Makefile.am
copy to tests/C/flexpath_tests/global_range_select/Makefile.am
index aacc040..f22cd24 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.am
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.am
@@ -1,8 +1,12 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/run_tests.pl $(builddir)
+
 noinst_PROGRAMS = arrays_write arrays_read
 
 arrays_write_SOURCES = arrays_write.c
@@ -14,4 +18,4 @@ arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 
 CLEANFILES = *.bp
 CC=$(MPICC)
-EXTRA_DIST = arrays.xml 
+EXTRA_DIST = arrays.xml run_tests.pl
diff --git a/examples/C/flexpath_arrays/global_range_select/Makefile.in b/tests/C/flexpath_tests/global_range_select/Makefile.in
similarity index 88%
copy from examples/C/flexpath_arrays/global_range_select/Makefile.in
copy to tests/C/flexpath_tests/global_range_select/Makefile.in
index a34322f..4c74bbe 100644
--- a/examples/C/flexpath_arrays/global_range_select/Makefile.in
+++ b/tests/C/flexpath_tests/global_range_select/Makefile.in
@@ -35,10 +35,14 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = arrays_write$(EXEEXT) arrays_read$(EXEEXT)
-subdir = examples/C/flexpath_arrays/global_range_select
+subdir = tests/C/flexpath_tests/global_range_select
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -120,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
 arrays_write_SOURCES = arrays_write.c
 arrays_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -325,7 +354,7 @@ arrays_read_SOURCES = arrays_read.c
 arrays_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 arrays_read_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = arrays.xml 
+EXTRA_DIST = arrays.xml run_tests.pl
 all: all-am
 
 .SUFFIXES:
@@ -339,9 +368,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/flexpath_arrays/global_range_select/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/global_range_select/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/flexpath_arrays/global_range_select/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/global_range_select/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -481,7 +510,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -580,19 +609,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/run_tests.pl $(builddir)
 
 # 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.
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays.xml b/tests/C/flexpath_tests/global_range_select/arrays.xml
similarity index 100%
copy from examples/C/flexpath_arrays/global_range_select/arrays.xml
copy to tests/C/flexpath_tests/global_range_select/arrays.xml
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_read.c b/tests/C/flexpath_tests/global_range_select/arrays_read.c
similarity index 96%
copy from examples/C/flexpath_arrays/global_range_select/arrays_read.c
copy to tests/C/flexpath_tests/global_range_select/arrays_read.c
index f277190..803a053 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_read.c
+++ b/tests/C/flexpath_tests/global_range_select/arrays_read.c
@@ -40,8 +40,8 @@ int main (int argc, char ** argv)
     global_range_select.type=ADIOS_SELECTION_BOUNDINGBOX;
     global_range_select.u.bb.start = malloc(sizeof(uint64_t)*2);
     global_range_select.u.bb.count = malloc(sizeof(uint64_t)*2);
-    (global_range_select.u.bb.start)[0] = rank;
-    (global_range_select.u.bb.count)[0] = 1;
+    (global_range_select.u.bb.start)[0] = 0;
+    (global_range_select.u.bb.count)[0] = 4;
     (global_range_select.u.bb.start)[1] = 0;
     (global_range_select.u.bb.count)[1] = 40;
     global_range_select.u.bb.ndim = 2;
@@ -75,7 +75,7 @@ int main (int argc, char ** argv)
         //printf("\trank=%d: NY=%d\n", rank, NY);
     
         /* Allocate space for the arrays */
-        int nelem = 40;
+        int nelem = 160;
         int arr_size = sizeof(double) * nelem;
         t = (double *) malloc (arr_size);
         memset(t, 0, arr_size);
diff --git a/examples/C/flexpath_arrays/global_range_select/arrays_write.c b/tests/C/flexpath_tests/global_range_select/arrays_write.c
similarity index 94%
copy from examples/C/flexpath_arrays/global_range_select/arrays_write.c
copy to tests/C/flexpath_tests/global_range_select/arrays_write.c
index f7455b4..8c74518 100644
--- a/examples/C/flexpath_arrays/global_range_select/arrays_write.c
+++ b/tests/C/flexpath_tests/global_range_select/arrays_write.c
@@ -19,7 +19,7 @@ int main (int argc, char ** argv)
 {
     char        filename [256];
     int         rank, size, i;
-    int         NX = 10000; 
+    int         NX = 40; 
     int         NY = 1;
     double      t[NX];
     MPI_Comm    comm = MPI_COMM_WORLD;
@@ -35,9 +35,9 @@ int main (int argc, char ** argv)
     
     int test_scalar = rank * 1000;
     int ii;
-    for(ii = 0; ii<200; ii++){
+    for(ii = 0; ii<20; ii++){
       for (i = 0; i < NX; i++)
-        t[i] = rank * NX + i*ii;
+        t[i] = rank * NX + i;
     
       adios_open (&adios_handle, "temperature", filename, "w", comm);
     
diff --git a/tests/C/flexpath_tests/global_range_select/run_tests.pl b/tests/C/flexpath_tests/global_range_select/run_tests.pl
new file mode 100644
index 0000000..5a3f764
--- /dev/null
+++ b/tests/C/flexpath_tests/global_range_select/run_tests.pl
@@ -0,0 +1,8 @@
+$mypid = fork();
+if (! $mypid) {
+	system('mpirun arrays_read &>arrays_read.out');
+} elsif (undef $mypid) {
+	die 'fork failed';
+} else {
+	system('mpirun arrays_write &>arrays_write.out');
+}
diff --git a/tests/C/flexpath_tests/include/misc.h b/tests/C/flexpath_tests/include/misc.h
new file mode 100644
index 0000000..7a0d4b5
--- /dev/null
+++ b/tests/C/flexpath_tests/include/misc.h
@@ -0,0 +1,118 @@
+/**
+ * misc.h
+ *
+ *  Created on: Jul 5, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef MISC_H_
+#define MISC_H_
+
+#include <adios_read.h>
+
+//! if defined (not commented) the flexpath method will
+//! be used; otherwise the  ADIOS_READ_METHOD_BP and MPI
+//! if you are switching methods, make sure that arrays.xml
+//! contains the correct method
+//! you can use the -DFLEXPATH_METHOD in make CFLAGS="-DFLEXPATH_METHOD"
+//! to turn this on as well
+//#define FLEXPATH_METHOD 1
+
+//! the name of the file to be written test values
+#define FILE_NAME "test.bp"
+
+/*
+//! size of the X dimension
+#define NX_DIM 10
+
+//! the xml containing configuration of ADIOS
+#ifdef FLEXPATH_METHOD
+#define XML_ADIOS_INIT_FILENAME "test_config_flex.xml"
+#define METHOD ADIOS_READ_METHOD_FLEXPATH
+#define TRANSPORT "FLEXPATH"
+#else
+#define XML_ADIOS_INIT_FILENAME "test_config_mpi.xml"
+#define METHOD ADIOS_READ_METHOD_BP
+#define TRANSPORT "MPI"
+#endif
+
+//! options how verbose is ADIOS (see  adios_read_init_method)
+//! 0=quiet, ..., 4=debug
+#define ADIOS_OPTIONS "verbose=4; show hidden_attrs"
+
+//! defines if the test passed
+#define TEST_PASSED 0
+//! defines if the test failed
+#define TEST_FAILED -1
+
+//! indicates that the program
+#define PROGRAM_ERROR -2
+
+*/
+
+/**
+ * Describes the status of a test
+ */
+enum test_status {
+	TEST_UNKNOWN = -2,
+
+	TEST_FAILED = -1,
+	TEST_PASSED = 0,
+};
+
+/**
+ * Store the information about the tests
+ */
+struct test_info {
+	//! the result of the status
+	enum test_status result;
+	//! test name
+	char *name;
+};
+
+//! diagnostic information
+typedef enum {
+	DIAG_ERR = -1,
+	DIAG_OK = 0,
+} diag_t;
+
+/**
+ * This describes the input parameters for the test
+ * TODO probably not used - to be removed
+ */
+struct test_input_params {
+	//! the transport e.g., "flx", "mpi"
+	char tsprt[256];
+	//! 0 - don't show the help
+	//! 1 - help requested
+	int help;
+};
+
+/**
+ * The structure that describes the
+ * ADIOS options, transport and a reading method
+ */
+struct adios_tsprt_opts {
+	//! the name of the xml file if xml method is chosen
+	char xml_adios_init_filename[256];
+	//! the  read method e.g. ADIOS_READ_METHOD_FLEXPATH or ADIOD_READ_METHOD_BP
+	enum ADIOS_READ_METHOD method;
+	//! the transport e.g., "FLEXPATH", "MPI"
+	char transport[256];
+	//! can be used to store adios options as used by adios_read_init_method
+	//! 0=quieet, ..., 4=debug
+	char adios_options[256];
+};
+
+/**
+ * For storing errors
+ */
+struct err_counts {
+	int adios;        // counter for adios calls errors
+	int test;		  // counter for comparisons errors
+};
+
+
+
+
+#endif /* MISC_H_ */
diff --git a/tests/C/flexpath_tests/include/test_common.h b/tests/C/flexpath_tests/include/test_common.h
new file mode 100644
index 0000000..4ef56e0
--- /dev/null
+++ b/tests/C/flexpath_tests/include/test_common.h
@@ -0,0 +1,260 @@
+/**
+ * @file: test_common.h
+ * @author: Magda Slawinska, aka Magic Magg, magg dot gatech at gmail dot com
+ * @date: Dec 19, 2012
+ * Modified: Jan 03, 2013
+ * The utility macros
+ */
+
+#ifndef TEST_COMMON_H_
+#define TEST_COMMON_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#define DBG_TEST_FAILED_STR		"TEST_FAILED"
+#define DBG_TEST_PASSED_STR		"TEST_PASSED"
+
+#define DEBUG
+
+//! Debug printing verbosity
+#define DBG_LEVEL   DBG_DEBUG
+
+// New debug messaging state. There is no sense of a "level" for debugging. Each of these define the
+// purpose of the messages and is enabled/disabled per file
+
+//! system cannot continue, e.g. malloc
+#define DBG_ERROR   0
+//!
+#define DBG_CRITICAL 1
+//! some serious problems
+#define DBG_WARNING 2
+#define DBG_MESSAGE 3
+//! messages about state or configuration; high-level flow
+#define DBG_INFO    4
+//!  func args, variable values, etc; full flow, may slow system down
+#define DBG_DEBUG   5
+
+#define DBG_ERROR_STR 		"ERROR\t"
+#define DBG_CRITICAL_STR 	"CRITICAL\t"
+#define DBG_WARNING_STR 	"WARNING\t"
+#define DBG_MESSAGE_STR 	"MESSAGE\t"
+#define DBG_INFO_STR		"INFO\t"
+#define DBG_DEBUG_STR		"DEBUG\t"
+#define DBG_TODO_STR		"TODO\t"
+
+#define p_test_failed(fmt, args...)                             \
+    do {                                                  \
+         printf("%s " fmt, DBG_TEST_FAILED_STR,  ##args);  \
+         fflush(stdout);  											\
+    } while(0)
+
+#define p_test_passed(fmt, args...)                             \
+    do {                                                  \
+         printf("%s " fmt, DBG_TEST_PASSED_STR,  ##args);  \
+         fflush(stdout);  											\
+    } while(0)
+
+
+
+//! @todo do something like that but smarter without unnecessary copying
+#define p_error(fmt, args...)                             				\
+    do {                                                                \
+        if((DBG_ERROR) <= DBG_LEVEL) {                                  \
+            printf("%s(%d) %s:%s:%d: " fmt, DBG_ERROR_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+            fflush(stdout);  											\
+        }                                                               \
+    } while(0)
+
+
+#define p_warn(fmt, args...) \
+	do {                                                                \
+        if((DBG_WARNING) <= DBG_LEVEL) {                                      \
+        	printf("%s(%d) %s:%s:%d: " fmt, DBG_WARN_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+            fflush(stdout);												\
+        }                                                               \
+    } while(0)
+
+#define p_info(fmt, args...) \
+	do {                                                                \
+        if((DBG_INFO) <= DBG_LEVEL) {                                      \
+        	printf("%s(%d) %s:%s:%d: " fmt, DBG_INFO_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+            fflush(stdout);												\
+        }                                                               \
+    } while(0)
+
+#define p_debug(fmt, args...) \
+	do {                                                                \
+        if((DBG_DEBUG) <= DBG_LEVEL) {                                      \
+        	printf("%s(%d) %s:%s:%d: " fmt, DBG_DEBUG_STR, (DBG_ERROR), __FILE__, __FUNCTION__, __LINE__, ##args);   \
+            fflush(stdout);												\
+        }                                                               \
+    } while(0)
+
+
+// ------------------------------------
+// define some useful macro idioms
+// ADIOS UTILS
+#define CLOSE_ADIOS_READER(handle, method) \
+	adios_read_close(handle); 		 						\
+	adios_read_finalize_method(method);						\
+	MPI_Finalize();
+
+/**
+ * The macro gets the options from the command line
+ * It assumes presence and visibility of a few variables such as argc, argv
+ *
+ * @param adios_opts The structure where adios related command line options will be stored
+ *
+ * The macro causes to return DIAG_ERR if getting options returned errors
+ */
+#define GET_ENTRY_OPTIONS(adios_opts, help_string) \
+	if (1 == argc){ \
+		p_error("See '-h' for options. At least transport param needs to be specified. Quitting ...\n"); \
+		return DIAG_ERR; \
+	} \
+	do { \
+		int show_help = 0; \
+		if( DIAG_OK != get_options(&adios_opts, argc, argv, &show_help) ){ \
+			p_error("Got from get_options(). Quitting ...\n."); \
+			return DIAG_ERR; \
+		} \
+		if (show_help){ \
+			usage(argv[0], help_string); \
+			return DIAG_OK; \
+		} \
+	} while(0)
+
+/**
+ * checks if the adios call returned not zero and sets the error
+ * if yes. Sets the error means increasing err_count++
+ * @param fn_call adios function call
+ * @param (in/out) err_count incremented if the error observed
+ */
+#define SET_ERROR_IF_NOT_ZERO(fn_call, err_count)             \
+	do { \
+		int _error_code = fn_call;                                         \
+		if (_error_code != 0){                                             \
+			p_error("rank %d %s (%d) %s\n", rank, #fn_call, adios_errno, adios_errmsg()) ;\
+			err_count++;                                                   \
+		} \
+	} while(0)
+/**
+ * checks if the adios call returned not zero
+ * err_count++
+ * @param fn_call adios function call
+ * @param (in/out) err_count incremented if the error observed
+ */
+#define SET_ERROR_IF_ZERO(fn_call, err_count)             \
+	do { \
+		int _error_code = fn_call;                                         \
+		if (_error_code == 0){                                             \
+			p_error("rank %d: %s: (%d) %s\n", rank, #fn_call, adios_errno, adios_errmsg()) ;\
+			err_count++;                                                   \
+		} \
+	} while(0)
+/**
+ * prints the info; closes adios and returns the error code
+ * if the err_count is set to a positive number
+ *
+ * @param err_count The variable that positive value indicates that there is an error
+ */
+#define RET_IF_ERROR(err_count, rank) \
+	if ( err_count > 0) { \
+		p_info("Rank %d: Quitting ...\n", rank); \
+		return DIAG_ERR;                     \
+	}
+
+/**
+ * prints the info; closes adios and returns the error code
+ * if the err_count is set to a positive number
+ *
+ * @param err_count The variable that positive value indicates that there is an error
+ * @param rank the rank that closes the adios
+ * @param handle adios handle to close ADIOS
+ * @param method what method to close
+ */
+#define RET_AND_CLOSE_ADIOS_READER_IF_ERROR(err_count, rank, handle, method) \
+	if ( err_count > 0) { \
+		p_error("rank %d: Quitting ...\n", rank); \
+		CLOSE_ADIOS_READER(handle, method);                              \
+		return DIAG_ERR;                     \
+	}
+
+/**
+ * prints the info; closes adios and returns the error code
+ * if the err_count is set to a positive number
+ *
+ * @param test_res the test result
+ * @param rank the rank that closes the adios
+ * @param handle adios handle to close ADIOS
+ * @param method what method to close
+ */
+#define RET_AND_CLOSE_ADIOS_READER_IF_TEST_FAILED(test_res, rank, handle, method) \
+	if ( TEST_FAILED == test_res.result ) { \
+		p_test_failed("%s: rank %d\n", test_res.name, rank); \
+		CLOSE_ADIOS_READER(handle, method);                 \
+		return DIAG_ERR;                                    \
+	}
+/**
+ * breaks the loop if error count is positive
+ *
+ * @param err_count The variable that positive value indicates that ther is an error
+ */
+#define BREAK_IF_ERROR(err_count) \
+	if ( err_count > 0) { \
+		break; \
+	}
+
+
+
+// -------------------------------
+// test macros
+// -------------------------------
+/**
+ * assumes that err_count is defined
+ * @param value_ref The reference value
+ * @param value     The actual value
+ * @param err_count The value of the error counter; if the error increases
+ *                  the value will be increased
+ * @param test_res  The result of the test
+ */
+#define TEST_INT_EQUAL(value_ref, value, err_count, test_res) \
+	if (value != value_ref ){ \
+		test_res = TEST_FAILED; \
+		p_test_failed("(expected=%d, got=%d)\n", value_ref, value); \
+		err_count++; \
+	}
+
+/**
+ * assumes that err_count is defined
+ * @param value_ref The reference value
+ * @param value     The actual value
+ * @param err_count The value of the error counter; if the error increases
+ *                  the value will be increased
+ * @param test_res  The result of the test
+ */
+#define TEST_LONG_EQUAL(value_ref, value, err_count, test_res) \
+	if (value != value_ref ){ \
+		test_res = TEST_FAILED; \
+		p_test_failed("(expected=%ld, got=%ld)\n", value_ref, value); \
+		err_count++; \
+	}
+
+/**
+ * assumes that err_count is defined
+ * @param value_ref The reference value
+ * @param value     The actual value
+ * @param err_count The value of the error counter; if the error increases
+ *                  the value will be increased
+ * @param test_res  The result of the test
+ */
+#define TEST_DOUBLE_EQUAL(value_ref, value, err_count, test_res) \
+	if (value != value_ref ){ \
+		test_res = TEST_FAILED; \
+		p_test_failed("(expected=%0.2f, got=%0.2f)\n", value_ref, value); \
+		err_count++; \
+	}
+
+#endif /* TEST_COMMON_H_ */
diff --git a/tests/C/flexpath_tests/include/utils.h b/tests/C/flexpath_tests/include/utils.h
new file mode 100644
index 0000000..e5ed7f8
--- /dev/null
+++ b/tests/C/flexpath_tests/include/utils.h
@@ -0,0 +1,23 @@
+/**
+ * utils.h
+ *
+ *  Created on: Jul 5, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef UTILS_H_
+#define UTILS_H_
+
+extern diag_t usage(char *program_name, char *program_desc);
+extern diag_t gen_1D_array(double *p_arr, int arr_len, int rank);
+extern diag_t gen_1D_array2(double *p_arr, int arr_len, int rank);
+extern diag_t gen_1D_array_int(int *p_arr, int arr_len, int rank);
+extern diag_t get_options(struct adios_tsprt_opts * p_tsprt_opts, int argc, char ** argv, int *p_show_help);
+
+extern diag_t set_value(double *p_arr, int arr_len, double value);
+extern diag_t get_data_size(int *shape, int shape_elem_count, int* data_size);
+extern diag_t get_maya_var_name(char *prefix, int number);
+
+
+
+#endif /* UTILS_H_ */
diff --git a/tests/C/flexpath_tests/maya_append/CMakeLists.txt b/tests/C/flexpath_tests/maya_append/CMakeLists.txt
new file mode 100644
index 0000000..143330b
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
+link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+#link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(writer_maya writer.c ../common/utils.c)
+target_link_libraries(writer_maya adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
+add_executable(reader_maya reader.c ../common/utils.c)
+target_link_libraries(reader_maya adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/maya_append)
diff --git a/tests/C/flexpath_tests/maya_append/Makefile.am b/tests/C/flexpath_tests/maya_append/Makefile.am
new file mode 100644
index 0000000..758b39e
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/Makefile.am
@@ -0,0 +1,19 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS = writer_maya reader_maya
+
+writer_maya_SOURCES = writer.c ../common/utils.c
+writer_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_maya_SOURCES = reader.c ../common/utils.c
+reader_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+
+EXTRA_DIST = cfg.h readme.txt
+
diff --git a/examples/C/schema/Makefile.in b/tests/C/flexpath_tests/maya_append/Makefile.in
similarity index 84%
copy from examples/C/schema/Makefile.in
copy to tests/C/flexpath_tests/maya_append/Makefile.in
index 62a72f5..d7f7c98 100644
--- a/examples/C/schema/Makefile.in
+++ b/tests/C/flexpath_tests/maya_append/Makefile.in
@@ -34,12 +34,15 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = uniform$(EXEEXT) rectilinear$(EXEEXT) \
-	structured$(EXEEXT) unstructured$(EXEEXT)
-subdir = examples/C/schema
+noinst_PROGRAMS = writer_maya$(EXEEXT) reader_maya$(EXEEXT)
+subdir = tests/C/flexpath_tests/maya_append
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,35 +74,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_rectilinear_OBJECTS = rectilinear.$(OBJEXT)
-rectilinear_OBJECTS = $(am_rectilinear_OBJECTS)
+am_reader_maya_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
+reader_maya_OBJECTS = $(am_reader_maya_OBJECTS)
 am__DEPENDENCIES_1 =
-rectilinear_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+reader_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-rectilinear_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(rectilinear_LDFLAGS) $(LDFLAGS) -o $@
-am_structured_OBJECTS = structured.$(OBJEXT)
-structured_OBJECTS = $(am_structured_OBJECTS)
-structured_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_maya_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_maya_OBJECTS = writer.$(OBJEXT) utils.$(OBJEXT)
+writer_maya_OBJECTS = $(am_writer_maya_OBJECTS)
+writer_maya_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-structured_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_maya_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(structured_LDFLAGS) $(LDFLAGS) -o $@
-am_uniform_OBJECTS = uniform.$(OBJEXT)
-uniform_OBJECTS = $(am_uniform_OBJECTS)
-uniform_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-uniform_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(uniform_LDFLAGS) \
-	$(LDFLAGS) -o $@
-am_unstructured_OBJECTS = unstructured.$(OBJEXT)
-unstructured_OBJECTS = $(am_unstructured_OBJECTS)
-unstructured_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-unstructured_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(unstructured_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_maya_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -108,10 +101,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(rectilinear_SOURCES) $(structured_SOURCES) \
-	$(uniform_SOURCES) $(unstructured_SOURCES)
-DIST_SOURCES = $(rectilinear_SOURCES) $(structured_SOURCES) \
-	$(uniform_SOURCES) $(unstructured_SOURCES)
+SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
+DIST_SOURCES = $(reader_maya_SOURCES) $(writer_maya_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -137,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -205,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -277,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -332,23 +344,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
-uniform_SOURCES = uniform.c
-uniform_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-uniform_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-rectilinear_SOURCES = rectilinear.c
-rectilinear_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-rectilinear_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-structured_SOURCES = structured.c
-structured_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-structured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-unstructured_SOURCES = unstructured.c
-unstructured_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-unstructured_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+writer_maya_SOURCES = writer.c ../common/utils.c
+writer_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_maya_SOURCES = reader.c ../common/utils.c
+reader_maya_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_maya_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = uniform.xml structured.xml rectilinear.xml unstructured.xml 
+EXTRA_DIST = cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
@@ -362,9 +368,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/schema/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/schema/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_append/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -392,18 +398,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-rectilinear$(EXEEXT): $(rectilinear_OBJECTS) $(rectilinear_DEPENDENCIES) 
-	@rm -f rectilinear$(EXEEXT)
-	$(rectilinear_LINK) $(rectilinear_OBJECTS) $(rectilinear_LDADD) $(LIBS)
-structured$(EXEEXT): $(structured_OBJECTS) $(structured_DEPENDENCIES) 
-	@rm -f structured$(EXEEXT)
-	$(structured_LINK) $(structured_OBJECTS) $(structured_LDADD) $(LIBS)
-uniform$(EXEEXT): $(uniform_OBJECTS) $(uniform_DEPENDENCIES) 
-	@rm -f uniform$(EXEEXT)
-	$(uniform_LINK) $(uniform_OBJECTS) $(uniform_LDADD) $(LIBS)
-unstructured$(EXEEXT): $(unstructured_OBJECTS) $(unstructured_DEPENDENCIES) 
-	@rm -f unstructured$(EXEEXT)
-	$(unstructured_LINK) $(unstructured_OBJECTS) $(unstructured_LDADD) $(LIBS)
+reader_maya$(EXEEXT): $(reader_maya_OBJECTS) $(reader_maya_DEPENDENCIES) 
+	@rm -f reader_maya$(EXEEXT)
+	$(reader_maya_LINK) $(reader_maya_OBJECTS) $(reader_maya_LDADD) $(LIBS)
+writer_maya$(EXEEXT): $(writer_maya_OBJECTS) $(writer_maya_DEPENDENCIES) 
+	@rm -f writer_maya$(EXEEXT)
+	$(writer_maya_LINK) $(writer_maya_OBJECTS) $(writer_maya_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -420,6 +420,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+utils.o: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../common/utils.c' || echo '$(srcdir)/'`../common/utils.c
+
+utils.obj: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../common/utils.c'; then $(CYGPATH_W) '../common/utils.c'; else $(CYGPATH_W) '$(srcdir)/../common/utils.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/tests/C/flexpath_tests/maya_append/cfg.h b/tests/C/flexpath_tests/maya_append/cfg.h
new file mode 100644
index 0000000..52ce6d2
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/cfg.h
@@ -0,0 +1,26 @@
+/**
+ * cfg.h
+ *
+ *  Created on: Aug 23, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CFG_H_
+#define CFG_H_
+
+//! params for the method
+#define TRANSPORT_PARAMS ""
+
+//! adios buffer size in MB
+#define ADS_BUFFER_SIZE 50
+
+//! the name of adios group in the file
+#define GRP_NAME "carpet_var"
+
+//! how many loop iterations is in the writer
+#define TIMESTEP_COUNT 10
+
+//! the maya grid function prefix
+#define MAYA_GF_VAR_PFX "maya_gf_var"
+
+#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/maya_append/reader.c b/tests/C/flexpath_tests/maya_append/reader.c
new file mode 100644
index 0000000..2edd7be
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/reader.c
@@ -0,0 +1,137 @@
+/**
+ * reader.c
+ *
+ *  Created on: Aug 21, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#include "misc.h"
+#include "test_common.h"
+#include "cfg.h"
+
+
+/**
+ * wrapper for scheduling adios reads; this macro assumes existence of
+ * quite a few important variables; please take a look and be careful
+ * how to use it
+ *
+ * @param path_str The path to the variable
+ * @param out_buf  The output buffer
+ */
+#define READ_FULLPATH(attribute, grid_func_name, out_buf) \
+	sprintf(fullpath, "%s%s", attribute, grid_func_name);  \
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, sel, fullpath,0,10, out_buf), error_counts.adios);
+
+
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 100
+
+int main (int argc, char **argv){
+	int rank =0, size =0;
+	MPI_Comm comm = MPI_COMM_WORLD;
+	struct err_counts err = {0, 0};
+	struct test_info test_result = {TEST_PASSED, "maya_append"};
+	struct adios_tsprt_opts adios_opts;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs readers. As many as you want to.");
+
+	// adios read initialization
+	MPI_Init( &argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+
+	// depending on the method
+	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
+	RET_IF_ERROR(err.adios, rank);
+
+
+	// I will be working with streams so the lock mode is necessary,
+	// return immediately if the stream unavailable
+	ADIOS_FILE *adios_handle = adios_read_open_file(FILE_NAME, adios_opts.method, comm);
+	if ( !adios_handle){
+		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
+		return DIAG_ERR;
+	}
+
+	int i = 0;
+	// I will only support reading TIMESTEP_COUNT integers for the level value
+	int level[TIMESTEP_COUNT];
+	int level_scalar[TIMESTEP_COUNT];
+	int cctk_bbox[TIMESTEP_COUNT * 6];
+	double *data = malloc(8 * 11* 12*13 * TIMESTEP_COUNT);
+
+	memset(level, 0, sizeof(int) * TIMESTEP_COUNT);
+	memset(cctk_bbox, 0, sizeof(int) * TIMESTEP_COUNT*6);
+	memset(data, 0, sizeof(double) * 11* 12*13 * TIMESTEP_COUNT);
+
+	char fullpath[STR_BUFFER_SIZE];
+
+	// selection should be NULL or as a single variable
+	// just say that you want to take different steps
+	adios_schedule_read(adios_handle, NULL, "/level/maya_gf_var",0,10, level);
+	adios_schedule_read(adios_handle, NULL, "/scalar/maya_gf_var", 0, 10, level_scalar);
+	adios_schedule_read(adios_handle, NULL, "/cctk_bbox/maya_gf_var", 0, 10, cctk_bbox);
+
+	// now I will try to read with a single variable but with multiple steps
+	ADIOS_SELECTION *sel = NULL;
+	uint64_t start_3D[] = {0, 0, 0};
+	uint64_t count_3D[] = {11, 12, 13};
+	sel = adios_selection_boundingbox(3, start_3D, count_3D );
+	adios_schedule_read(adios_handle, sel, "/data/maya_gf_var", 0, 10, data);
+	adios_selection_delete(sel);
+	sel = NULL;
+
+	SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), err.adios);
+
+	int j = 0;
+	if (err.adios){
+		test_result.result = TEST_FAILED;
+	} else {
+		// reference data
+		int level_ref[TIMESTEP_COUNT];
+		gen_1D_array_int(level_ref, TIMESTEP_COUNT, rank);
+
+		int cctk_bbox_ref[6];
+		gen_1D_array_int(cctk_bbox_ref, 6, rank);
+
+		double * data_ref =  (double *)malloc(11*12*13*sizeof(double));
+		gen_1D_array2(data_ref, 11*12*13, rank);
+
+		// compare with reference values
+		for( i = 0; i < TIMESTEP_COUNT; ++i){
+			TEST_INT_EQUAL(level_ref[i], level[i], err.test, test_result.result);
+			BREAK_IF_ERROR(err.test);
+			TEST_INT_EQUAL(level_ref[i], level_scalar[i], err.test, test_result.result);
+			BREAK_IF_ERROR(err.test);
+
+			for( j = 0; j < 6; ++j){
+				TEST_INT_EQUAL(cctk_bbox_ref[j], cctk_bbox[i*6 + j], err.test, test_result.result);
+				BREAK_IF_ERROR(err.test);
+			}
+			BREAK_IF_ERROR(err.test);
+
+			for( j = 0; j < 11 * 12 * 13; ++j){
+				TEST_DOUBLE_EQUAL(data_ref[j], data[i * 11 * 12 * 13 +j], err.test, test_result.result);
+				BREAK_IF_ERROR(err.test);
+			}
+			BREAK_IF_ERROR(err.test);
+		}
+
+		free(data_ref);
+		data_ref = NULL;
+	}
+
+	if (TEST_PASSED == test_result.result){
+		p_test_passed("%s: rank %d\n", test_result.name, rank);
+	}
+
+	free(data);
+	data = NULL;
+	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+
+	return DIAG_OK;
+}
diff --git a/tests/C/flexpath_tests/maya_append/readme.txt b/tests/C/flexpath_tests/maya_append/readme.txt
new file mode 100644
index 0000000..b385a9f
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/readme.txt
@@ -0,0 +1,64 @@
+# readme.txt
+# Created on: Aug 21, 2013
+# Author: Magda S. aka Magic Magg magg dot gatech at gmail.com
+#
+DESCRIPTION
+===========
+The idea is to test how to write in an appended mode and read from
+that mode. This test is based on the Maya project.
+
+It is designed for two methods (use -t flx or -t mpi)
+
+1. MPI/ADIOS_READ_METHOD_BP
+2. FLEXPATH/ADIOS_READ_METHOD_FLEXPATH
+
+
+RUN
+===== 
+# to clean files hanging around after previous runs
+$ make -f Makefile.generic clean_test
+
+# you can run as many writers as you want and as many readers as you want
+# they write and read independently; the default is to run one writer
+# and one reader
+$ ./writer -f mpi
+$ ./reader -f mpi
+
+See Makefile for other options of running the test.
+
+PLAYING WITH TEST CONFIGURATION
+===============================
+To play with the test configuration, you can modify macros in the cfg.h file
+
+TIMESTEP_COUNT seems to be the only reasonable setting to play so far
+
+NOTES
+======
+2013-08-28 Test passes with the MPI method on my laptop; it fails with the FLEXPATH method
+enabled (branch v1.5.1)
+
+$ ./reader
+ERROR: FLEXPATH staging method does not support file mode for reading. Use adios_read_open() to open a staged dataset.
+
+
+
+TROUBLESHOOTING
+================
+
+2013-08-06, ERROR adios_allocate_buffer(): insufficient memory
+
+ERROR: adios_allocate_buffer (): insufficient memory: 5242880000 requested, 860221440 available.  Using available.
+
+$ grep ADS_BUFFER_SIZE cfg.h
+#define ADS_BUFFER_SIZE 50
+
+Try changing the ADS_BUFFER_SIZE in cfg.h to a smaller value.
+
+2013-0x-0y, txt files left
+
+There might be text files left; they should be removed for the next run.
+
+# EOF
+
+# EOF
+
diff --git a/tests/C/flexpath_tests/maya_append/writer.c b/tests/C/flexpath_tests/maya_append/writer.c
new file mode 100644
index 0000000..4608ff5
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_append/writer.c
@@ -0,0 +1,133 @@
+/**
+ * writer.c
+ *
+ *  Created on: Aug 21, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"  // for adios_errno
+
+#include "misc.h"
+#include "test_common.h"
+#include "utils.h"
+#include "cfg.h"
+
+#include <string.h>
+
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 100
+
+/**
+ * wrapper for writes; this macro assumes existence fullpath
+ * quite a few important variables; please take a look and be careful
+ * how to use it
+ *
+ * I simulate Maya var name which consists of the attribute and the
+ * grid function
+ *
+ * @param attribute The attribute (part of adios variable name or path)
+ * @param grid_func_name The name of the grid function
+ * @param var The var to be written out
+ *
+ */
+#define WRITE_VAR(attribute, grid_func_name, var) \
+	do { \
+		sprintf(fullpath, "%s%s", attribute, grid_func_name); \
+    	adios_write(adios_handle, fullpath, var); \
+	} while (0)
+
+
+int main(int argc, char ** argv){
+	int rank = 0, size = 0;
+	MPI_Comm comm = MPI_COMM_WORLD; // required for ADIOS
+	int64_t adios_handle;   		// the ADIOS file handler
+	int retval;
+
+	struct adios_tsprt_opts adios_opts;
+	int err_count = 0;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs writers. As many as you want to.");
+
+	// ADIOS initialization
+	MPI_Init(&argc, &argv);
+	MPI_Comm_rank(comm, &rank);
+	MPI_Comm_size(comm, &size);
+
+	// From sources it just returns 1 (2013-07-16, whatever)
+	adios_init_noxml(comm);
+
+	// returns 0 (buffer allocated) or 1 (seems everything fine)
+	// I guess size of the buffer in MB
+	adios_allocate_buffer(ADIOS_BUFFER_ALLOC_NOW, ADS_BUFFER_SIZE);
+
+	// this will hold the group id for all variables defined within this group
+	int64_t	adios_grp = 0;
+
+	// now declare a group and variables you will have in the group
+	adios_declare_group(&adios_grp, GRP_NAME, "", adios_flag_no);
+
+	uint64_t adios_groupsize = 0;
+
+    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/level", adios_integer, "1", "1", "0");
+    adios_groupsize += 4;
+
+    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/scalar", adios_integer, "", "", "");
+    adios_groupsize += sizeof(uint64_t);
+
+    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/cctk_bbox", adios_integer, "6", "6", "0" );
+    adios_groupsize += (4 * 2 * 3);
+
+    adios_define_var (adios_grp, MAYA_GF_VAR_PFX, "/data", adios_double, "11,12,13", "11,12,13", "0,0,0");
+    adios_groupsize += (8 * 11 * 12 *13);
+
+
+	SET_ERROR_IF_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
+	RET_IF_ERROR(err_count, rank);
+
+
+    int i = 0;
+
+    // these are values that will be written
+    int level[TIMESTEP_COUNT];
+    gen_1D_array_int(level, TIMESTEP_COUNT, rank);
+
+    int cctk_bbox[6];
+    gen_1D_array_int(cctk_bbox, 6, rank);
+
+    double * data =  (double *)malloc(11*12*13*sizeof(double));
+    gen_1D_array2(data, 11*12*13, rank);
+
+
+    // required by WRITE_VAR macro (see the macro)
+    char fullpath[STR_BUFFER_SIZE];
+
+    // actually adios_write() doesn't write anything; the actual write
+    // is performed on or after adios_close() so having
+    // adios_open and adios_close out of the for loop will not produce
+    // the desired effect i.e., appending to values
+    for(i = 0; i < TIMESTEP_COUNT; ++i){
+    	// open our group and transport method associated with it
+    	adios_open (&adios_handle, GRP_NAME, FILE_NAME, "a", comm);
+
+    	uint64_t adios_totalsize = 0;
+    	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+    	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+    				rank, adios_groupsize, adios_totalsize, retval);
+    	WRITE_VAR("/level/", MAYA_GF_VAR_PFX, &level[i]);
+    	WRITE_VAR("/scalar/", MAYA_GF_VAR_PFX, &level[i]);
+    	WRITE_VAR("/cctk_bbox/", MAYA_GF_VAR_PFX, cctk_bbox);
+    	WRITE_VAR("/data/", MAYA_GF_VAR_PFX, data);
+
+    	fprintf(stderr, "Rank=%d committed write\n", rank);
+    	adios_close(adios_handle);
+    }
+
+    free(data);
+    data = NULL;
+    adios_finalize(rank);
+    MPI_Finalize();
+
+	return 0;
+}
diff --git a/tests/C/flexpath_tests/maya_noxml/CMakeLists.txt b/tests/C/flexpath_tests/maya_noxml/CMakeLists.txt
new file mode 100644
index 0000000..7c9a995
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
+link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(writer_maya_noxml writer.c ../common/utils.c)
+target_link_libraries(writer_maya_noxml adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
+add_executable(reader_maya_noxml reader.c ../common/utils.c)
+target_link_libraries(reader_maya_noxml adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/maya_append)
diff --git a/tests/C/flexpath_tests/maya_noxml/Makefile.am b/tests/C/flexpath_tests/maya_noxml/Makefile.am
new file mode 100644
index 0000000..173b867
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.am
@@ -0,0 +1,19 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+noinst_PROGRAMS = writer_maya_noxml reader_maya_noxml
+
+writer_maya_noxml_SOURCES = writer.c ../common/utils.c
+writer_maya_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_maya_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_maya_noxml_SOURCES = reader.c ../common/utils.c
+reader_maya_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_maya_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+
+EXTRA_DIST = cfg.h readme.txt
+
diff --git a/examples/C/scalars/Makefile.in b/tests/C/flexpath_tests/maya_noxml/Makefile.in
similarity index 82%
copy from examples/C/scalars/Makefile.in
copy to tests/C/flexpath_tests/maya_noxml/Makefile.in
index b08ba8c..34b622b 100644
--- a/examples/C/scalars/Makefile.in
+++ b/tests/C/flexpath_tests/maya_noxml/Makefile.in
@@ -34,12 +34,16 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = scalars_write$(EXEEXT) scalars_read$(EXEEXT) \
-	scalars_write_step$(EXEEXT)
-subdir = examples/C/scalars
+noinst_PROGRAMS = writer_maya_noxml$(EXEEXT) \
+	reader_maya_noxml$(EXEEXT)
+subdir = tests/C/flexpath_tests/maya_noxml
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,28 +75,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_scalars_read_OBJECTS = scalars_read.$(OBJEXT)
-scalars_read_OBJECTS = $(am_scalars_read_OBJECTS)
+am_reader_maya_noxml_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
+reader_maya_noxml_OBJECTS = $(am_reader_maya_noxml_OBJECTS)
 am__DEPENDENCIES_1 =
-scalars_read_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+reader_maya_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_maya_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_read_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_OBJECTS = $(am_scalars_write_OBJECTS)
-scalars_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_maya_noxml_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_maya_noxml_OBJECTS = writer.$(OBJEXT) utils.$(OBJEXT)
+writer_maya_noxml_OBJECTS = $(am_writer_maya_noxml_OBJECTS)
+writer_maya_noxml_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_maya_noxml_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_step_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_step_OBJECTS = $(am_scalars_write_step_OBJECTS)
-scalars_write_step_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-scalars_write_step_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_step_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_maya_noxml_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -101,10 +102,9 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
-DIST_SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
+SOURCES = $(reader_maya_noxml_SOURCES) $(writer_maya_noxml_SOURCES)
+DIST_SOURCES = $(reader_maya_noxml_SOURCES) \
+	$(writer_maya_noxml_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -130,12 +130,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -198,6 +207,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -270,7 +282,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -325,22 +346,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
-scalars_write_SOURCES = scalars_write.c
-scalars_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-scalars_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-scalars_read_SOURCES = scalars_read.c
-scalars_read_LDADD = $(top_builddir)/src/libadiosread.a \
-	$(ADIOSREADLIB_LDADD)
-scalars_read_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
-scalars_write_step_SOURCES = scalars_write.c
-scalars_write_step_LDADD = $(top_builddir)/src/libadios.a \
-	$(ADIOSLIB_LDADD)
-scalars_write_step_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+writer_maya_noxml_SOURCES = writer.c ../common/utils.c
+writer_maya_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_maya_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_maya_noxml_SOURCES = reader.c ../common/utils.c
+reader_maya_noxml_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_maya_noxml_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = scalars.xml gwrite_scalars.ch gread_scalars.ch job.pbs
+EXTRA_DIST = cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
@@ -354,9 +370,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/scalars/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_noxml/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/scalars/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/maya_noxml/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -384,15 +400,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-scalars_read$(EXEEXT): $(scalars_read_OBJECTS) $(scalars_read_DEPENDENCIES) 
-	@rm -f scalars_read$(EXEEXT)
-	$(scalars_read_LINK) $(scalars_read_OBJECTS) $(scalars_read_LDADD) $(LIBS)
-scalars_write$(EXEEXT): $(scalars_write_OBJECTS) $(scalars_write_DEPENDENCIES) 
-	@rm -f scalars_write$(EXEEXT)
-	$(scalars_write_LINK) $(scalars_write_OBJECTS) $(scalars_write_LDADD) $(LIBS)
-scalars_write_step$(EXEEXT): $(scalars_write_step_OBJECTS) $(scalars_write_step_DEPENDENCIES) 
-	@rm -f scalars_write_step$(EXEEXT)
-	$(scalars_write_step_LINK) $(scalars_write_step_OBJECTS) $(scalars_write_step_LDADD) $(LIBS)
+reader_maya_noxml$(EXEEXT): $(reader_maya_noxml_OBJECTS) $(reader_maya_noxml_DEPENDENCIES) 
+	@rm -f reader_maya_noxml$(EXEEXT)
+	$(reader_maya_noxml_LINK) $(reader_maya_noxml_OBJECTS) $(reader_maya_noxml_LDADD) $(LIBS)
+writer_maya_noxml$(EXEEXT): $(writer_maya_noxml_OBJECTS) $(writer_maya_noxml_DEPENDENCIES) 
+	@rm -f writer_maya_noxml$(EXEEXT)
+	$(writer_maya_noxml_LINK) $(writer_maya_noxml_OBJECTS) $(writer_maya_noxml_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -409,6 +422,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+utils.o: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../common/utils.c' || echo '$(srcdir)/'`../common/utils.c
+
+utils.obj: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../common/utils.c'; then $(CYGPATH_W) '../common/utils.c'; else $(CYGPATH_W) '$(srcdir)/../common/utils.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/tests/C/flexpath_tests/maya_noxml/cfg.h b/tests/C/flexpath_tests/maya_noxml/cfg.h
new file mode 100644
index 0000000..dcf0fe1
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/cfg.h
@@ -0,0 +1,47 @@
+/**
+ * config.h
+ *
+ *  Created on: Jul 17, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CONFIG_H_
+#define CONFIG_H_
+
+//! the maya grid function prefix
+#define MAYA_GF_VAR_PFX "maya_gf_var"
+
+//! the number of grid functions; change this parameter
+//! to see if test passes
+//#define MAYA_GRID_FUNC_COUNT 5113
+#define MAYA_GRID_FUNC_COUNT 3
+
+//! the size of the buffer for the name of maya var
+#define MAYA_VAR_BUF_SIZE 30
+
+//! params for the method
+#define TRANSPORT_PARAMS ""
+
+//! adios buffer size in MB
+#define ADS_BUFFER_SIZE 50
+
+//! the number of patches I want to write (this is what I got from Maya)
+#define GLOBAL_PATCH_COUNT 27
+
+//! GLOBAL_DIMENSIONS should be in accordance with MAYA_SHAPE_MAX_XXX
+//! this is responsible for shape or slice of the data
+#define GLOBAL_DIMENSIONS "P,48,89,116"
+#define MAYA_SHAPE_MAX_X 48
+#define MAYA_SHAPE_MAX_Y 89
+#define MAYA_SHAPE_MAX_Z 116
+
+//! for defining a box; should be <= for corresponding MAYA_SHAPE_MAX_Xxx
+//! actual "shape" or slice of the data (this is because we had to
+//! something like this in Maya); but don't quote me on that
+#define MAYA_SHAPE_X 38
+#define MAYA_SHAPE_Y 69
+#define MAYA_SHAPE_Z 38
+
+
+#endif //CONFIG_H_
+
diff --git a/tests/C/flexpath_tests/maya_noxml/reader.c b/tests/C/flexpath_tests/maya_noxml/reader.c
new file mode 100644
index 0000000..3110e1d
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/reader.c
@@ -0,0 +1,374 @@
+/**
+ * reader.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ * Created on: Jul 19, 2013
+ * Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is a test for the FlexPath method based on examples/C/flexpath_arrays
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#include "misc.h"
+#include "utils.h"
+#include "test_common.h"
+#include "cfg.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * This is what the reader expects to read.
+ *
+ $ bpls test.bp
+  unsigned integer    /P                              scalar
+  unsigned integer    /patch_id                       scalar
+  unsigned integer    /shape_dim_x                    scalar
+  unsigned integer    /shape_dim_y                    scalar
+  unsigned integer    /shape_dim_z                    scalar
+  double              /data/maya_gf_var0              {27, 48, 89, 116}
+  integer             /level/maya_gf_var0             {27}
+  integer             /carpet_mglevel/maya_gf_var0    {27}
+  integer             /timestep/maya_gf_var0          {27}
+  integer             /group_timelevel/maya_gf_var0   {27}
+  double              /time/maya_gf_var0              {27}
+  integer             /cctk_bbox/maya_gf_var0         {27, 6}
+  integer             /cctk_nghostzones/maya_gf_var0  {27, 3}
+  double              /origin/maya_gf_var0            {27, 3}
+  double              /delta/maya_gf_var0             {27, 3}
+  integer             /iorigin/maya_gf_var0           {27, 3}
+  unsigned long long  /shape/maya_gf_var0             {27, 3}
+*/
+
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 100
+
+/**
+ * wrapper for scheduling adios reads; this macro assumes existence
+ * quite a few important variables; please take a look and be careful
+ * how to use it
+ *
+ * @param path_str The path to the variable
+ * @param out_buf  The output buffer
+ */
+#define READ_FULLPATH(path_str, out_buf) \
+	sprintf(fullpath, "%s%s", path_str, fullname);  \
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, sel, fullpath,0,1, out_buf), error_counts.adios); \
+	BREAK_IF_ERROR(error_counts.adios);
+
+
+
+int main (int argc, char **argv){
+	int rank =0, size =0;
+	MPI_Comm comm = MPI_COMM_WORLD;
+	diag_t diag = DIAG_OK;  // to store the diagnostic information
+	struct test_info test_result = { TEST_PASSED, "maya_noxml" };
+	struct err_counts error_counts = {0, 0};
+	struct adios_tsprt_opts adios_opts;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs readers.");
+
+	// adios read initialization
+	MPI_Init( &argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+
+	// depending on the method
+	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), error_counts.adios);
+	RET_IF_ERROR(error_counts.adios, rank);
+
+	// I will be working with streams so the lock mode is necessary,
+	// return immediately if the stream unavailable
+	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME, adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
+	if ( !adios_handle){
+		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
+		return DIAG_ERR;
+	}
+
+	// now I will try to read what I got from the checkpoint
+	// define portions of data how they will be read
+	ADIOS_SELECTION *sel = NULL;
+	ADIOS_VARINFO *avi = NULL;
+
+	avi = adios_inq_var(adios_handle, "P");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		return DIAG_ERR;
+	}
+
+	if( GLOBAL_PATCH_COUNT != *(int*)avi->value){
+		p_test_failed("%s: rank %d: global_patch_count (got %d)\n", test_result.name, rank,  *(int*)avi->value );
+		test_result.result = TEST_FAILED;
+		// clean everything
+		adios_free_varinfo(avi);
+		avi = NULL;
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+		return DIAG_ERR;
+	}
+
+	// for holding the name of the maya variable
+	char fullname[MAYA_VAR_BUF_SIZE];
+	int i = 0;
+	// for storing shape_dim_x, shape_dim_y, shape_dim_z
+	uint32_t shape_max_dims[3];
+
+	// space for the data (size will depend on the shape_dim_x, etc)
+	double *data = NULL;
+	uint32_t patch_id = 0;
+	int32_t level = 0;
+	int32_t carpet_mglevel = 0;
+	int32_t timestep = 0;
+	int32_t grp_tl = 0;
+	double time_attr = 0.0;
+	int32_t cctk_bbox[6];
+	int32_t cctk_nghostzones[3];
+	double origin[3];
+	double delta[3];
+	int32_t iorigin[3];
+	uint64_t shape[3];
+
+	// I think these are global variables, so shouldn't be a problem
+
+	// first schedule reading of the entire variables (so NULL selection)
+	// reading the patch_id doesn't make much sense as it seems that only the
+	// very first value is written out so we will get 0
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "patch_id",0,1, &patch_id), error_counts.adios);
+	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_x",0,1, &shape_max_dims[0]), error_counts.adios);
+	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_y",0,1, &shape_max_dims[1]), error_counts.adios);
+	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+	SET_ERROR_IF_NOT_ZERO(adios_schedule_read(adios_handle, NULL, "shape_dim_z",0,1, &shape_max_dims[2]), error_counts.adios);
+	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+	// not sure if this assumption is correct; difficult to find in the ADIOS sources
+	SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), error_counts.adios);
+	RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+	// now test if what I read is what I supposed to get; see comment with
+	// adios_schedule_read(patch_id)
+	TEST_INT_EQUAL(0, patch_id, error_counts.test, test_result.result);
+	RET_AND_CLOSE_ADIOS_READER_IF_TEST_FAILED(test_result, rank, adios_handle, adios_opts.method);
+
+	TEST_INT_EQUAL(MAYA_SHAPE_MAX_X, shape_max_dims[0], error_counts.test, test_result.result);
+	RET_AND_CLOSE_ADIOS_READER_IF_TEST_FAILED(test_result, rank, adios_handle, adios_opts.method);
+
+	TEST_INT_EQUAL(MAYA_SHAPE_MAX_Y, shape_max_dims[1], error_counts.test, test_result.result);
+	RET_AND_CLOSE_ADIOS_READER_IF_TEST_FAILED(test_result, rank, adios_handle, adios_opts.method);
+
+	TEST_INT_EQUAL(MAYA_SHAPE_MAX_Z, shape_max_dims[2], error_counts.test, test_result.result);
+	RET_AND_CLOSE_ADIOS_READER_IF_TEST_FAILED(test_result, rank, adios_handle, adios_opts.method);
+
+	// so here I assume that our data buffer is fixed, and I allocate
+	// space for that buffer, and consult the reader but the
+	// size of the output data depends on the shape_max_dims that I have
+	// already tested that I read as expected
+	int data_size = 0;
+
+	if (get_data_size(shape_max_dims, 3, &data_size) != DIAG_OK){
+		RET_IF_ERROR(1, rank);
+	}
+	// just in case
+	assert(shape_max_dims[0] * shape_max_dims[1] *shape_max_dims[2] * 8 == data_size);
+	data = (double *) malloc(data_size);
+	if( !data ){
+		RET_IF_ERROR(1, rank);
+	}
+
+	// the data are the same for all variables so fill the reference data
+	double * ref_data = (double *) malloc(data_size);
+	if( !(ref_data) || (set_value(ref_data, shape_max_dims[0] * shape_max_dims[1] *shape_max_dims[2], (double) rank) != DIAG_OK) ){
+		free(data);
+		RET_IF_ERROR(1, rank);
+	}
+
+
+	// for storing the name of the variable
+	char fullpath[STR_BUFFER_SIZE];
+	char * levelpath = "/level/";
+	char * datapath = "/data/";
+	char * mglevelpath = "/carpet_mglevel/";
+	char * timesteppath ="/timestep/";
+	char * group_timelevelpath = "/group_timelevel/";
+	char * timepath = "/time/";
+	char * cbbpath = "/cctk_bbox/";
+	char * cngzpath = "/cctk_nghostzones/";
+	char * originpath = "/origin/";
+	char * deltapath = "/delta/";
+	char * ioriginpath = "/iorigin/";
+	char * shapepath = "/shape/";
+
+	// read all variables with attributes
+	for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i){
+		int k = 0;
+
+		// clean the buffers to hold output data
+		level = 0;
+		carpet_mglevel = 0;
+		timestep = 0;
+		grp_tl = 0;
+		time_attr = 0.0;
+		for(k = 0 ; k < 3; ++k){
+			cctk_bbox[k] = 0;
+			cctk_nghostzones[k] = 0;
+			origin[k] = 0;
+			delta[k] = 0;
+			iorigin[k] = 0;
+			shape[k] = 0;
+		}
+		for(k =3; k < 6; ++k){
+			cctk_bbox[k] = 0;
+		}
+
+		memset(data, 0, data_size);
+		// generate the name of maya variable
+		gen_maya_var_name(fullname, MAYA_VAR_BUF_SIZE, MAYA_GF_VAR_PFX, i);
+
+		// now I need to play carefully with the selections, as ADIOS
+		// does not provide any help if you messed up with selections
+
+		uint64_t count_1D = 1;
+		// this is assumed that the data are in this patch - we have to know
+		// how it was written out i-th grid function was outputted in i
+		uint64_t start_1D = i;
+
+		sel = adios_selection_boundingbox(1, &start_1D, &count_1D );
+
+		READ_FULLPATH(levelpath, &level);
+		READ_FULLPATH(mglevelpath, &carpet_mglevel);
+		READ_FULLPATH(timesteppath, &timestep);
+		READ_FULLPATH(group_timelevelpath, &grp_tl);
+		READ_FULLPATH(timepath, &time_attr);
+
+		adios_selection_delete(sel);
+		sel = NULL;
+
+		// now more complex variables
+		uint64_t count_2D[] = {1, 6};
+		// this is assumed that the data are in this patch - we have to know
+		// how it was written out i-th grid function was outputted in i-th patch
+		// e.g., bpls -d test.bp -s"1,0" -c/cctk_bbox/maya_gf_var1 -n 12
+		uint64_t start_2D[] = {i, 0};
+
+		sel = adios_selection_boundingbox(2, start_2D, count_2D );
+
+		READ_FULLPATH(cbbpath, cctk_bbox);
+
+		adios_selection_delete(sel);
+		sel = NULL;
+
+		// now there is a deal with a 3 element vectors
+		count_2D[1] = 3;   // this is a 3 elem vector
+
+		sel = adios_selection_boundingbox(2, start_2D, count_2D );
+		READ_FULLPATH(cngzpath, cctk_nghostzones);
+		READ_FULLPATH(originpath, origin);
+		READ_FULLPATH(deltapath, delta);
+		READ_FULLPATH(ioriginpath, iorigin);
+		READ_FULLPATH(shapepath, shape);
+
+		adios_selection_delete(sel);
+		sel = NULL;
+
+		SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), error_counts.adios);
+		RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+		// now tests if I get what I expected to get
+		TEST_INT_EQUAL(i, level, error_counts.test, test_result.result);
+		BREAK_IF_ERROR(error_counts.test);
+
+		TEST_INT_EQUAL(i%2, carpet_mglevel, error_counts.test, test_result.result);
+		BREAK_IF_ERROR(error_counts.test);
+
+		TEST_INT_EQUAL(26, timestep, error_counts.test, test_result.result);
+		BREAK_IF_ERROR(error_counts.test);
+
+		TEST_INT_EQUAL(i%3, grp_tl, error_counts.test, test_result.result);
+		BREAK_IF_ERROR(error_counts.test);
+
+		TEST_DOUBLE_EQUAL(13.0, time_attr, error_counts.test, test_result.result);
+		BREAK_IF_ERROR(error_counts.test);
+
+		for(k = 0; k < 6 ; ++k ){
+			TEST_INT_EQUAL(13, cctk_bbox[k], error_counts.test, test_result.result);
+			BREAK_IF_ERROR(error_counts.test);
+		}
+		BREAK_IF_ERROR(error_counts.test);
+
+		uint64_t shape_ref[] = {MAYA_SHAPE_X, MAYA_SHAPE_Y, MAYA_SHAPE_Z};
+
+		for(k = 0; k < 3; ++k){
+			TEST_INT_EQUAL(14, cctk_nghostzones[k], error_counts.test, test_result.result);
+			BREAK_IF_ERROR(error_counts.test);
+
+			TEST_DOUBLE_EQUAL(15.0, origin[k], error_counts.test, test_result.result );
+			BREAK_IF_ERROR(error_counts.test);
+
+			TEST_DOUBLE_EQUAL(15.0, delta[k], error_counts.test, test_result.result );
+			BREAK_IF_ERROR(error_counts.test);
+
+			TEST_INT_EQUAL(14, iorigin[k], error_counts.test, test_result.result);
+			BREAK_IF_ERROR(error_counts.test);
+
+			TEST_LONG_EQUAL(shape_ref[k], shape[k], error_counts.test, test_result.result);
+			BREAK_IF_ERROR(error_counts.test);
+		}
+		BREAK_IF_ERROR(error_counts.test);
+
+		// now schedule and perform  reading the data; you have to know
+		// the value of shape[] to read the correct slice of the /data space
+		//  double              /data/maya_gf_var1              {27, 48, 89, 116}
+		// the sizes are the maximum values; in Maya we assume that the
+		// actual size are for this particular variable are stored in /shape attribute
+		// so for this test case they are in shape[]; and hopefully
+		// reading tests passed so I can use shape[] to define the appropriate
+		// selection
+		// now more complex variables
+		uint64_t count_4D[4];
+		count_4D[0] = 1; // 1 element in the patch dimension
+		count_4D[1] = shape[0];
+		count_4D[2] = shape[1];
+		count_4D[3] = shape[2];
+		// this is assumed that the data are in this patch - we have to know
+		// how it was written out i-th grid function was outputted in i-th patch
+		// e.g., bpls -d test.bp -s"1,0,0,0" -c"1,shape[0],shape[1],shape[2] /data/maya_gf_var1 -n 12
+		uint64_t start_4D[] = {i, 0, 0, 0};
+
+		sel = adios_selection_boundingbox(4, start_4D, count_4D );
+		READ_FULLPATH(datapath, data);
+		adios_selection_delete(sel);
+		sel = NULL;
+
+		SET_ERROR_IF_NOT_ZERO(adios_perform_reads(adios_handle, 1), error_counts.adios);
+		RET_AND_CLOSE_ADIOS_READER_IF_ERROR(error_counts.adios, rank, adios_handle, adios_opts.method);
+
+		// now compare what I got
+		for(k = 0 ; k < shape[0] *shape[1] *shape[2]; ++k){
+			TEST_DOUBLE_EQUAL(ref_data[k], data[k], error_counts.test, test_result.result);
+			BREAK_IF_ERROR(error_counts.test);
+		}
+		BREAK_IF_ERROR(error_counts.test);
+	}
+
+	adios_free_varinfo(avi);
+	avi = NULL;
+
+	if (TEST_PASSED == test_result.result)
+		p_test_passed("%s: rank %d\n", test_result.name, rank);
+
+	CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+
+	return diag;
+}
diff --git a/tests/C/flexpath_tests/maya_noxml/readme.txt b/tests/C/flexpath_tests/maya_noxml/readme.txt
new file mode 100644
index 0000000..87c9766
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/readme.txt
@@ -0,0 +1,116 @@
+# The protocol file generated by protogen.py ver. 1.0 on 2013-06-27 12:54
+# AUTHOR: Magda S aka Magic Magg magg dot gatech at gmail dot com
+# DATE: 2013-08-05
+
+
+DESCRIPTION
+===========
+The idea of this test is to have something similar that we have in Maya.
+We create a similar, yet simplified structure we are using in Maya.
+The basic idea is to write down a lot of ADIOS variables and see if I can reread it.
+You can change the number of outputted variables with in utils.h/MAYA_GRID_FUNC_COUNT.
+I call them the grid function. The test is slightly convoluted. Sorry for that
+but Maya is challenging.
+
+Actually, this test was used to find the
+hash table bug (and later redesigned in the adios). As we tried to write 
+same variables a few times, and ADIOS at that time couldn't handle that.
+
+RUN
+===== 
+# to clean files hanging around after previous runs
+$ make -f Makefile.generic clean_test
+
+# the test is designed to run one writer and one reader
+$ ./writer -t mpi
+$ ./reader -t mpi
+
+See Makefile for other options of running the test.
+
+PLAYING WITH TEST CONFIGURATION
+===============================
+To play with the test configuration, you can modify macros in the cfg.h file
+
+- MAYA_GRID_FUNC_COUNT this will increase the number of variables output
+  (you might need to increase/decrease the ADS_BUFFER_SIZE see troubleshooting)
+
+NOTES
+======
+2013-08-05 Test passes with the MPI method on my laptop; it fails with the FLEXPATH method
+enabled (branch v1.5.1)
+
+ $ ./writer -t flx
+ERROR: set_format: Unknown Type Error 54
+[heffalin:10320] *** Process received signal ***
+[heffalin:10320] Signal: Segmentation fault (11)
+[heffalin:10320] Signal code: Address not mapped (1)
+[heffalin:10320] Failing at address: (nil)
+[heffalin:10320] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x364a0) [0x7fbbfda764a0]
+[heffalin:10320] [ 1] ./writer(adios_flexpath_open+0x1003) [0x475d46]
+[heffalin:10320] [ 2] ./writer() [0x408df1]
+[heffalin:10320] [ 3] ./writer() [0x408353]
+[heffalin:10320] [ 4] ./writer() [0x4077a5]
+[heffalin:10320] [ 5] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7fbbfda6176d]
+[heffalin:10320] [ 6] ./writer() [0x406e19]
+[heffalin:10320] *** End of error message ***
+Segmentation fault
+
+
+TROUBLESHOOTING
+================
+
+2013-08-06, ERROR adios_allocate_buffer(): insufficient memory
+
+ERROR: adios_allocate_buffer (): insufficient memory: 5242880000 requested, 860221440 available.  Using available.
+
+$ grep ADS_BUFFER_SIZE cfg.h
+#define ADS_BUFFER_SIZE 50
+
+Try changing the ADS_BUFFER_SIZE in cfg.h to a smaller value.
+
+OUTDATED (2013-07-08)
+======================
+I will update later. 
+
+RUNNING ON KRAKEN
+=================
+This runs one reader per node and one writer per node.
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+You should be able to run the example with as many readers and writers as you wish.
+
+Example PBS script
+------------------
+#!/bash/bin
+#PBS -l walltime=00:05:00,size=24
+#PBS -A UT-TENN0033
+
+date
+
+echo "nodefile="
+cat $PBS_NODEFILE
+echo "=end nodefile"
+
+# make sure you have all modules loaded
+module use ~smagg/opt/modulefiles
+module load mag-mxml-2.7/kraken-gnu
+module list
+
+cd $PBS_O_WORKDIR
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+date
+
+# eof
+
+
+TROUBLESHOOTING
+===============
+
+There might be text files left; they should be removed for the next run.
+
+# EOF
diff --git a/tests/C/flexpath_tests/maya_noxml/writer.c b/tests/C/flexpath_tests/maya_noxml/writer.c
new file mode 100644
index 0000000..ba92116
--- /dev/null
+++ b/tests/C/flexpath_tests/maya_noxml/writer.c
@@ -0,0 +1,292 @@
+/**
+ * writer.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ *  Created on: Jul 19, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"  // for adios_errno
+
+#include "misc.h"
+#include "utils.h"
+#include "cfg.h"
+#include "test_common.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+// for printing the values of the variable
+#define STR_BUFFER_SIZE 100
+
+/**
+ * wrapper for writes; this macro assumes existence
+ * quite a few important variables; please take a look and be careful
+ * how to use it
+ *
+ * @param path_str The path to the variable
+ * @param variable  The var to be written out
+ */
+#define WRITE_FULLPATH(path_str, var) \
+	sprintf(fullpath, "%s%s", path_str, fullname); \
+	adios_write(adios_handle, fullpath, var);
+
+
+int main(int argc, char ** argv){
+	int  rank=0, size=0;
+	MPI_Comm  comm = MPI_COMM_WORLD; // required for ADIOS
+	int64_t 	adios_handle;   // the ADIOS file handler
+	int retval;
+	struct adios_tsprt_opts adios_opts;
+	int err_count = 0;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs writers.");
+
+	// ADIOS initialization
+	MPI_Init(&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+	// From sources it just returns 1 (2013-07-16, whatever)
+	adios_init_noxml(comm);
+
+	// returns 0 (buffer allocated) or 1 (seems everything fine)
+	// I guess size of the buffer in MB
+	adios_allocate_buffer(ADIOS_BUFFER_ALLOC_NOW, ADS_BUFFER_SIZE);
+
+	// this will hold the group id for all variables defined within this group
+	int64_t	adios_grp = 0;
+
+	// now declare a group
+	adios_declare_group(&adios_grp, "carpet_checkpoint", "", adios_flag_no);
+
+	uint64_t adios_groupsize = 0;
+
+    adios_define_var (adios_grp, "P", "", adios_unsigned_integer, "", "", "");
+    adios_groupsize += sizeof(uint64_t);
+
+    int i = 0;
+    // the dimension; for grid functions it should be 3, for scalars should be 1
+    int dim = 0;
+    // for holding the name of the maya variable
+    char fullname[MAYA_VAR_BUF_SIZE];
+    // the shape values
+    // the max box across all patches
+    int max_shape[3] = {MAYA_SHAPE_MAX_X, MAYA_SHAPE_MAX_Y, MAYA_SHAPE_MAX_Z};
+    // the actual shape for a particular patch
+    int shape[3] = {MAYA_SHAPE_X, MAYA_SHAPE_Y, MAYA_SHAPE_Z};
+    // the size of the data I intend to write as a meat for the checkpoint
+    int data_size = 0;
+    if (get_data_size(shape, 3, &data_size) != DIAG_OK){
+    	p_error("Quitting ...\n");
+    	return DIAG_ERR;
+    }
+    // you need to provide it for the defining the ADIOS group
+    int max_data_size = 0;
+    if (get_data_size(max_shape, 3, &max_data_size) != DIAG_OK){
+    	p_error("Quitting ...\n");
+    	return DIAG_ERR;
+    }
+
+    dim = 3;
+
+    // first define variable, since I am using no XML api
+    for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i ){
+    	// this is common for grid functions and scalars
+        adios_define_var (adios_grp, "patch_id", "", adios_unsigned_integer, "", "", "");
+        adios_groupsize += sizeof (uint64_t);
+
+        adios_define_var (adios_grp, "shape_dim_x", "", adios_unsigned_integer, "", "", "");
+        adios_define_var (adios_grp, "shape_dim_y", "", adios_unsigned_integer, "", "", "");
+        adios_define_var (adios_grp, "shape_dim_z", "", adios_unsigned_integer, "", "", "");
+        adios_groupsize += 3*sizeof (uint64_t); // can be bigger
+
+        // I simulate writing grid functions
+        char * dimensions="1,shape_dim_x,shape_dim_y,shape_dim_z";
+        // global dimensions should be, I suppose greater than shap_dim_xxx
+        // i.e., shape_dim_x <= 48, shape_dim_y <= 89, shape_dim_z <= 116
+        char * global_dimensions=GLOBAL_DIMENSIONS;
+        char * offsets="patch_id,0,0,0";
+        // the name of maya variable
+        memset(fullname, 0, MAYA_VAR_BUF_SIZE);
+        sprintf(fullname, MAYA_GF_VAR_PFX "%d", i );
+
+        // I think this is for dataset size for doubles
+        adios_groupsize += max_data_size;
+        adios_define_var (adios_grp, fullname, "/data", adios_double, dimensions, global_dimensions, offsets);
+
+        adios_groupsize += (4 + 4 + 4 + 4 + 8);
+        adios_define_var (adios_grp, fullname, "/level", adios_integer, "1", "P", "patch_id") ;
+        adios_define_var (adios_grp, fullname, "/carpet_mglevel", adios_integer, "1", "P", "patch_id");
+        adios_define_var (adios_grp, fullname, "/timestep", adios_integer, "1", "P", "patch_id");
+        adios_define_var (adios_grp, fullname, "/group_timelevel", adios_integer, "1", "P", "patch_id");
+        adios_define_var (adios_grp, fullname, "/time", adios_double, "1", "P", "patch_id");
+
+        char ndim[16];
+        char global_dims[18];
+        char local_offsets[25];
+
+        adios_groupsize += (4 * 2 * dim);
+        sprintf(ndim, "1,%d", 2 * dim);
+        sprintf(global_dims, "P,%d", 2 * dim);
+        sprintf(local_offsets, "patch_id,0");
+        adios_define_var(adios_grp, fullname, "/cctk_bbox", adios_integer, ndim, global_dims, local_offsets);
+
+        adios_groupsize += (4 * dim);
+        sprintf(ndim, "1,%d", dim);
+        sprintf(global_dims, "P,%d", dim);
+        adios_define_var(adios_grp, fullname, "/cctk_nghostzones",adios_integer, ndim, global_dims, local_offsets);
+
+        adios_groupsize += (8 * dim);
+        sprintf(ndim, "1,%d", dim);
+        sprintf(global_dims, "P,%d", dim);
+        adios_define_var(adios_grp, fullname, "/origin", adios_double, ndim, global_dims, local_offsets);
+
+        adios_groupsize += (8 * dim);
+        adios_define_var(adios_grp, fullname, "/delta", adios_double, ndim, global_dims, local_offsets);
+
+        adios_groupsize += (4 * dim);
+        adios_define_var(adios_grp, fullname, "/iorigin", adios_integer, ndim, global_dims, local_offsets);
+
+        adios_groupsize += (sizeof(uint64_t) * dim);
+        adios_define_var(adios_grp, fullname, "/shape", adios_unsigned_long,ndim, global_dims, local_offsets);
+    }
+
+    SET_ERROR_IF_ZERO(adios_select_method(adios_grp, adios_opts.transport, "", ""), err_count);
+    RET_IF_ERROR(err_count, rank);
+
+	// open our group and transport method associated with it
+	adios_open (&adios_handle, "carpet_checkpoint", FILE_NAME, "w", comm);
+	uint64_t adios_totalsize = 0;
+
+	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+				rank, adios_groupsize, adios_totalsize, retval);
+
+	printf("Writing checkpoint to file %s using the %s method: group size is %lu, total size is %lu. ", FILE_NAME, adios_opts.transport, adios_groupsize, adios_totalsize);
+
+
+    // arbitrary, but this is what I am getting from Maya
+	// the number of patches I want to write
+    const int global_patch_count = GLOBAL_PATCH_COUNT;
+
+	adios_write(adios_handle, "P", (void*)&global_patch_count);
+
+	// now goes adWRiteGroupVar
+
+    char fullpath[STR_BUFFER_SIZE];
+    char * levelpath = "/level/";
+    char * datapath = "/data/";
+    char * mglevelpath = "/carpet_mglevel/";
+    char * timesteppath ="/timestep/";
+    char * group_timelevelpath = "/group_timelevel/";
+    char * timepath = "/time/";
+    char * cbbpath = "/cctk_bbox/";
+    char * cngzpath = "/cctk_nghostzones/";
+    char * originpath = "/origin/";
+    char * deltapath = "/delta/";
+    char * ioriginpath = "/iorigin/";
+    char * shapepath = "/shape/";
+
+    assert(shape[0] * shape[1] *shape[2] * 8 == data_size);
+    assert(max_shape[0] * max_shape[1] * max_shape[2] * 8 == max_data_size);
+
+    // generate data that I will send over the ocean
+    // TODO for some reason it can't be shape[] but max_shape; probably
+    // the definition of the ADIOS /data var requires the all bytes;
+    // otherwise it tries to copy some other data
+    double * my_data = (double *) malloc(max_data_size);
+    if( set_value(my_data, max_shape[0] * max_shape[1] *max_shape[2], (double) rank) != DIAG_OK ){
+    	p_error("with generating data. Quitting\n");
+    	return DIAG_ERR;
+    }
+
+    int my_patch_index = 0;
+
+
+    for(i = 0; i < MAYA_GRID_FUNC_COUNT; ++i){
+
+    	// generate the name of maya variable
+    	gen_maya_var_name(fullname, MAYA_VAR_BUF_SIZE, MAYA_GF_VAR_PFX, i);
+
+    	// the purpose of writing this variable is to enable
+    	// ADIOS to output the rest of variables in the correct place
+    	// however, if I try to read the value of patch_id e.g. with
+    	// bpls -d /patch_id, I can see only scalar with value 0
+    	// if you try to read the /level attribute without changing
+    	// patch_id (i.e., keeping it at value equal 0), the level
+    	// is always outputed in the same place so I guess the key thing
+    	// is adios_define_var("/level", adios_integer, "1", "P", "patch_id")
+    	// and that's why if you want to see level for different patch
+    	// you need to have adios_write(patch_id) here; not above the
+    	// for loop
+    	// the idea was to write each variable with a designated different patch
+    	adios_write (adios_handle, "patch_id", &my_patch_index);
+    	my_patch_index++;
+    	my_patch_index %= global_patch_count;
+
+    	// these max shape dims; this also tests if we can rewrite the
+    	// same variable over and over; as we did this for the Maya
+    	adios_write (adios_handle, "shape_dim_x", &max_shape[0]) ;
+    	adios_write (adios_handle, "shape_dim_y", &max_shape[1]) ;
+    	adios_write (adios_handle, "shape_dim_z", &max_shape[2]) ;
+
+    	// Write the data
+    	WRITE_FULLPATH(datapath, my_data);
+
+    	int refinementlevel=i;
+    	WRITE_FULLPATH(levelpath, &refinementlevel);
+
+    	int mglevel = i%2;
+    	WRITE_FULLPATH(mglevelpath, &mglevel);
+
+    	int ts = 26;
+    	WRITE_FULLPATH(timesteppath, &ts);
+
+    	int grp_tl = i%3;
+    	WRITE_FULLPATH(group_timelevelpath, &grp_tl);
+
+    	double time_attr = 13.0;
+    	WRITE_FULLPATH(timepath, &time_attr);
+
+    	int dim_6_int[6] = {13,13,13,13,13,13};
+    	int dim_3_int[3] = {14,14,14};
+    	double dim_3_double[3] = {15.0,15.0,15.0 };
+    	uint64_t dim_3_uint64_t[3] = {MAYA_SHAPE_X, MAYA_SHAPE_Y, MAYA_SHAPE_Z};
+
+    	WRITE_FULLPATH(cbbpath, dim_6_int);
+    	WRITE_FULLPATH(cngzpath, dim_3_int);
+    	WRITE_FULLPATH(originpath, dim_3_double);
+    	WRITE_FULLPATH(deltapath, dim_3_double);
+    	WRITE_FULLPATH(ioriginpath, dim_3_int);
+
+    	// this is the size of adios_unsigned_long @see adios_get_type_size()
+    	assert(sizeof(uint64_t) == 8);
+    	WRITE_FULLPATH(shapepath, dim_3_uint64_t);
+    }
+
+	fprintf(stderr, "Rank=%d committed write\n", rank);
+
+	free(my_data);
+	my_data = NULL;
+
+	adios_close(adios_handle);
+
+	// clean and finalize the system
+	adios_finalize(rank);
+	MPI_Finalize();
+
+	printf("\n");
+
+	return 0;
+}
+
diff --git a/tests/C/flexpath_tests/scalar/CMakeLists.txt b/tests/C/flexpath_tests/scalar/CMakeLists.txt
new file mode 100644
index 0000000..c33201e
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/CMakeLists.txt
@@ -0,0 +1,15 @@
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/tests/C/flexpath_tests/include)
+link_directories(${PROJECT_SOURCE_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${MXML_INCLUDE_DIR}/../lib)
+
+
+add_executable(writer_scalar writer.c ../common/utils.c)
+target_link_libraries(writer_scalar adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+
+add_executable(reader_scalar reader.c ../common/utils.c)
+target_link_libraries(reader_scalar adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+
+file(COPY test_config_flex.xml test_config_mpi.xml readme.txt DESTINATION ${PROJECT_BINARY_DIR}/tests/C/flexpath_tests/maya_append)
diff --git a/tests/C/flexpath_tests/scalar/Makefile.am b/tests/C/flexpath_tests/scalar/Makefile.am
new file mode 100644
index 0000000..a68efca
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/Makefile.am
@@ -0,0 +1,21 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(srcdir)/../include
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
+
+noinst_PROGRAMS = writer_scalar reader_scalar
+
+writer_scalar_SOURCES = writer.c ../common/utils.c
+writer_scalar_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_scalar_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_scalar_SOURCES = reader.c ../common/utils.c
+reader_scalar_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_scalar_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+
+CLEANFILES = *.bp
+CC=$(MPICC)
+EXTRA_DIST = test_config_flex.xml test_config_mpi.xml cfg.h readme.txt
diff --git a/examples/C/scalars/Makefile.in b/tests/C/flexpath_tests/scalar/Makefile.in
similarity index 79%
copy from examples/C/scalars/Makefile.in
copy to tests/C/flexpath_tests/scalar/Makefile.in
index b08ba8c..9169724 100644
--- a/examples/C/scalars/Makefile.in
+++ b/tests/C/flexpath_tests/scalar/Makefile.in
@@ -34,12 +34,15 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = scalars_write$(EXEEXT) scalars_read$(EXEEXT) \
-	scalars_write_step$(EXEEXT)
-subdir = examples/C/scalars
+noinst_PROGRAMS = writer_scalar$(EXEEXT) reader_scalar$(EXEEXT)
+subdir = tests/C/flexpath_tests/scalar
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,28 +74,21 @@ CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am_scalars_read_OBJECTS = scalars_read.$(OBJEXT)
-scalars_read_OBJECTS = $(am_scalars_read_OBJECTS)
+am_reader_scalar_OBJECTS = reader.$(OBJEXT) utils.$(OBJEXT)
+reader_scalar_OBJECTS = $(am_reader_scalar_OBJECTS)
 am__DEPENDENCIES_1 =
-scalars_read_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
+reader_scalar_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_read_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+reader_scalar_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_read_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_OBJECTS = $(am_scalars_write_OBJECTS)
-scalars_write_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(reader_scalar_LDFLAGS) $(LDFLAGS) -o $@
+am_writer_scalar_OBJECTS = writer.$(OBJEXT) utils.$(OBJEXT)
+writer_scalar_OBJECTS = $(am_writer_scalar_OBJECTS)
+writer_scalar_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 	$(am__DEPENDENCIES_1)
-scalars_write_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+writer_scalar_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_LDFLAGS) $(LDFLAGS) -o $@
-am_scalars_write_step_OBJECTS = scalars_write.$(OBJEXT)
-scalars_write_step_OBJECTS = $(am_scalars_write_step_OBJECTS)
-scalars_write_step_DEPENDENCIES = $(top_builddir)/src/libadios.a \
-	$(am__DEPENDENCIES_1)
-scalars_write_step_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(scalars_write_step_LDFLAGS) $(LDFLAGS) -o $@
+	$(writer_scalar_LDFLAGS) $(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
 am__depfiles_maybe =
@@ -101,10 +101,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
-DIST_SOURCES = $(scalars_read_SOURCES) $(scalars_write_SOURCES) \
-	$(scalars_write_step_SOURCES)
+SOURCES = $(reader_scalar_SOURCES) $(writer_scalar_SOURCES)
+DIST_SOURCES = $(reader_scalar_SOURCES) $(writer_scalar_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -130,12 +128,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -198,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -270,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -325,22 +344,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(srcdir)/../include
 AUTOMAKE_OPTIONS = no-dependencies
-scalars_write_SOURCES = scalars_write.c
-scalars_write_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
-scalars_write_LDFLAGS = $(ADIOSLIB_LDFLAGS)
-scalars_read_SOURCES = scalars_read.c
-scalars_read_LDADD = $(top_builddir)/src/libadiosread.a \
-	$(ADIOSREADLIB_LDADD)
-scalars_read_LDFLAGS = $(ADIOSREADLIB_LDFLAGS)
-scalars_write_step_SOURCES = scalars_write.c
-scalars_write_step_LDADD = $(top_builddir)/src/libadios.a \
-	$(ADIOSLIB_LDADD)
-scalars_write_step_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+writer_scalar_SOURCES = writer.c ../common/utils.c
+writer_scalar_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+writer_scalar_LDFLAGS = $(ADIOSLIB_LDFLAGS)
+reader_scalar_SOURCES = reader.c ../common/utils.c
+reader_scalar_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reader_scalar_LDFLAGS = $(ADIOSLIB_LDFLAGS)
 CLEANFILES = *.bp
-EXTRA_DIST = scalars.xml gwrite_scalars.ch gread_scalars.ch job.pbs
+EXTRA_DIST = test_config_flex.xml test_config_mpi.xml cfg.h readme.txt
 all: all-am
 
 .SUFFIXES:
@@ -354,9 +368,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/scalars/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/C/flexpath_tests/scalar/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu examples/C/scalars/Makefile
+	  $(AUTOMAKE) --gnu tests/C/flexpath_tests/scalar/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -384,15 +398,12 @@ clean-noinstPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-scalars_read$(EXEEXT): $(scalars_read_OBJECTS) $(scalars_read_DEPENDENCIES) 
-	@rm -f scalars_read$(EXEEXT)
-	$(scalars_read_LINK) $(scalars_read_OBJECTS) $(scalars_read_LDADD) $(LIBS)
-scalars_write$(EXEEXT): $(scalars_write_OBJECTS) $(scalars_write_DEPENDENCIES) 
-	@rm -f scalars_write$(EXEEXT)
-	$(scalars_write_LINK) $(scalars_write_OBJECTS) $(scalars_write_LDADD) $(LIBS)
-scalars_write_step$(EXEEXT): $(scalars_write_step_OBJECTS) $(scalars_write_step_DEPENDENCIES) 
-	@rm -f scalars_write_step$(EXEEXT)
-	$(scalars_write_step_LINK) $(scalars_write_step_OBJECTS) $(scalars_write_step_LDADD) $(LIBS)
+reader_scalar$(EXEEXT): $(reader_scalar_OBJECTS) $(reader_scalar_DEPENDENCIES) 
+	@rm -f reader_scalar$(EXEEXT)
+	$(reader_scalar_LINK) $(reader_scalar_OBJECTS) $(reader_scalar_LDADD) $(LIBS)
+writer_scalar$(EXEEXT): $(writer_scalar_OBJECTS) $(writer_scalar_DEPENDENCIES) 
+	@rm -f writer_scalar$(EXEEXT)
+	$(writer_scalar_LINK) $(writer_scalar_OBJECTS) $(writer_scalar_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -409,6 +420,12 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
+utils.o: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.o `test -f '../common/utils.c' || echo '$(srcdir)/'`../common/utils.c
+
+utils.obj: ../common/utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utils.obj `if test -f '../common/utils.c'; then $(CYGPATH_W) '../common/utils.c'; else $(CYGPATH_W) '$(srcdir)/../common/utils.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -499,7 +516,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -598,19 +615,24 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/readme.txt $(builddir)
 
 # 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.
diff --git a/tests/C/flexpath_tests/scalar/cfg.h b/tests/C/flexpath_tests/scalar/cfg.h
new file mode 100644
index 0000000..e3d853a
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/cfg.h
@@ -0,0 +1,14 @@
+/**
+ * cfg.h
+ *
+ *  Created on: Sep 4, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ */
+
+#ifndef CFG_H_
+#define CFG_H_
+
+//! size of the X dimension
+#define NX_DIM 10
+
+#endif /* CFG_H_ */
diff --git a/tests/C/flexpath_tests/scalar/reader.c b/tests/C/flexpath_tests/scalar/reader.c
new file mode 100644
index 0000000..a612a15
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/reader.c
@@ -0,0 +1,130 @@
+/**
+ * reader.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ * Created on: Jul 1, 2013
+ * Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * The process reads an integer scalar. It should be equal to its rank.
+ * Excessive processes (if rank > the number of writers) quit. It is recommended,
+ * however, to run as many readers as writers.
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#include "misc.h"
+#include "utils.h"
+#include "test_common.h"
+#include "cfg.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+int main (int argc, char **argv){
+	int rank =0, size =0;
+	int my_scalar = -1;         // this will hold what I got from the writer
+	MPI_Comm comm = MPI_COMM_WORLD;
+	diag_t diag = DIAG_OK;  // to store the diagnostic information
+	struct test_info test_result = { TEST_PASSED, "scalar" };
+	struct err_counts err = { 0, 0};
+	struct adios_tsprt_opts adios_opts;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs readers. It is recommended to run as many readers as writers.");
+
+	// adios read initialization
+	MPI_Init( &argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+
+	// choose the right method depending on the method
+	SET_ERROR_IF_NOT_ZERO(adios_read_init_method(adios_opts.method, comm, adios_opts.adios_options), err.adios);
+	RET_IF_ERROR(err.adios, rank);
+
+
+	// I will be working with streams so the lock mode is necessary,
+	// return immediately if the stream unavailable
+	ADIOS_FILE *adios_handle = adios_read_open(FILE_NAME, adios_opts.method, comm, ADIOS_LOCKMODE_NONE, 0.0);
+	if ( !adios_handle){
+		p_error("Quitting ... (%d) %s\n", adios_errno, adios_errmsg());
+		return DIAG_ERR;
+	}
+
+	// define portions of data how they will be read
+	ADIOS_SELECTION *sel = NULL;
+	ADIOS_VARINFO *avi = NULL;
+
+	// read how many processors wrote that array
+	avi = adios_inq_var (adios_handle, "size");
+	if (!avi){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+	size = *((int*)avi->value);
+	adios_free_varinfo(avi);
+	avi = NULL;
+
+	// if I run more readers than writers; just release
+	// the excessive readers
+	if (rank >= size){
+		p_info("rank %d: I am an excessive rank. Nothing to read ...\n", rank);
+		// diag should be DIAG_OK
+		goto close_adios;
+	}
+
+	// this is the index of the written block
+	sel = adios_selection_writeblock(rank);
+	if( !sel ){
+		p_error("rank %d: Quitting ... (%d) %s\n", rank, adios_errno, adios_errmsg());
+		diag = DIAG_ERR;
+		goto close_adios;
+	}
+
+	// TODO as of 2013-07-08, I was told that err_end_of_stream doesn't work
+	// as it supposed to work
+	//while(adios_errno != err_end_of_stream){
+
+		if (adios_schedule_read(adios_handle, sel, "lucky_scalar",0,1,&my_scalar) != 0){
+			p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+			adios_selection_delete(sel);
+			sel = NULL;
+			CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+			return DIAG_ERR;
+		}
+
+		// not sure if this assumption is correct; difficult to find in the ADIOS sources
+		if (adios_perform_reads(adios_handle, 1) != 0){
+			p_error("rank %d: Quitting ...(%d) %s\n", rank, adios_errno, adios_errmsg());
+			adios_selection_delete(sel);
+			sel = NULL;
+			CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+			return DIAG_ERR;
+		}
+
+		if( rank == my_scalar){
+			p_test_passed("%s: rank %d\n", test_result.name, rank);
+			test_result.result = TEST_PASSED;
+		} else {
+			p_test_failed("%s: rank %d: my_scalar=%d. (rank != my_scalar)\n", test_result.name, rank,  my_scalar);
+			test_result.result = TEST_FAILED;
+		}
+	//}
+
+just_clean:
+		// clean everything
+		adios_selection_delete(sel);
+		sel = NULL;
+close_adios:
+		CLOSE_ADIOS_READER(adios_handle, adios_opts.method);
+
+	return diag;
+}
diff --git a/tests/C/flexpath_tests/scalar/readme.txt b/tests/C/flexpath_tests/scalar/readme.txt
new file mode 100644
index 0000000..21163f7
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/readme.txt
@@ -0,0 +1,108 @@
+# The protocol file generated by protogen.py ver. 1.0 on 2013-06-27 12:54
+# AUTHOR: Magda S aka Magic Magg magg dot gatech at gmail dot com
+# DATE: 2013-06-27
+
+
+DESCRIPTION
+===========
+This is a test case for Flexpath. The idea of the SCALAR_READ test: the writer writes a
+an integer scalar that is the rank of the writer; the reader of should read
+an integer number which is the rank of the writer and should be equal 
+to the rank of the reader.
+
+There might be as many writers as you wish, and there might be as many readers
+as you wish (in theory). However, each rank reads its own rank. The reader knows how many 
+writers were there so if its rank is higher then it simply quits.
+It is, however, recommended to run as many readers as writers. Otherwise
+some processes are blocked.
+
+
+The test can work in two modes (use switch '-t flx' or '-t mpi'):
+
+1. MPI/ADIOS_READ_METHOD_BP
+2. FLEXPATH/ADIOS_READ_METHOD_FLEXPATH
+
+
+NOTE:
+
+If you are switching please be sure that first you run make clean, and after
+that make. The Makefile is not perfect. 
+
+RUN
+=====
+The order of execution, i.e., first writer then reader, should not matter;
+however, I run first writer then the reader.
+
+# should remove Flexpath contact text file remnants  such as _read_ready.txt, 
+# _info_writer.txt, and test.bp
+$ make -f Makefile.generic clean_test
+
+$ mpirun -np 2 ./writer -t flx
+$ mpirun -np 2 ./reader -t flx
+
+See Makefile for other options or add '-h' option to the reader or writer
+
+CONTACT
+=========
+If you have questions or suggestions, please contact the author (see the 
+beginning of the file). And remember you are the master since you have the
+sources.
+
+
+TROUBLESHOOTING
+================
+
+* There might be text files left such as *reader_info.txt, *writer_info.txt; 
+they should be removed for the next run. In order to do this you can 
+use command:
+
+make clean_test
+
+
+NOTES
+=======
+
+2013-07-08 - tested on my local laptop (MPI and FLEXPATH)
+
+
+-----------------------------------------------------------------------------
+OUTDATED (2013-07-08)
+------------------------------------------------------------------------------
+I will update later. 
+
+RUNNING ON KRAKEN
+=================
+This runs one reader per node and one writer per node.
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+You should be able to run the example with as many readers and writers as you wish.
+
+Example PBS script
+------------------
+#!/bash/bin
+#PBS -l walltime=00:05:00,size=24
+#PBS -A UT-TENN0033
+
+date
+
+echo "nodefile="
+cat $PBS_NODEFILE
+echo "=end nodefile"
+
+# make sure you have all modules loaded
+module use ~smagg/opt/modulefiles
+module load mag-mxml-2.7/kraken-gnu
+module list
+
+cd $PBS_O_WORKDIR
+
+aprun -n 1 -N 1 ./arrays_read &
+aprun -n 1 -N 1 ./arrays_write
+
+date
+
+# eof
+
+# EOF
diff --git a/tests/C/flexpath_tests/scalar/test_config_flex.xml b/tests/C/flexpath_tests/scalar/test_config_flex.xml
new file mode 100644
index 0000000..7b66ee3
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/test_config_flex.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+<adios-group name="scalar" coordination-communicator="comm" stats="On">
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <var name="lucky_scalar" type="integer" />
+</adios-group>
+
+<!-- The queue size says how many timesteps the writer can buffer before it blocks -->
+<method group="scalar"  method="FLEXPATH">QUEUE_SIZE=4;</method>    
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/C/flexpath_tests/scalar/test_config_mpi.xml b/tests/C/flexpath_tests/scalar/test_config_mpi.xml
new file mode 100644
index 0000000..aa21734
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/test_config_mpi.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+<adios-group name="scalar" coordination-communicator="comm" stats="On">
+    <var name="size" type="integer"/>
+    <var name="rank" type="integer"/>
+    <var name="lucky_scalar" type="integer" />
+</adios-group>
+
+<!-- The queue size says how many timesteps the writer can buffer before it blocks -->
+<method group="scalar"  method="MPI">QUEUE_SIZE=4;</method>
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/C/flexpath_tests/scalar/writer.c b/tests/C/flexpath_tests/scalar/writer.c
new file mode 100644
index 0000000..fcf387c
--- /dev/null
+++ b/tests/C/flexpath_tests/scalar/writer.c
@@ -0,0 +1,73 @@
+/**
+ * writer.c
+ *
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ *
+ *  Created on: Jul 1, 2013
+ *  Author: Magda Slawinska aka Magic Magg magg dot gatech at gmail.com
+ *
+ * This is an example of writing an integer scalar. Each process
+ * writes an integer which is its rank.
+ */
+
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"  // for adios_errno
+
+#include "misc.h"
+#include "utils.h"
+#include "cfg.h"
+#include "test_common.h"
+
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+int main(int argc, char ** argv){
+	int  rank=0, size=0;
+	MPI_Comm  comm = MPI_COMM_WORLD; 	// required for ADIOS
+
+	int64_t 	adios_handle;   		// the ADIOS file handle
+	int retval;
+	struct adios_tsprt_opts adios_opts;
+	int err_count = 0;
+
+	GET_ENTRY_OPTIONS(adios_opts, "Runs writers. It is recommended to run as many writers as readers.");
+
+	// ADIOS initialization
+	MPI_Init(&argc, &argv);
+	MPI_Comm_rank (comm, &rank);
+	MPI_Comm_size (comm, &size);
+
+	SET_ERROR_IF_ZERO(adios_init(adios_opts.xml_adios_init_filename, comm), err_count);
+	RET_IF_ERROR(err_count, rank);
+
+	uint64_t adios_groupsize, adios_totalsize;
+
+	// open with the group name as specified in the xml file
+	adios_open( &adios_handle, "scalar", FILE_NAME, "w", comm);
+	adios_groupsize = 4 + 4 + 4;
+	retval=adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+	fprintf(stderr, "Rank=%d adios_group_size(): adios_groupsize=%ld, adios_totalsize=%ld, retval=%d\n",
+			rank, adios_groupsize, adios_totalsize, retval);
+
+	// write; don't check errors for simplicity reasons
+	adios_write(adios_handle, "size", &size);
+	adios_write(adios_handle, "rank", &rank);
+	adios_write(adios_handle, "lucky_scalar", &rank);
+
+	fprintf(stderr, "Rank=%d committed write\n", rank);
+
+	// close and finalize the ADIOS and friends
+	adios_close(adios_handle);
+	adios_finalize(rank);
+	MPI_Finalize();
+
+	return DIAG_OK;
+}
+
diff --git a/tests/Fortran/CMakeLists.txt b/tests/Fortran/CMakeLists.txt
index 9e305e4..f389eb1 100644
--- a/tests/Fortran/CMakeLists.txt
+++ b/tests/Fortran/CMakeLists.txt
@@ -6,4 +6,4 @@ add_executable(adios_test_f adios_test_f.F90)
 target_link_libraries(adios_test_f adiosf ${ADIOSLIB_LDADD})
 set_target_properties(adios_test_f PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
-#install(FILES config_fortran.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/Fortran)
+file(COPY config_fortran.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/Fortran)
diff --git a/tests/Fortran/Makefile.am b/tests/Fortran/Makefile.am
index e33d947..077585d 100644
--- a/tests/Fortran/Makefile.am
+++ b/tests/Fortran/Makefile.am
@@ -3,6 +3,9 @@ INCLUDES += -I$(top_builddir)/src
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 noinst_PROGRAMS=adios_test_f
 
 #adios_test_f_SOURCES = adios_test_f.F90 adios_module.F90
diff --git a/tests/Fortran/Makefile.in b/tests/Fortran/Makefile.in
index ef7ee2f..b056e1e 100644
--- a/tests/Fortran/Makefile.in
+++ b/tests/Fortran/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = adios_test_f$(EXEEXT)
 subdir = tests/Fortran
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -110,12 +118,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -178,6 +195,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -250,7 +270,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -477,7 +506,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -575,19 +604,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/tests/Makefile.in b/tests/Makefile.in
index b0eb6d0..25d0793 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/tests/bp_read/CMakeLists.txt b/tests/bp_read/CMakeLists.txt
index ba3d5f3..fc094a5 100644
--- a/tests/bp_read/CMakeLists.txt
+++ b/tests/bp_read/CMakeLists.txt
@@ -11,11 +11,14 @@ set(bp_read_c_CPPFLAGS "-DADIOS_USE_READ_API_1 ${ADIOSLIB_CPPFLAGS}")
 set(bp_read_c_CFLAGS "${ADIOSLIB_CFLAGS}")
 
 add_executable(genbp genbp.c)
-target_link_libraries(genbp adios adiosread ${ADIOSLIB_LDADD})
-set_target_properties(genbp PROPERTIES COMPILE_FLAGS "${genbp_CPPFLAGS} ${genbp_CFLAGS}")
+target_link_libraries(genbp adios adiosread ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES}) 
+set_target_properties(genbp PROPERTIES COMPILE_FLAGS "${genbp_CPPFLAGS} ${genbp_CFLAGS} ${MPI_C_COMPILE_FLAGS}")
+if(MPI_LINK_FLAGS)
+   set_target_properties(genbp PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
 
 add_executable(bp_read_c bp_read_c.c)
-target_link_libraries(bp_read_c adiosread ${ADIOSREADLIB_LDADD})
+target_link_libraries(bp_read_c adiosread ${ADIOSREADLIB_LDADD} ${MPI_C_LIBRARIES})
 set_target_properties(bp_read_c PROPERTIES COMPILE_FLAGS "${bp_read_c_CPPFLAGS} ${bp_read_c_CFLAGS}")
 
 if(BUILD_FORTRAN)
@@ -33,4 +36,4 @@ if(BUILD_FORTRAN)
 
 endif(BUILD_FORTRAN)
 
-
+file(COPY testbp_c.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/bp_read)
diff --git a/tests/bp_read/Makefile.am b/tests/bp_read/Makefile.am
index adc3a9b..3d2a49e 100644
--- a/tests/bp_read/Makefile.am
+++ b/tests/bp_read/Makefile.am
@@ -1,8 +1,11 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_builddir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
+
 if BUILD_FORTRAN
 noinst_PROGRAMS=genbp bp_read_f bp_read_f_v1 bp_read_c
 else
diff --git a/tests/bp_read/Makefile.in b/tests/bp_read/Makefile.in
index fae6748..17741db 100644
--- a/tests/bp_read/Makefile.in
+++ b/tests/bp_read/Makefile.in
@@ -42,7 +42,11 @@ host_triplet = @host@
 subdir = tests/bp_read
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -52,14 +56,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -152,12 +160,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -220,6 +237,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -292,7 +312,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -348,7 +377,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 
 # read_coords read_phi read_parts_global read_gena read_gena_pncd read_pixie_all
@@ -572,7 +601,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -671,19 +700,23 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
-
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 # 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.
diff --git a/tests/genarray/CMakeLists.txt b/tests/genarray/CMakeLists.txt
index 84842b5..622b646 100644
--- a/tests/genarray/CMakeLists.txt
+++ b/tests/genarray/CMakeLists.txt
@@ -20,8 +20,6 @@ add_executable(copyarray2D copyarray2D.F90)
 target_link_libraries(copyarray2D adiosf ${ADIOSLIB_LDADD})
 set_target_properties(copyarray2D PROPERTIES COMPILE_FLAGS "${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS}")
 
-#install(FILES genarray.xml genarray3d.xml job.ewok job2D.ewok DESTINATION ${PROJECT_BINARY_DIR}/tests/genarray) 
-
 add_custom_command(
 	OUTPUT gwrite_genarray.fh
 	COMMAND rm -f gwrite_genarray.fh gread_genarray.fh 
@@ -35,3 +33,5 @@ add_custom_command(
 	COMMAND ${PROJECT_SOURCE_DIR}/utils/gpp/gpp.py ${PROJECT_SOURCE_DIR}/tests/genarray/genarray3d.xml
 	DEPENDS genarray3d.xml
 	)
+
+file(COPY genarray.xml genarray3d.xml job.ewok job2D.ewok job.xt5 DESTINATION ${PROJECT_BINARY_DIR}/tests/genarray) 
diff --git a/tests/genarray/Makefile.am b/tests/genarray/Makefile.am
index 3890591..de71d2e 100644
--- a/tests/genarray/Makefile.am
+++ b/tests/genarray/Makefile.am
@@ -36,15 +36,18 @@ copyarray.F90: gwrite_genarray.fh gread_genarray.fh
 
 gwrite_genarray.fh: genarray3d.xml
 	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py genarray3d.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
 gread_genarray.fh: genarray3d.xml
 	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py genarray3d.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
 
 FCLINK = \
 	$(LIBTOOL) --mode=link --tag F77 $(FC) \
 	$(AM_FCFLAGS) $(FCFLAGS) $(LDFLAGS) -o $@
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/genarray3d.xml $(srcdir)/genarray.xml $(builddir)
+
 CLEANFILES = genarray_comm.mod genarray2d_comm.mod gwrite_genarray.fh gread_genarray.fh
 
 EXTRA_DIST = genarray.xml genarray3d.xml job.ewok job2D.ewok
diff --git a/tests/genarray/Makefile.in b/tests/genarray/Makefile.in
index 44e5f84..3f4dd0c 100644
--- a/tests/genarray/Makefile.in
+++ b/tests/genarray/Makefile.in
@@ -39,7 +39,11 @@ noinst_PROGRAMS = genarray$(EXEEXT) genarray2D$(EXEEXT) \
 subdir = tests/genarray
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -134,12 +142,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -202,6 +219,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -274,7 +294,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -542,7 +571,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(PROGRAMS)
+all-am: Makefile $(PROGRAMS) all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -641,18 +670,19 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libtool clean-noinstPROGRAMS ctags 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-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 \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	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-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 pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
 
 
 genarray.F90: gwrite_genarray.fh
@@ -660,10 +690,13 @@ copyarray.F90: gwrite_genarray.fh gread_genarray.fh
 
 gwrite_genarray.fh: genarray3d.xml
 	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py genarray3d.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
 gread_genarray.fh: genarray3d.xml
 	rm -f gwrite_genarray.fh gread_genarray.fh
-	$(top_builddir)/utils/gpp/gpp.py genarray3d.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/genarray3d.xml
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/genarray3d.xml $(srcdir)/genarray.xml $(builddir)
 
 # 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.
diff --git a/tests/genarray/genarray.xml b/tests/genarray/genarray.xml
index 2c7d1f5..b38b147 100644
--- a/tests/genarray/genarray.xml
+++ b/tests/genarray/genarray.xml
@@ -25,9 +25,12 @@
 
     <!-- 2D array written by genarray2D with 1 timesteps OR 
          3D array written by genarray2D with multiple timesteps -->
-    <global-bounds dimensions="X,Y" offsets="offs_x,offs_y">
-        <var name="int_xy" path="/var" type="integer" dimensions="size_x,size_y"/>
-        <var name="int_xyt" path="/var" type="integer" dimensions="size_x,size_y,steps"/>
+    <global-bounds dimensions="/dimensions/X,/dimensions/Y" 
+                   offsets="/aux/offs_x,/aux/offs_y">
+        <var name="int_xy" path="/var" type="integer" 
+             dimensions="/aux/size_x,/aux/size_y"/>
+        <var name="int_xyt" path="/var" type="integer" 
+             dimensions="/aux/size_x,/aux/size_y,steps"/>
     </global-bounds>
     <attribute name="description" path="/var/int_xy" 
                value="2D array with 2D decomposition"/>
@@ -35,8 +38,10 @@
                value="3D array with 2D decomposition with time in 3rd dimension"/>
 
     <!-- 3D array written by genarray with 1 timesteps -->
-    <global-bounds dimensions="X,Y,Z" offsets="offs_x,offs_y,offs_z">
-        <var name="int_xyz" path="/var" type="integer" dimensions="size_x,size_y,size_z"/>
+    <global-bounds dimensions="/dimensions/X,/dimensions/Y,/dimensions/Z" 
+                   offsets="/aux/offs_x,/aux/offs_y,/aux/offs_z">
+        <var name="int_xyz" path="/var" type="integer" 
+             dimensions="/aux/size_x,/aux/size_y,/aux/size_z"/>
     </global-bounds>
     <attribute name="description" path="/var/int_xyz" 
                value="3D array with 3D decomposition"/>
diff --git a/tests/genarray/genarray2D.F90 b/tests/genarray/genarray2D.F90
index e264cb7..71c6712 100644
--- a/tests/genarray/genarray2D.F90
+++ b/tests/genarray/genarray2D.F90
@@ -213,21 +213,21 @@ subroutine writeArray()
         !print '("rank=",i0," total_size=",i0," err=",i0)', rank, total_size, err
 
         ! write dimensions and nproc
-        call adios_write (handle, "X", gndx, err)
-        call adios_write (handle, "Y", gndy, err)
-        call adios_write (handle, "npx", npx, err)
-        call adios_write (handle, "npy", npy, err)
-        call adios_write (handle, "nproc", nproc, err)
+        call adios_write (handle, "/dimensions/X", gndx, err)
+        call adios_write (handle, "/dimensions/Y", gndy, err)
+        call adios_write (handle, "/info/npx", npx, err)
+        call adios_write (handle, "/info/npy", npy, err)
+        call adios_write (handle, "/info/nproc", nproc, err)
 
-        call adios_write (handle, "size_x", ndx, err)
-        call adios_write (handle, "size_y", ndy, err)
-        call adios_write (handle, "offs_x", offx, err)
-        call adios_write (handle, "offs_y", offy, err)
+        call adios_write (handle, "/aux/size_x", ndx, err)
+        call adios_write (handle, "/aux/size_y", ndy, err)
+        call adios_write (handle, "/aux/offs_x", offx, err)
+        call adios_write (handle, "/aux/offs_y", offy, err)
 
         if (tstep == 1) then
-            call adios_write (handle, "int_xy", int_xy, err)
+            call adios_write (handle, "/var/int_xy", int_xy, err)
         endif
-        call adios_write (handle, "int_xyt", int_xy, err)
+        call adios_write (handle, "/var/int_xyt", int_xy, err)
 
     call MPI_BARRIER(MPI_COMM_WORLD,ierr)
     cache_end_time = MPI_WTIME()
diff --git a/tests/genarray/genarray3d.xml b/tests/genarray/genarray3d.xml
index 15ef17d..179b5dc 100644
--- a/tests/genarray/genarray3d.xml
+++ b/tests/genarray/genarray3d.xml
@@ -24,16 +24,17 @@
     <var name="ndz" path="/aux" type="integer"/>
 
     <!-- 3D array written by genarray with 1 timesteps -->
-    <global-bounds dimensions="gndx,gndy,gndz" offsets="offx,offy,offz">
-        <var name="var1" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var2" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var3" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var4" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var5" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var6" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var7" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var8" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
-        <var name="var9" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="ndx,ndy,ndz,steps"/>
+    <global-bounds dimensions="/dimensions/gndx,/dimensions/gndy,/dimensions/gndz" 
+                   offsets="/aux/offx,/aux/offy,/aux/offz">
+        <var name="var1" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var2" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var3" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var4" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var5" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var6" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var7" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var8" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
+        <var name="var9" gwrite="double_xyz" gread="double_xyz" path="/var" type="real*8" dimensions="/aux/ndx,/aux/ndy,/aux/ndz,steps"/>
     </global-bounds>
     <attribute name="description" path="/var/double_xyz"
                value="3D array with 3D decomposition"/>
diff --git a/tests/suite/CMakeLists.txt b/tests/suite/CMakeLists.txt
index 6d61ffd..b1112fb 100644
--- a/tests/suite/CMakeLists.txt
+++ b/tests/suite/CMakeLists.txt
@@ -1,7 +1,21 @@
 add_subdirectory(programs)
 
-#install(FILES HOWTO-Add-new-test DESTINATION ${PROJECT_BINARY_DIR}/tests/suite)
-#install(FILES HOWTO-Run DESTINATION ${PROJECT_BINARY_DIR}/tests/suite)
+file(COPY HOWTO-Add-new-test HOWTO-Run cleanup.sh test.sh DESTINATION ${PROJECT_BINARY_DIR}/tests/suite)
+
+if(EXISTS ${PROJECT_BINARY_DIR}/tests/suite/reference)
+  file(COPY reference/ DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/reference)
+else()
+  file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/tests/suite/reference)
+  file(COPY reference/ DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/reference)
+endif()
+
+if(EXISTS ${PROJECT_BINARY_DIR}/tests/suite/tests)
+  file(COPY tests/ DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/tests)
+else()
+  file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/tests/suite/tests)
+  file(COPY tests/ DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/tests)
+endif()
+
 #install(PROGRAMS cleanup.sh DESTINATION ${PROJECT_BINARY_DIR}/tests/suite)
 #install(DIRECTORY reference USE_SOURCE_PERMISSIONS DESTINATION ${PROJECT_BINARY_DIR}/tests/suite PATTERN ".svn" EXCLUDE)
 #install(PROGRAMS test.sh DESTINATION ${PROJECT_BINARY_DIR}/tests/suite)
diff --git a/tests/suite/Makefile.am b/tests/suite/Makefile.am
index 57de0ee..480e278 100644
--- a/tests/suite/Makefile.am
+++ b/tests/suite/Makefile.am
@@ -5,3 +5,9 @@ EXTRA_DIST = HOWTO-Add-new-test \
              reference/*        \
              test.sh            \
              tests/*
+	
+all-local:
+	test "$(srcdir)" = "$(builddir)" || ln -sf $(srcdir)/reference $(builddir)
+	test "$(srcdir)" = "$(builddir)" || ln -sf $(srcdir)/tests $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/test.sh $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/cleanup.sh $(builddir)
diff --git a/tests/suite/Makefile.in b/tests/suite/Makefile.in
index a9ceeb0..41cfaf0 100644
--- a/tests/suite/Makefile.in
+++ b/tests/suite/Makefile.in
@@ -36,7 +36,11 @@ host_triplet = @host@
 subdir = tests/suite
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -46,14 +50,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -128,12 +136,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -196,6 +213,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -268,7 +288,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -566,7 +595,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-recursive
-all-am: Makefile
+all-am: Makefile all-local
 installdirs: installdirs-recursive
 installdirs-am:
 install: install-recursive
@@ -664,19 +693,25 @@ uninstall-am:
 	install-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive 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 pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
-
+	all all-am all-local check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive 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 pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || ln -sf $(srcdir)/reference $(builddir)
+	test "$(srcdir)" = "$(builddir)" || ln -sf $(srcdir)/tests $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/test.sh $(builddir)
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/cleanup.sh $(builddir)
 
 # 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.
diff --git a/tests/suite/programs/CMakeLists.txt b/tests/suite/programs/CMakeLists.txt
index 70a9738..b134541 100644
--- a/tests/suite/programs/CMakeLists.txt
+++ b/tests/suite/programs/CMakeLists.txt
@@ -1,43 +1,47 @@
 include_directories(${PROJECT_SOURCE_DIR}/tests/suite)
 include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
 include_directories(${PROJECT_SOURCE_DIR}/tests/suite/programs)
 include_directories(${PROJECT_BINARY_DIR}/tests/suite/programs)
 link_directories(${PROJECT_BINARY_DIR}/tests/suite/programs)
 
+set (WRITE_PROGS local_array_time 
+  adios_amr_write 
+  adios_amr_write_2vars
+  adios_staged_read
+  adios_staged_read_v2 
+  adios_staged_read_2vars 
+  write_read 
+  write_alternate 
+  many_vars 
+  selections 
+  path_test 
+  reuse_dim 
+  adios_transforms_read_write 
+  connect_to_space_subset
+  copy_subvolume
+  transforms_specparse
+  set_path
+  set_path_var
+  hashtest)
 
 if(BUILD_WRITE)
-  add_executable(local_array_time local_array_time.c)
-  target_link_libraries(local_array_time adios ${ADIOSLIB_LDADD})
-  
-  add_executable(adios_amr_write adios_amr_write.c)
-  target_link_libraries(adios_amr_write adios ${ADIOSLIB_LDADD})
-
-  add_executable(adios_amr_write_2vars adios_amr_write_2vars.c)
-  target_link_libraries(adios_amr_write_2vars adios ${ADIOSLIB_LDADD})
-  
-  add_executable(adios_staged_read adios_staged_read.c)
-  target_link_libraries(adios_staged_read adiosread ${ADIOSREADLIB_LDADD})
-
-  add_executable(adios_staged_read_2vars adios_staged_read_2vars.c)
-  target_link_libraries(adios_staged_read_2vars adiosread ${ADIOSREADLIB_LDADD})
-
-  add_executable(write_read write_read.c)
-  target_link_libraries(write_read adios ${ADIOSLIB_LDADD})
-
-  add_executable(write_alternate write_alternate.c)
-  target_link_libraries(write_alternate adios ${ADIOSLIB_LDADD})
-
-  add_executable(many_vars many_vars.c)
-  target_link_libraries(many_vars adios ${ADIOSLIB_LDADD})
-
-  add_executable(selections selections.c)
-  target_link_libraries(selections adios ${ADIOSLIB_LDADD})
+  foreach (PROG ${WRITE_PROGS} )
+    add_executable(${PROG} ${PROG}.c)
+    if(MPI_COMPILE_FLAGS)
+      set_target_properties(${PROG} PROPERTIES COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
+    endif()
+    if(MPI_LINK_FLAGS)
+      set_target_properties(${PROG} PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+    endif()
+    target_link_libraries(${PROG} adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+  endforeach()  
 endif(BUILD_WRITE)
 
 if(BUILD_FORTRAN)
   if(BUILD_WRITE)
     add_executable(posix_method posix_method.F90 gwrite_posix_method.fh)
-    target_link_libraries(posix_method adiosf ${ADIOSLIB_LDADD})
+    target_link_libraries(posix_method adiosf ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
     include_directories(${PROJECT_BINARY_DIR}/src)
     add_custom_command(
 	OUTPUT gwrite_posix_method.fh
@@ -47,4 +51,4 @@ if(BUILD_FORTRAN)
   endif(BUILD_WRITE)
 endif(BUILD_FORTRAN)
 
-#install(FILES adios_amr_write_2vars.xml adios_amr_write.xml local_array_time.xml posix_method.xml write_alternate.xml write_read.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs)
+file(COPY adios_amr_write.xml adios_amr_write_2vars.xml posix_method.xml local_array_time.xml write_alternate.xml write_read.xml transforms.xml path_test.xml adios_transforms.xml DESTINATION ${PROJECT_BINARY_DIR}/tests/suite/programs)
diff --git a/tests/suite/programs/Makefile.am b/tests/suite/programs/Makefile.am
index a2e678a..1899bd5 100644
--- a/tests/suite/programs/Makefile.am
+++ b/tests/suite/programs/Makefile.am
@@ -20,7 +20,13 @@ check_C=local_array_time \
         two_groups \
         many_vars \
         selections \
+        path_test \
+        reuse_dim \
+        adios_transforms_read_write \
         connect_to_space_subset
+
+test_C=hashtest copy_subvolume transforms_specparse
+
 endif
 
 if BUILD_FORTRAN
@@ -30,14 +36,17 @@ check_Fortran=posix_method
 endif
 endif
 
-check_PROGRAMS=$(check_C) $(check_Fortran) $(check_readonly_C) $(check_readonly_Fortran)
+check_PROGRAMS=$(check_C) $(check_Fortran) $(check_readonly_C) $(check_readonly_Fortran) $(test_C)
 
 # Sequential tests to be executed by "make check" can be defined right here in TESTS
 # Parallel tests should be defined in ../tests/*.sh and executed by ../test.sh
-TESTS= 
+TESTS=$(test_C)
 
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src
+INCLUDES += -I$(top_builddir)/src -I$(top_srcdir)/src/public
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 
 #############################
 # Build rules for each test #
@@ -49,7 +58,7 @@ posix_method_LDADD = $(top_builddir)/src/libadiosf.a $(ADIOSLIB_LDADD)
 posix_method_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 posix_method.o: gwrite_posix_method.fh 
 gwrite_posix_method.fh: posix_method.xml
-	$(top_srcdir)/utils/gpp/gpp.py posix_method.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/posix_method.xml
 
 local_array_time_SOURCES=local_array_time.c
 local_array_time_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
@@ -66,8 +75,8 @@ adios_amr_write_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_amr_write_2vars.o: adios_amr_write_2vars.c
 
 adios_staged_read_SOURCES=adios_staged_read.c
-adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
-adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_staged_read.o: adios_staged_read.c
 
 adios_staged_read_v2_SOURCES=adios_staged_read_v2.c
@@ -76,10 +85,15 @@ adios_staged_read_v2_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 adios_staged_read_v2.o: adios_staged_read_v2.c
 
 adios_staged_read_2vars_SOURCES=adios_staged_read_2vars.c
-adios_staged_read_2vars_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
-adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+adios_staged_read_2vars_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_staged_read_2vars.o: adios_staged_read_2vars.c
 
+adios_transforms_read_write_SOURCES=adios_transforms_read_write.c
+adios_transforms_read_write_LDADD = $(top_builddir)/src/libadios.a $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_transforms_read_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+adios_transforms_read_write.o: adios_transforms_read_write.c 
+
 write_read_SOURCES=write_read.c
 write_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 write_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
@@ -90,6 +104,16 @@ write_alternate_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 write_alternate_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 write_alternate.o: write_alternate.c
 
+set_path_SOURCES=set_path.c
+set_path_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+set_path_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+set_path.o: set_path.c
+
+set_path_var_SOURCES=set_path_var.c
+set_path_var_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+set_path_var_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+set_path_var.o: set_path_var.c
+
 two_groups_SOURCES=two_groups.c
 two_groups_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 two_groups_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
@@ -105,14 +129,49 @@ selections_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 selections_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 selections.o: selections.c
 
+path_test_SOURCES=path_test.c
+path_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+path_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+path_test.o: path_test.c
+
+reuse_dim_SOURCES=reuse_dim.c
+reuse_dim_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reuse_dim_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+reuse_dim.o: reuse_dim.c
+
 connect_to_space_subset_SOURCES=connect_to_space_subset.c
 connect_to_space_subset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 connect_to_space_subset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 connect_to_space_subset.o: connect_to_space_subset.c
 
+#transforms_SOURCES=transforms.c
+#transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
+#transforms_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+#transforms_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+#transforms.o: transforms.c
+
+copy_subvolume_SOURCES=copy_subvolume.c
+copy_subvolume_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSLIB_LDADD)
+copy_subvolume_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+copy_subvolume_CPPFLAGS = -I$(top_srcdir)/src
+#copy_subvolume.o: copy_subvolume.c
+
+transforms_specparse_SOURCES=transforms_specparse.c
+transforms_specparse_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_LDADD)
+transforms_specparse_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+transforms_specparse_CPPFLAGS = -I$(top_srcdir)/src
+#transforms_specparse.o: transforms_specparse.c
+
+hashtest_SOURCES=hashtest.c
+hashtest_LDADD = $(top_builddir)/src/libadios_a-qhashtbl.o
+hashtest_LDFLAGS = $(AM_LDFLAGS) 
+hashtest_CPPFLAGS = -I$(top_srcdir)/src
+hashtest.o: hashtest.c
+
 EXTRA_DIST = adios_amr_write.xml adios_amr_write_2vars.xml \
              posix_method.xml local_array_time.xml  \
-             write_alternate.xml write_read.xml
+             write_alternate.xml write_read.xml transforms.xml \
+             path_test.xml adios_transforms.xml
 
 CLEANFILES = gwrite_posix_method.fh gread_posix_method.fh 
 
diff --git a/tests/suite/programs/Makefile.in b/tests/suite/programs/Makefile.in
index 8d691ef..e8aa0e5 100644
--- a/tests/suite/programs/Makefile.in
+++ b/tests/suite/programs/Makefile.in
@@ -34,12 +34,16 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
-	$(am__EXEEXT_3)
-TESTS =
+	$(am__EXEEXT_3) $(am__EXEEXT_4)
+TESTS = $(am__EXEEXT_4)
 subdir = tests/suite/programs
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -74,11 +82,16 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_WRITE_TRUE@	adios_staged_read_2vars$(EXEEXT) \
 @BUILD_WRITE_TRUE@	write_read$(EXEEXT) write_alternate$(EXEEXT) \
 @BUILD_WRITE_TRUE@	two_groups$(EXEEXT) many_vars$(EXEEXT) \
- at BUILD_WRITE_TRUE@	selections$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	selections$(EXEEXT) path_test$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	reuse_dim$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	adios_transforms_read_write$(EXEEXT) \
 @BUILD_WRITE_TRUE@	connect_to_space_subset$(EXEEXT)
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at am__EXEEXT_2 =  \
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE@	posix_method$(EXEEXT)
 am__EXEEXT_3 =
+ at BUILD_WRITE_TRUE@am__EXEEXT_4 = hashtest$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	copy_subvolume$(EXEEXT) \
+ at BUILD_WRITE_TRUE@	transforms_specparse$(EXEEXT)
 am_adios_amr_write_OBJECTS = adios_amr_write.$(OBJEXT)
 adios_amr_write_OBJECTS = $(am_adios_amr_write_OBJECTS)
 am__DEPENDENCIES_1 =
@@ -117,6 +130,17 @@ adios_staged_read_v2_DEPENDENCIES =  \
 adios_staged_read_v2_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(adios_staged_read_v2_LDFLAGS) $(LDFLAGS) -o $@
+am_adios_transforms_read_write_OBJECTS =  \
+	adios_transforms_read_write.$(OBJEXT)
+adios_transforms_read_write_OBJECTS =  \
+	$(am_adios_transforms_read_write_OBJECTS)
+adios_transforms_read_write_DEPENDENCIES =  \
+	$(top_builddir)/src/libadios.a \
+	$(top_builddir)/src/libadiosread.a $(am__DEPENDENCIES_1)
+adios_transforms_read_write_LINK = $(LIBTOOL) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(adios_transforms_read_write_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_connect_to_space_subset_OBJECTS =  \
 	connect_to_space_subset.$(OBJEXT)
 connect_to_space_subset_OBJECTS =  \
@@ -126,6 +150,19 @@ connect_to_space_subset_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 connect_to_space_subset_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(connect_to_space_subset_LDFLAGS) $(LDFLAGS) -o $@
+am_copy_subvolume_OBJECTS = copy_subvolume-copy_subvolume.$(OBJEXT)
+copy_subvolume_OBJECTS = $(am_copy_subvolume_OBJECTS)
+copy_subvolume_DEPENDENCIES =  \
+	$(top_builddir)/src/libadiosread_nompi.a $(am__DEPENDENCIES_1)
+copy_subvolume_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(copy_subvolume_LDFLAGS) $(LDFLAGS) -o $@
+am_hashtest_OBJECTS = hashtest-hashtest.$(OBJEXT)
+hashtest_OBJECTS = $(am_hashtest_OBJECTS)
+hashtest_DEPENDENCIES = $(top_builddir)/src/libadios_a-qhashtbl.o
+hashtest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(hashtest_LDFLAGS) \
+	$(LDFLAGS) -o $@
 am_local_array_time_OBJECTS = local_array_time.$(OBJEXT)
 local_array_time_OBJECTS = $(am_local_array_time_OBJECTS)
 local_array_time_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -140,6 +177,13 @@ many_vars_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 many_vars_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(many_vars_LDFLAGS) $(LDFLAGS) -o $@
+am_path_test_OBJECTS = path_test.$(OBJEXT)
+path_test_OBJECTS = $(am_path_test_OBJECTS)
+path_test_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+path_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(path_test_LDFLAGS) $(LDFLAGS) -o $@
 am_posix_method_OBJECTS = posix_method.$(OBJEXT)
 posix_method_OBJECTS = $(am_posix_method_OBJECTS)
 posix_method_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
@@ -147,6 +191,13 @@ posix_method_DEPENDENCIES = $(top_builddir)/src/libadiosf.a \
 posix_method_LINK = $(LIBTOOL) --tag=FC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
 	$(posix_method_LDFLAGS) $(LDFLAGS) -o $@
+am_reuse_dim_OBJECTS = reuse_dim.$(OBJEXT)
+reuse_dim_OBJECTS = $(am_reuse_dim_OBJECTS)
+reuse_dim_DEPENDENCIES = $(top_builddir)/src/libadios.a \
+	$(am__DEPENDENCIES_1)
+reuse_dim_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(reuse_dim_LDFLAGS) $(LDFLAGS) -o $@
 am_selections_OBJECTS = selections.$(OBJEXT)
 selections_OBJECTS = $(am_selections_OBJECTS)
 selections_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -154,6 +205,14 @@ selections_DEPENDENCIES = $(top_builddir)/src/libadios.a \
 selections_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(selections_LDFLAGS) $(LDFLAGS) -o $@
+am_transforms_specparse_OBJECTS =  \
+	transforms_specparse-transforms_specparse.$(OBJEXT)
+transforms_specparse_OBJECTS = $(am_transforms_specparse_OBJECTS)
+transforms_specparse_DEPENDENCIES =  \
+	$(top_builddir)/src/libadios_nompi.a $(am__DEPENDENCIES_1)
+transforms_specparse_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(transforms_specparse_LDFLAGS) $(LDFLAGS) -o $@
 am_two_groups_OBJECTS = two_groups.$(OBJEXT)
 two_groups_OBJECTS = $(am_two_groups_OBJECTS)
 two_groups_DEPENDENCIES = $(top_builddir)/src/libadios.a \
@@ -198,18 +257,26 @@ SOURCES = $(adios_amr_write_SOURCES) $(adios_amr_write_2vars_SOURCES) \
 	$(adios_staged_read_SOURCES) \
 	$(adios_staged_read_2vars_SOURCES) \
 	$(adios_staged_read_v2_SOURCES) \
-	$(connect_to_space_subset_SOURCES) $(local_array_time_SOURCES) \
-	$(many_vars_SOURCES) $(posix_method_SOURCES) \
-	$(selections_SOURCES) $(two_groups_SOURCES) \
-	$(write_alternate_SOURCES) $(write_read_SOURCES)
+	$(adios_transforms_read_write_SOURCES) \
+	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
+	$(hashtest_SOURCES) $(local_array_time_SOURCES) \
+	$(many_vars_SOURCES) $(path_test_SOURCES) \
+	$(posix_method_SOURCES) $(reuse_dim_SOURCES) \
+	$(selections_SOURCES) $(transforms_specparse_SOURCES) \
+	$(two_groups_SOURCES) $(write_alternate_SOURCES) \
+	$(write_read_SOURCES)
 DIST_SOURCES = $(adios_amr_write_SOURCES) \
 	$(adios_amr_write_2vars_SOURCES) $(adios_staged_read_SOURCES) \
 	$(adios_staged_read_2vars_SOURCES) \
 	$(adios_staged_read_v2_SOURCES) \
-	$(connect_to_space_subset_SOURCES) $(local_array_time_SOURCES) \
-	$(many_vars_SOURCES) $(posix_method_SOURCES) \
-	$(selections_SOURCES) $(two_groups_SOURCES) \
-	$(write_alternate_SOURCES) $(write_read_SOURCES)
+	$(adios_transforms_read_write_SOURCES) \
+	$(connect_to_space_subset_SOURCES) $(copy_subvolume_SOURCES) \
+	$(hashtest_SOURCES) $(local_array_time_SOURCES) \
+	$(many_vars_SOURCES) $(path_test_SOURCES) \
+	$(posix_method_SOURCES) $(reuse_dim_SOURCES) \
+	$(selections_SOURCES) $(transforms_specparse_SOURCES) \
+	$(two_groups_SOURCES) $(write_alternate_SOURCES) \
+	$(write_read_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -237,12 +304,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -305,6 +381,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -377,7 +456,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -454,11 +542,16 @@ check_readonly_C =
 @BUILD_WRITE_TRUE@        two_groups \
 @BUILD_WRITE_TRUE@        many_vars \
 @BUILD_WRITE_TRUE@        selections \
+ at BUILD_WRITE_TRUE@        path_test \
+ at BUILD_WRITE_TRUE@        reuse_dim \
+ at BUILD_WRITE_TRUE@        adios_transforms_read_write \
 @BUILD_WRITE_TRUE@        connect_to_space_subset
 
+ at BUILD_WRITE_TRUE@test_C = hashtest copy_subvolume transforms_specparse
 @BUILD_FORTRAN_TRUE at check_readonly_Fortran = 
 @BUILD_FORTRAN_TRUE@@BUILD_WRITE_TRUE at check_Fortran = posix_method
-INCLUDES = $(all_includes) -I$(top_builddir)/src
+INCLUDES = $(all_includes) -I$(top_builddir)/src \
+	-I$(top_srcdir)/src/public
 
 #############################
 # Build rules for each test #
@@ -478,20 +571,29 @@ adios_amr_write_2vars_SOURCES = adios_amr_write_2vars.c
 adios_amr_write_2vars_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 adios_amr_write_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_staged_read_SOURCES = adios_staged_read.c
-adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
-adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+adios_staged_read_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_staged_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 adios_staged_read_v2_SOURCES = adios_staged_read_v2.c
 adios_staged_read_v2_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
 adios_staged_read_v2_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 adios_staged_read_2vars_SOURCES = adios_staged_read_2vars.c
-adios_staged_read_2vars_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSREADLIB_LDADD)
-adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
+adios_staged_read_2vars_LDADD = $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_staged_read_2vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+adios_transforms_read_write_SOURCES = adios_transforms_read_write.c
+adios_transforms_read_write_LDADD = $(top_builddir)/src/libadios.a $(top_builddir)/src/libadiosread.a $(ADIOSLIB_LDADD)
+adios_transforms_read_write_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS) $(ADIOSREADLIB_LDFLAGS)
 write_read_SOURCES = write_read.c
 write_read_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 write_read_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 write_alternate_SOURCES = write_alternate.c
 write_alternate_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 write_alternate_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+set_path_SOURCES = set_path.c
+set_path_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+set_path_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+set_path_var_SOURCES = set_path_var.c
+set_path_var_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+set_path_var_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 two_groups_SOURCES = two_groups.c
 two_groups_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 two_groups_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
@@ -501,12 +603,39 @@ many_vars_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 selections_SOURCES = selections.c
 selections_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 selections_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+path_test_SOURCES = path_test.c
+path_test_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+path_test_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+reuse_dim_SOURCES = reuse_dim.c
+reuse_dim_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+reuse_dim_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
 connect_to_space_subset_SOURCES = connect_to_space_subset.c
 connect_to_space_subset_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
 connect_to_space_subset_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+
+#transforms_SOURCES=transforms.c
+#transforms_CPPFLAGS = -DADIOS_USE_READ_API_1
+#transforms_LDADD = $(top_builddir)/src/libadios.a $(ADIOSLIB_LDADD)
+#transforms_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+#transforms.o: transforms.c
+copy_subvolume_SOURCES = copy_subvolume.c
+copy_subvolume_LDADD = $(top_builddir)/src/libadiosread_nompi.a $(ADIOSLIB_LDADD)
+copy_subvolume_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+copy_subvolume_CPPFLAGS = -I$(top_srcdir)/src
+#copy_subvolume.o: copy_subvolume.c
+transforms_specparse_SOURCES = transforms_specparse.c
+transforms_specparse_LDADD = $(top_builddir)/src/libadios_nompi.a $(ADIOSLIB_LDADD)
+transforms_specparse_LDFLAGS = $(AM_LDFLAGS) $(ADIOSLIB_LDFLAGS)
+transforms_specparse_CPPFLAGS = -I$(top_srcdir)/src
+#transforms_specparse.o: transforms_specparse.c
+hashtest_SOURCES = hashtest.c
+hashtest_LDADD = $(top_builddir)/src/libadios_a-qhashtbl.o
+hashtest_LDFLAGS = $(AM_LDFLAGS) 
+hashtest_CPPFLAGS = -I$(top_srcdir)/src
 EXTRA_DIST = adios_amr_write.xml adios_amr_write_2vars.xml \
              posix_method.xml local_array_time.xml  \
-             write_alternate.xml write_read.xml
+             write_alternate.xml write_read.xml transforms.xml \
+             path_test.xml adios_transforms.xml
 
 CLEANFILES = gwrite_posix_method.fh gread_posix_method.fh 
 FCLINK = \
@@ -571,21 +700,39 @@ adios_staged_read_2vars$(EXEEXT): $(adios_staged_read_2vars_OBJECTS) $(adios_sta
 adios_staged_read_v2$(EXEEXT): $(adios_staged_read_v2_OBJECTS) $(adios_staged_read_v2_DEPENDENCIES) 
 	@rm -f adios_staged_read_v2$(EXEEXT)
 	$(adios_staged_read_v2_LINK) $(adios_staged_read_v2_OBJECTS) $(adios_staged_read_v2_LDADD) $(LIBS)
+adios_transforms_read_write$(EXEEXT): $(adios_transforms_read_write_OBJECTS) $(adios_transforms_read_write_DEPENDENCIES) 
+	@rm -f adios_transforms_read_write$(EXEEXT)
+	$(adios_transforms_read_write_LINK) $(adios_transforms_read_write_OBJECTS) $(adios_transforms_read_write_LDADD) $(LIBS)
 connect_to_space_subset$(EXEEXT): $(connect_to_space_subset_OBJECTS) $(connect_to_space_subset_DEPENDENCIES) 
 	@rm -f connect_to_space_subset$(EXEEXT)
 	$(connect_to_space_subset_LINK) $(connect_to_space_subset_OBJECTS) $(connect_to_space_subset_LDADD) $(LIBS)
+copy_subvolume$(EXEEXT): $(copy_subvolume_OBJECTS) $(copy_subvolume_DEPENDENCIES) 
+	@rm -f copy_subvolume$(EXEEXT)
+	$(copy_subvolume_LINK) $(copy_subvolume_OBJECTS) $(copy_subvolume_LDADD) $(LIBS)
+hashtest$(EXEEXT): $(hashtest_OBJECTS) $(hashtest_DEPENDENCIES) 
+	@rm -f hashtest$(EXEEXT)
+	$(hashtest_LINK) $(hashtest_OBJECTS) $(hashtest_LDADD) $(LIBS)
 local_array_time$(EXEEXT): $(local_array_time_OBJECTS) $(local_array_time_DEPENDENCIES) 
 	@rm -f local_array_time$(EXEEXT)
 	$(local_array_time_LINK) $(local_array_time_OBJECTS) $(local_array_time_LDADD) $(LIBS)
 many_vars$(EXEEXT): $(many_vars_OBJECTS) $(many_vars_DEPENDENCIES) 
 	@rm -f many_vars$(EXEEXT)
 	$(many_vars_LINK) $(many_vars_OBJECTS) $(many_vars_LDADD) $(LIBS)
+path_test$(EXEEXT): $(path_test_OBJECTS) $(path_test_DEPENDENCIES) 
+	@rm -f path_test$(EXEEXT)
+	$(path_test_LINK) $(path_test_OBJECTS) $(path_test_LDADD) $(LIBS)
 posix_method$(EXEEXT): $(posix_method_OBJECTS) $(posix_method_DEPENDENCIES) 
 	@rm -f posix_method$(EXEEXT)
 	$(posix_method_LINK) $(posix_method_OBJECTS) $(posix_method_LDADD) $(LIBS)
+reuse_dim$(EXEEXT): $(reuse_dim_OBJECTS) $(reuse_dim_DEPENDENCIES) 
+	@rm -f reuse_dim$(EXEEXT)
+	$(reuse_dim_LINK) $(reuse_dim_OBJECTS) $(reuse_dim_LDADD) $(LIBS)
 selections$(EXEEXT): $(selections_OBJECTS) $(selections_DEPENDENCIES) 
 	@rm -f selections$(EXEEXT)
 	$(selections_LINK) $(selections_OBJECTS) $(selections_LDADD) $(LIBS)
+transforms_specparse$(EXEEXT): $(transforms_specparse_OBJECTS) $(transforms_specparse_DEPENDENCIES) 
+	@rm -f transforms_specparse$(EXEEXT)
+	$(transforms_specparse_LINK) $(transforms_specparse_OBJECTS) $(transforms_specparse_LDADD) $(LIBS)
 two_groups$(EXEEXT): $(two_groups_OBJECTS) $(two_groups_DEPENDENCIES) 
 	@rm -f two_groups$(EXEEXT)
 	$(two_groups_LINK) $(two_groups_OBJECTS) $(two_groups_LDADD) $(LIBS)
@@ -607,10 +754,16 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read_2vars.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_staged_read_v2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/adios_transforms_read_write.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connect_to_space_subset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/copy_subvolume-copy_subvolume.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hashtest-hashtest.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/local_array_time.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/many_vars.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/path_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/reuse_dim.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/selections.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transforms_specparse-transforms_specparse.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/two_groups.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/write_alternate.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/write_read.Po at am__quote@
@@ -645,6 +798,48 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
 
+copy_subvolume-copy_subvolume.o: copy_subvolume.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(copy_subvolume_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT copy_subvolume-copy_subvolume.o -MD -MP -MF $(DEPDIR)/copy_subvolume-copy_subvolume.Tpo -c -o copy_subvolume-copy_subvolume.o `test -f 'copy_subvolume.c' || echo '$(srcdir)/'`copy_subvolume.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/copy_subvolume-copy_subvolume.Tpo $(DEPDIR)/copy_subvolume-copy_subvolume.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='copy_subvolume.c' object='copy_subvolume-copy_subvolume.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(copy_subvolume_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o copy_subvolume-copy_subvolume.o `test -f 'copy_subvolume.c' || echo '$(srcdir)/'`copy_subvolume.c
+
+copy_subvolume-copy_subvolume.obj: copy_subvolume.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(copy_subvolume_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT copy_subvolume-copy_subvolume.obj -MD -MP -MF $(DEPDIR)/copy_subvolume-copy_subvolume.Tpo -c -o copy_subvolume-copy_subvolume.obj `if test -f 'copy_subvolume.c'; then $(CYGPATH_W) 'copy_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/copy_subvolume.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/copy_subvolume-copy_subvolume.Tpo $(DEPDIR)/copy_subvolume-copy_subvolume.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='copy_subvolume.c' object='copy_subvolume-copy_subvolume.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(copy_subvolume_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o copy_subvolume-copy_subvolume.obj `if test -f 'copy_subvolume.c'; then $(CYGPATH_W) 'copy_subvolume.c'; else $(CYGPATH_W) '$(srcdir)/copy_subvolume.c'; fi`
+
+hashtest-hashtest.o: hashtest.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hashtest-hashtest.o -MD -MP -MF $(DEPDIR)/hashtest-hashtest.Tpo -c -o hashtest-hashtest.o `test -f 'hashtest.c' || echo '$(srcdir)/'`hashtest.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/hashtest-hashtest.Tpo $(DEPDIR)/hashtest-hashtest.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hashtest.c' object='hashtest-hashtest.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hashtest-hashtest.o `test -f 'hashtest.c' || echo '$(srcdir)/'`hashtest.c
+
+hashtest-hashtest.obj: hashtest.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hashtest-hashtest.obj -MD -MP -MF $(DEPDIR)/hashtest-hashtest.Tpo -c -o hashtest-hashtest.obj `if test -f 'hashtest.c'; then $(CYGPATH_W) 'hashtest.c'; else $(CYGPATH_W) '$(srcdir)/hashtest.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/hashtest-hashtest.Tpo $(DEPDIR)/hashtest-hashtest.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='hashtest.c' object='hashtest-hashtest.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashtest_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hashtest-hashtest.obj `if test -f 'hashtest.c'; then $(CYGPATH_W) 'hashtest.c'; else $(CYGPATH_W) '$(srcdir)/hashtest.c'; fi`
+
+transforms_specparse-transforms_specparse.o: transforms_specparse.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(transforms_specparse_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transforms_specparse-transforms_specparse.o -MD -MP -MF $(DEPDIR)/transforms_specparse-transforms_specparse.Tpo -c -o transforms_specparse-transforms_specparse.o `test -f 'transforms_specparse.c' || echo '$(srcdir)/'`transforms_specparse.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/transforms_specparse-transforms_specparse.Tpo $(DEPDIR)/transforms_specparse-transforms_specparse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='transforms_specparse.c' object='transforms_specparse-transforms_specparse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(transforms_specparse_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transforms_specparse-transforms_specparse.o `test -f 'transforms_specparse.c' || echo '$(srcdir)/'`transforms_specparse.c
+
+transforms_specparse-transforms_specparse.obj: transforms_specparse.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(transforms_specparse_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transforms_specparse-transforms_specparse.obj -MD -MP -MF $(DEPDIR)/transforms_specparse-transforms_specparse.Tpo -c -o transforms_specparse-transforms_specparse.obj `if test -f 'transforms_specparse.c'; then $(CYGPATH_W) 'transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/transforms_specparse.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/transforms_specparse-transforms_specparse.Tpo $(DEPDIR)/transforms_specparse-transforms_specparse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='transforms_specparse.c' object='transforms_specparse-transforms_specparse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(transforms_specparse_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transforms_specparse-transforms_specparse.obj `if test -f 'transforms_specparse.c'; then $(CYGPATH_W) 'transforms_specparse.c'; else $(CYGPATH_W) '$(srcdir)/transforms_specparse.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -829,7 +1024,7 @@ check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
-all-am: Makefile
+all-am: Makefile all-local
 installdirs:
 install: install-am
 install-exec: install-exec-am
@@ -930,8 +1125,8 @@ uninstall-am:
 
 .MAKE: check-am install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-	clean-checkPROGRAMS clean-generic clean-libtool ctags \
+.PHONY: CTAGS GTAGS all all-am all-local check check-TESTS check-am \
+	clean clean-checkPROGRAMS clean-generic clean-libtool ctags \
 	distclean distclean-compile distclean-generic \
 	distclean-libtool distclean-tags distdir dvi dvi-am html \
 	html-am info info-am install install-am install-data \
@@ -944,20 +1139,29 @@ uninstall-am:
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags uninstall uninstall-am
 
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/*.xml $(builddir)
 posix_method.o: gwrite_posix_method.fh 
 gwrite_posix_method.fh: posix_method.xml
-	$(top_srcdir)/utils/gpp/gpp.py posix_method.xml
+	$(top_builddir)/utils/gpp/gpp.py $(srcdir)/posix_method.xml
 adios_amr_write.o: adios_amr_write.c
 adios_amr_write_2vars.o: adios_amr_write_2vars.c
 adios_staged_read.o: adios_staged_read.c
 adios_staged_read_v2.o: adios_staged_read_v2.c
 adios_staged_read_2vars.o: adios_staged_read_2vars.c
+adios_transforms_read_write.o: adios_transforms_read_write.c 
 write_read.o: write_read.c
 write_alternate.o: write_alternate.c
+set_path.o: set_path.c
+set_path_var.o: set_path_var.c
 two_groups.o: two_groups.c
 many_vars.o: many_vars.c
 selections.o: selections.c
+path_test.o: path_test.c
+reuse_dim.o: reuse_dim.c
 connect_to_space_subset.o: connect_to_space_subset.c
+hashtest.o: hashtest.c
 
 # 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.
diff --git a/tests/suite/programs/adios_amr_write.c b/tests/suite/programs/adios_amr_write.c
index e02c18a..472cb6e 100644
--- a/tests/suite/programs/adios_amr_write.c
+++ b/tests/suite/programs/adios_amr_write.c
@@ -15,7 +15,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "mpi.h"
-#include "public/adios.h"
+#include "adios.h"
 int main (int argc, char ** argv) 
 {
     char        filename [256];
diff --git a/tests/suite/programs/adios_amr_write.xml b/tests/suite/programs/adios_amr_write.xml
index c194905..6d96580 100644
--- a/tests/suite/programs/adios_amr_write.xml
+++ b/tests/suite/programs/adios_amr_write.xml
@@ -13,7 +13,7 @@
     <attribute name="description" path="/temperature" value="Global array written from 'size' processes" type="string"/>
 </adios-group>
 
-<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=8;merging_pgs=0</method>
+<method group="temperature" method="MPI_AMR">stripe_count=1;stripe_size=10485760;num_aggregators=8;merging_pgs=0;num_ost=2</method>
 
 <buffer size-MB="100" allocate-time="now"/>
 
diff --git a/tests/suite/programs/adios_amr_write_2vars.c b/tests/suite/programs/adios_amr_write_2vars.c
index 50c723c..ce69199 100644
--- a/tests/suite/programs/adios_amr_write_2vars.c
+++ b/tests/suite/programs/adios_amr_write_2vars.c
@@ -15,7 +15,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "mpi.h"
-#include "public/adios.h"
+#include "adios.h"
 int main (int argc, char ** argv) 
 {
     char        filename [256];
diff --git a/tests/suite/programs/adios_staged_read.c b/tests/suite/programs/adios_staged_read.c
index 875b67f..f874401 100644
--- a/tests/suite/programs/adios_staged_read.c
+++ b/tests/suite/programs/adios_staged_read.c
@@ -14,7 +14,7 @@
 #include "mpi.h"
 
 #define ADIOS_USE_READ_API_1
-#include "public/adios_read.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/adios_staged_read_2vars.c b/tests/suite/programs/adios_staged_read_2vars.c
index d8e4169..ccb5e46 100644
--- a/tests/suite/programs/adios_staged_read_2vars.c
+++ b/tests/suite/programs/adios_staged_read_2vars.c
@@ -14,7 +14,7 @@
 #include "mpi.h"
 
 #define ADIOS_USE_READ_API_1
-#include "public/adios_read.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/adios_staged_read_v2.c b/tests/suite/programs/adios_staged_read_v2.c
index 71cf206..a65494c 100644
--- a/tests/suite/programs/adios_staged_read_v2.c
+++ b/tests/suite/programs/adios_staged_read_v2.c
@@ -13,7 +13,7 @@
 #include <assert.h>
 #include "mpi.h"
 
-#include "public/adios_read.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/adios_transforms.xml b/tests/suite/programs/adios_transforms.xml
new file mode 100644
index 0000000..414a217
--- /dev/null
+++ b/tests/suite/programs/adios_transforms.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="transform" stats="On">
+    <var name="g1" type="integer"/>
+    <var name="g2" type="integer"/>
+    <var name="o1" type="integer"/>
+    <var name="o2" type="integer"/>
+    <var name="l1" type="integer"/>
+    <var name="l2" type="integer"/>
+    <global-bounds dimensions="g1,g2" offsets="o1,o2">
+       <var name="t_none"     gwrite="t" type="double" dimensions="l1,l2" transform="none"    />
+       <var name="t_zlib"     gwrite="t" type="double" dimensions="l1,l2" transform="zlib"/>
+       <var name="t_szip"     gwrite="t" type="double" dimensions="l1,l2" transform="szip"/>
+       <var name="t_bzip2"    gwrite="t" type="double" dimensions="l1,l2" transform="bzip2"/>
+       <var name="t_identity" gwrite="t" type="double" dimensions="l1,l2" transform="identity"/>
+       <var name="t_aplod"    gwrite="t" type="double" dimensions="l1,l2" transform="aplod"   />
+       <var name="t_isobar"   gwrite="t" type="double" dimensions="l1,l2" transform="isobar"  />
+    </global-bounds>
+</adios-group>
+
+<method group="transform" method="MPI"/>
+
+<buffer size-MB="500" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/suite/programs/adios_transforms_read_write.c b/tests/suite/programs/adios_transforms_read_write.c
new file mode 100644
index 0000000..e6b8691
--- /dev/null
+++ b/tests/suite/programs/adios_transforms_read_write.c
@@ -0,0 +1,223 @@
+/*
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write a global array from N processors using MPI_AGGREGATE.
+ *
+ * How to run: mpirun -np <N> adios_transform_read_write
+ * Output: adios_transform_write.bp
+ * ADIOS config file: adios_transform_write.xml
+ *
+*/
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+#include <stdint.h>
+#include <assert.h>
+
+const int ntransforms = 7;
+const char varname_xform [][256] = { "t_none", 
+                                     "t_identity", 
+                                     "t_zlib",
+                                     "t_szip",
+                                     "t_bzip2",
+                                     "t_aplod", 
+                                     "t_isobar"
+};
+
+int find_var (ADIOS_FILE *f, char *name)
+{
+    int i;
+    for (i=0; i<f->nvars; i++)
+    {
+        // skip the leading / in the file's varname list in the comparison
+        if (!strcmp(name, f->var_namelist[i]+1))
+            return 1;
+    }
+    return 0;
+}
+
+
+int read_box (char *filename)
+{
+
+    double                  *data_xform [ntransforms];
+    MPI_Comm                comm                = MPI_COMM_WORLD;
+
+    enum ADIOS_READ_METHOD        method  = ADIOS_READ_METHOD_BP;
+    ADIOS_FILE              *f       = adios_read_open_file (filename, method, comm);
+    ADIOS_VARINFO           *varinfo = adios_inq_var (f, varname_xform [0]);
+    ADIOS_SELECTION         *sel1;
+
+    assert (varinfo);
+    adios_inq_var_blockinfo (f, varinfo);
+
+    uint32_t                nblocks  = varinfo->sum_nblocks;
+    uint32_t                ndim     = varinfo->ndim;
+    uint64_t                *pg_dims = varinfo->blockinfo [0].count;
+
+    uint64_t npoints = 0;
+    uint64_t *starts  = (uint64_t *) calloc (varinfo->ndim, sizeof (uint64_t));
+    uint64_t *counts  = (uint64_t *) calloc (varinfo->ndim, sizeof (uint64_t));
+
+    uint64_t data_size = 0;
+    int rank;
+    int i = 0;
+    int retval = 0;
+
+    MPI_Comm_rank (comm, &rank);
+    srand (rank);
+
+    assert (varinfo->ndim);
+
+    npoints = 1;
+
+    // Generate the start offsets and lengths for each dimension
+    for (i = 0; i < varinfo->ndim; i ++) {
+
+        // Not really a good way to generate random numbers. But will do for
+        // now
+        starts [i] = rand () % ((varinfo->dims [i] + 1) / 2);
+        counts [i] = rand () % ((varinfo->dims [i] + 1) / 2) + 1;
+
+        npoints *= counts [i];
+
+        // printf ("[%d] %d %lld %lld\n", rank, i, starts [i], counts [i]);
+    }
+
+    sel1 = adios_selection_boundingbox (varinfo->ndim, starts, counts);
+
+    // Allocate memory for reading in the transformed data and schedule reads
+    // into the buffer
+    for (i = 0; i < ntransforms; i ++) {
+        if (find_var (f, varname_xform [i])) {
+            printf ("\n\t %s variable exists, schedule to read...", varname_xform [i]);
+            data_xform [i]    = malloc (npoints * sizeof (double));
+            adios_schedule_read (f, sel1, varname_xform [i], 0, 1, data_xform [i]);
+        } else {
+            printf ("\n\t %s variable is not in the file, skip.", varname_xform [i]);
+            data_xform [i] = NULL;
+        }
+    }
+    printf ("\n");
+
+    // Read them all at once
+    adios_perform_reads (f, 1);
+
+    data_size = npoints * sizeof (double);
+
+    // Output for each transform must match that of no transform 
+    for (i = 1; i < ntransforms; i ++) {
+        if (data_xform [i]) {
+            if (memcmp (data_xform [0], data_xform [i], data_size) != 0) {
+                printf ("\n\t %s --- Failed", varname_xform [i]);
+                retval = 1;
+            } else {          
+                printf ("\n\t %s --- OK", varname_xform [i]);
+            }
+            free (data_xform [i]);
+        }
+    }
+
+    printf ("\n");
+
+    free (data_xform [0]);
+    adios_selection_delete (sel1);
+
+    free (starts);
+    free (counts);
+
+    adios_free_varinfo (varinfo);
+    adios_read_close (f);
+    adios_read_finalize_method (ADIOS_READ_METHOD_BP);
+
+    return retval;
+}
+
+int main (int argc, char *argv [])
+{
+    char        filename [256];
+    int         rank, size, i, retval;
+    int         l1, l2, o1, o2, g1, g2;
+    MPI_Comm    comm = MPI_COMM_WORLD;
+
+    int         adios_err;
+    uint64_t    adios_groupsize, adios_totalsize;
+    int64_t     adios_handle;
+    double *t;
+
+    uint32_t timestep = 0;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+
+
+
+    strcpy (filename, "adios_transforms_read_write.bp");
+
+    adios_init ("adios_transforms.xml", comm);
+
+    o1 = rank;
+    o2 = 0;
+    l1 = 1;
+    l2 = 64;
+
+    g1 = size;
+    g2 = 64;
+
+    t = (double *) malloc (l1*l2*sizeof(double));
+
+    // Write out 'size' timesteps. During the reads each rank would read in its
+    // own timestep
+    for (timestep = 0; timestep < size; timestep ++) {
+
+        if (timestep == 0) {
+            adios_open (&adios_handle, "transform", filename, "w", comm);
+        } else {
+            adios_open (&adios_handle, "transform", filename, "a", comm);
+        }
+
+        adios_groupsize = 6 * sizeof (int) \
+                        + ntransforms * sizeof (double) * l1 * l2;
+
+        // Taken from adios_amr_write
+        for (i = 0; i < l1 * l2; i++) {
+            t[i] = timestep + o1 * g2 + o2 + (i / l2) * g2 + i % l2;
+        }
+
+        adios_group_size (adios_handle, adios_groupsize, &adios_totalsize);
+        //printf ("\t Per process group size = %lld, with metadata = %lld\n", 
+        //        adios_groupsize, adios_totalsize);
+        adios_write (adios_handle, "l1", &l1);
+        adios_write (adios_handle, "l2", &l2);
+        adios_write (adios_handle, "o1", &o1);
+        adios_write (adios_handle, "o2", &o2);
+        adios_write (adios_handle, "g1", &g1);
+        adios_write (adios_handle, "g2", &g2);
+
+        // We want to test whether the arrays written out
+        // below can recovered without corruption during reads
+        for (i = 0; i < ntransforms; i ++) {
+            adios_write (adios_handle, varname_xform [i], t);
+        }
+
+        adios_close (adios_handle);
+    }
+
+    adios_finalize (rank);
+
+    retval = read_box (filename);
+
+    MPI_Finalize ();
+
+    return retval;
+}
+
diff --git a/tests/suite/programs/connect_to_space_subset.c b/tests/suite/programs/connect_to_space_subset.c
index 5ff6aef..fcb1027 100644
--- a/tests/suite/programs/connect_to_space_subset.c
+++ b/tests/suite/programs/connect_to_space_subset.c
@@ -19,8 +19,8 @@
 #include <string.h>
 #include <errno.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/copy_subvolume.c b/tests/suite/programs/copy_subvolume.c
new file mode 100644
index 0000000..2919912
--- /dev/null
+++ b/tests/suite/programs/copy_subvolume.c
@@ -0,0 +1,275 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+#include "adios_types.h"
+#include "core/adios_subvolume.h"
+
+// Uncomment to print all data volumes (original, intermediate, and final)
+//#define VERBOSE
+
+#define SHIFT argv++; argc--;
+#define SHIFT_N(n) argv += n; argc -= n;
+
+static uint64_t prod(int ndims, uint64_t *dims) {
+    uint64_t prod = 1;
+    while (ndims) {
+        prod *= *dims;
+        ndims--;
+        dims++;
+    }
+    return prod;
+}
+
+static void fill_random(int ndims, uint64_t *dims, int *volume) {
+    int i;
+    if (ndims == 1) {
+        for (i = 0; i < *dims; i++)
+            volume[i] = rand();
+    } else {
+        uint64_t stride = prod(ndims - 1, dims + 1);
+        for (i = 0; i < *dims; i++) {
+            fill_random(ndims - 1, dims + 1, volume + stride * i);
+        }
+    }
+}
+
+static void fill(int ndims, uint64_t *dims, int *volume, int fillv) {
+    int i;
+    if (ndims == 1) {
+        for (i = 0; i < *dims; i++)
+            volume[i] = fillv;
+    } else {
+        uint64_t stride = prod(ndims - 1, dims + 1);
+        for (i = 0; i < *dims; i++) {
+            fill(ndims - 1, dims + 1, volume + stride * i, fillv);
+        }
+    }
+}
+
+static void fill_subvolume(int ndims, uint64_t *dims, int *volume, uint64_t *offsets, uint64_t *filldims, int fillv) {
+    int i;
+    if (ndims == 1) {
+        for (i = *offsets; i < *offsets + *filldims; i++)
+            volume[i] = fillv;
+    } else {
+        uint64_t stride = prod(ndims - 1, dims + 1);
+        for (i = *offsets; i < *offsets + *filldims; i++) {
+            fill_subvolume(ndims - 1, dims + 1, volume + stride * i, offsets + 1, filldims + 1, fillv);
+        }
+    }
+}
+
+static void printvolume(int ndims, uint64_t *dims, int *volume, int indent) {
+    int i, j;
+    if (ndims == 1) {
+        for (j = 0; j < indent; j++)
+            printf(" ");
+        printf("[");
+        for (i = 0; i < *dims; i++)
+            printf(" %x", volume[i]);
+        printf(" ]\n");
+    } else {
+        uint64_t stride = prod(ndims - 1, dims + 1);
+        for (j = 0; j < indent; j++)
+            printf(" ");
+        printf("[\n");
+        for (i = 0; i < *dims; i++) {
+            printvolume(ndims - 1, dims + 1, volume + stride * i, indent + 2);
+        }
+        for (j = 0; j < indent; j++)
+            printf(" ");
+        printf("]\n");
+    }
+}
+
+char *cmd;
+static void usage_and_exit() {
+    fprintf(stderr, "Usage: %s <ndims> <num volumes> <subvolume dims ...> <volume 1 dims ...> ... <volume N dims ...>\n", cmd);
+    exit(1);
+}
+
+int runtest(int argc, char **argv) {
+    int ndims, nvolumes;
+    uint64_t *subvolume_dims;
+    uint64_t *volume_dims, *volume_offsets;
+    int **volumes;
+    int *final_volume;
+    int i, j;
+
+    cmd = *argv;
+    SHIFT;
+    if (argc < 2) usage_and_exit();
+    ndims = atoi(argv[0]);
+    nvolumes = atoi(argv[1]);
+    SHIFT_N(2);
+
+    if (argc < 2 * ndims * nvolumes + ndims) usage_and_exit();
+
+#ifdef VERBOSE
+    printf("Using %d-dimensional space with %d volumes\n", ndims, nvolumes);
+#endif
+
+    subvolume_dims = malloc(ndims * sizeof(uint64_t));
+    volume_dims = malloc(nvolumes * ndims * sizeof(uint64_t));
+    volume_offsets = malloc(nvolumes * ndims * sizeof(uint64_t));
+    volumes = malloc(nvolumes * sizeof(int*));
+
+#ifdef VERBOSE
+    printf("Subvolume dimensions:");
+#endif
+    for (i = 0; i < ndims; i++) {
+        subvolume_dims[i] = atoll(argv[i]);
+#ifdef VERBOSE
+        printf(" %llu", subvolume_dims[i]);
+#endif
+    }
+#ifdef VERBOSE
+    printf("\n");
+#endif
+
+    SHIFT_N(ndims);
+
+    for (i = 0; i < nvolumes; i++) {
+#ifdef VERBOSE
+        printf("Volume %d:\n", i);
+#endif
+
+#ifdef VERBOSE
+        printf("  Dimensions:");
+#endif
+        for (j = 0; j < ndims; j++) {
+            volume_dims[i * ndims + j] = atoll(argv[j]);
+#ifdef VERBOSE
+            printf(" %llu", volume_dims[i * ndims + j]);
+#endif
+        }
+#ifdef VERBOSE
+        printf("\n");
+#endif
+        SHIFT_N(ndims);
+
+#ifdef VERBOSE
+        printf("  Offsets:");
+#endif
+        for (j = 0; j < ndims; j++) {
+            volume_offsets[i * ndims + j] = atoll(argv[j]);
+#ifdef VERBOSE
+            printf(" %llu", volume_offsets[i * ndims + j]);
+#endif
+            assert(volume_offsets[i * ndims + j] + subvolume_dims[j] <= volume_dims[i * ndims + j]);
+        }
+#ifdef VERBOSE
+        printf("\n");
+#endif
+        SHIFT_N(ndims);
+
+        volumes[i] = malloc(prod(ndims, volume_dims + i*ndims) * sizeof(int));
+        fill(ndims, volume_dims + i*ndims, volumes[i], i);
+        //printvolume(ndims, volume_dims + i*ndims, volumes[i], 0);
+    }
+
+    // final_volume = first volume, but with garbage filled into the subvolume to copy
+    final_volume = malloc(prod(ndims, volume_dims + 0*ndims) * sizeof(int));
+    memcpy(final_volume, volumes[0], prod(ndims, volume_dims + 0*ndims));
+    fill_subvolume(ndims, volume_dims + 0*ndims, final_volume, volume_offsets + 0*ndims, subvolume_dims, -1);
+
+#ifdef VERBOSE
+    printf("--- Final volume before copy:\n");
+    printvolume(ndims, volume_dims + 0*ndims, final_volume, 0);
+    printf("----------\n");
+#endif
+
+#ifdef VERBOSE
+    printf("--- Volume 0:\n");
+    printvolume(ndims, volume_dims + 0*ndims, volumes[0], 0);
+    printf("----------\n");
+#endif
+
+    for (i = 1; i < nvolumes; i++) {
+#ifdef VERBOSE
+        printf("Copying subvolume from volume %d to %d\n", i-1 + 1, i + 1);
+#endif
+        copy_subvolume(volumes[i], volumes[i-1], ndims, subvolume_dims,
+                       volume_dims + i*ndims, volume_offsets + i*ndims,
+                       volume_dims + (i-1)*ndims, volume_offsets + (i-1)*ndims,
+                       adios_integer, adios_flag_no);
+
+#ifdef VERBOSE
+        printf("--- Volume %d:\n", i);
+        printvolume(ndims, volume_dims + i*ndims, volumes[i], 0);
+        printf("----------\n");
+#endif
+    }
+
+#ifdef VERBOSE
+    printf("Copying subvolume from volume %d to replica of volume 1\n", nvolumes);
+#endif
+    copy_subvolume(final_volume, volumes[nvolumes-1], ndims, subvolume_dims,
+                   volume_dims + 0*ndims, volume_offsets + 0*ndims,
+                   volume_dims + (nvolumes-1)*ndims, volume_offsets + (nvolumes-1)*ndims,
+                   adios_integer, adios_flag_no);
+
+#ifdef VERBOSE
+    printf("--- Final volume:\n", i);
+    printvolume(ndims, volume_dims + 0*ndims, final_volume, 0);
+    printf("----------\n");
+#endif
+
+#ifdef VERBOSE
+    printf("Comparing volume 0 and its replica after copy operations...\n");
+#endif
+    int success = (memcmp(volumes[0], final_volume, prod(ndims, volume_dims + 0*ndims)) == 0);
+
+    if (success) {
+        printf("Success!\n");
+        return 0;
+    } else {
+        printf("Failed!\n");
+        return 1;
+    }
+}
+
+#include <string.h>
+int runtest_helper(const char *cmdline) {
+    int argc = 0;
+    char *argv[256];
+    char *cmdline_tmp = strdup(cmdline);
+
+    do {
+        argv[argc] = strtok(argc == 0 ? cmdline_tmp : NULL, " \t");
+    } while (argv[argc++]);
+
+    argc--;
+#ifdef VERBOSE
+    printf("argc = %d\n", argc);
+#endif
+
+    int ret = runtest(argc, argv);
+
+    free(cmdline_tmp);
+    return ret;
+}
+
+int main(int argc, char **argv) {
+    if (argc == 1) {
+        printf("Running copy_volume tests...\n");
+        printf("Test 1...\n");
+        int ret = runtest_helper(
+                "dummycmd 2 4 "	\
+                "10 10 "		\
+                "10 10 " "0 0 "	\
+                "20 20 " "5 5 "	\
+                "10 20 " "0 0 "	\
+                "20 10 " "0 0 ");
+
+        if (ret != 0)
+            return ret;
+
+        return 0;
+    } else {
+        return runtest(argc, argv);
+    }
+}
diff --git a/tests/suite/programs/hashtest.c b/tests/suite/programs/hashtest.c
new file mode 100644
index 0000000..4bdb210
--- /dev/null
+++ b/tests/suite/programs/hashtest.c
@@ -0,0 +1,152 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include "core/qhashtbl.h"
+
+/* Test the hashtable in ADIOS. 
+ * Create a hashtable of size HASHTABLE_SIZE 
+ * Generate variable paths of NPATHS*NVARS times as P<nnn>/v<mmm>
+ * Generate double type scalars for each path/var 
+ * Add them to the table
+ * Retrieve each of them and check that the value retrieved is the expected one
+ */
+
+const int HASHTABLE_SIZE = 100; // how many rows in hash table
+const int NPATHS = 650; // number of different paths tried
+const int NVARS = 100;  // number of vars per path
+
+char ** varpaths;
+char ** varnames;
+double  *  data; // npaths * nvars doubles,   pathid.nameid
+int range;
+int npaths;
+int nvars;
+
+void alloc_vars()
+{
+    int p,v;
+
+    varpaths = (char**) malloc (npaths * sizeof(char*));
+    for (p=0; p<npaths; p++) {
+        varpaths[p] = (char*) malloc (16);
+    }
+
+    varnames = (char**) malloc (nvars * sizeof(char*));
+    for (v=0; v<nvars; v++) {
+        varnames[v] = (char*) malloc (16);
+    }
+
+    /* make varpaths like p001,p002,.. */
+    int digit=1, d=10;
+    while (npaths/d > 0) {
+        d *= 10;
+        digit++;
+    }
+
+    char fmt[16];
+    sprintf (fmt, "p%%%d.%dd",digit,digit);
+    printf ("fmt=[%s]\n", fmt);
+    for (p=0; p<npaths; p++) {
+        sprintf(varpaths[p], fmt, p);
+    }
+    printf ("varpaths[0]=%s\n", varpaths[0]);
+    printf ("varpaths[%d]=%s\n", npaths-1, varpaths[npaths-1]);
+
+    /* make varnames like v001,v002,.. */
+    digit=1; d=10;
+    while (nvars/d > 0) {
+        d *= 10;
+        digit++;
+    }
+
+    sprintf (fmt, "v%%%d.%dd",digit,digit);
+    printf ("fmt=[%s]\n", fmt);
+    for (v=0; v<nvars; v++) {
+        sprintf(varnames[v], fmt, v);
+    }
+    printf ("varnames[0]=%s\n", varnames[0]);
+    printf ("varnames[%d]=%s\n", nvars-1, varnames[nvars-1]);
+
+    // make data
+    data = (double *) malloc (sizeof(double)*npaths*nvars);
+    for (p=0; p<npaths; p++) {
+        for (v=0; v<nvars; v++) {
+            data[p*nvars+v] = p + ((double)v)/d;
+            //printf ("p=%d v=%d data[%d]=%lf\n", p, v, p*nvars+v, data[p*nvars+v]);
+        }
+    }
+    printf ("data[0]=%lf\n", data[0]);
+    printf ("data[%d]=%lf\n", npaths*nvars-1, data[npaths*nvars-1]);
+}
+
+
+int dotest ()
+{
+    int v,p;
+    double *d;
+    time_t tbegin, tput, tget;
+    alloc_vars();
+    qhashtbl_t *tbl = qhashtbl(range);
+
+    /* Put all data values with path/var into hashtable */
+    printf("============== PUT DATA INTO HASHTABLE ============\n");
+    time (&tbegin);
+    for (p=0; p<npaths; p++) {
+        for (v=0; v<nvars; v++) {
+            tbl->put2(tbl, varpaths[p], varnames[v], &data[p*nvars+v]);
+        }
+    }
+    time (&tput);
+    tput = tput - tbegin;
+
+    /* Print hashtable */
+    printf("============== PRINT HASHTABLE ============\n");
+    tbl->debug(tbl,NULL,0);
+
+    /* Get each element and check value */
+    printf("============== GET DATA FROM HASHTABLE ============\n");
+    time (&tbegin);
+    for (p=npaths-1; p>=0; p--) {
+        for (v=nvars-1; v>=0; v--) {
+            d = tbl->get2(tbl, varpaths[p], varnames[v]);
+            if (d == NULL) {
+                printf ("ERROR: stored value for p=%d,v=%d not found in hash table\n",
+                        p, v);
+                return 1;
+            } else if (*d != data[p*nvars+v]) {
+                printf ("ERROR: for p=%d,v=%d, found value = %lf in hash table != "
+                        "what was put in = %lf\n",
+                        p, v, *d, data[p*nvars+v]);
+                return 2;
+            }
+
+        }
+    }
+    time (&tget);
+    tget = tget - tbegin;
+    printf("Timing: put %d elements in %d seconds, got them back in %d seconds\n",
+            npaths*nvars, tput, tget);
+
+    /* Free hashtable */
+    tbl->free(tbl);
+    return 0;
+}
+
+int main (int argc, char ** argv)
+{
+    int retval;
+    range = HASHTABLE_SIZE;
+    npaths = NPATHS;
+    nvars = NVARS;
+
+    retval = dotest();
+
+    return retval;
+}
+
diff --git a/tests/suite/programs/local_array_time.c b/tests/suite/programs/local_array_time.c
index 00e545c..2669446 100644
--- a/tests/suite/programs/local_array_time.c
+++ b/tests/suite/programs/local_array_time.c
@@ -15,10 +15,12 @@
 #include <errno.h>
 #include <time.h>
 #include <fcntl.h>
+#include <stdint.h>
+#include <mpi.h>
 
 /* ADIOS include files */
 //#include "mpi.h"
-#include "public/adios.h"
+#include "adios.h"
 
 /* ------------------ Global variables (for main.c only) ------------------ */
 // Simulation Variables
diff --git a/tests/suite/programs/many_vars.c b/tests/suite/programs/many_vars.c
index 7fd34ad..9f61c6d 100644
--- a/tests/suite/programs/many_vars.c
+++ b/tests/suite/programs/many_vars.c
@@ -19,8 +19,8 @@
 #include <string.h>
 #include <errno.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -89,13 +89,18 @@ void set_gdim()
     gdim2 = NBLOCKS*ldim2;
 }
 
+void set_offsets (int block)
+{
+    offs1 = rank*ldim1;
+    offs2 = block*ldim2;
+}
+
 void set_vars(int step, int block)
 {
     int n, i;
     int v = VALUE(rank, step, block);
 
-    offs1 = rank*ldim1;
-    offs2 = block*ldim2;
+    set_offsets(block);
 
     n = ldim1 * ldim2;
     for (i=0; i<n; i++) a2[i] = v;
@@ -172,8 +177,8 @@ int main (int argc, char ** argv)
         }
     }
 
-    //if (!err)
-    //    err = read_file (); 
+    if (!err)
+        err = read_file (); 
 
     adios_read_finalize_method (ADIOS_READ_METHOD_BP);
     adios_finalize (rank);
@@ -209,8 +214,10 @@ int write_file (int step)
     int64_t       fh;
     uint64_t       groupsize=0, totalsize;
     int           block, v, i;
+    double        tb, te;
 
     log ("Write step %d to %s\n", step, FILENAME);
+    tb = MPI_Wtime();
     adios_open (&fh, "multiblock", FILENAME, (step ? "a" : "w"), comm);
     
     groupsize  = (4 + NBLOCKS*2) * sizeof(int);             // dimensions 
@@ -239,25 +246,29 @@ int write_file (int step)
     }
 
     adios_close (fh);
+    te = MPI_Wtime();
+    if (rank==0) {
+        log ("  Write time for step %d was %6.3lf seconds\n", step, te-tb);
+    }
     MPI_Barrier (comm);
     return 0;
 }
 
-#if 0
+#if 1
 #define CHECK_VARINFO(VARNAME, NDIM, NSTEPS) \
     vi = adios_inq_var (f, VARNAME); \
     if (vi == NULL) { \
-        printE ("No such variable " VARNAME "\n"); \
+        printE ("No such variable: %s\n", VARNAME); \
         err = 101; \
         goto endread; \
     } \
     if (vi->ndim != NDIM) { \
-        printE ("Variable " VARNAME " has %d dimensions, but expected %d\n", vi->ndim, NDIM); \
+        printE ("Variable %s has %d dimensions, but expected %d\n", VARNAME, vi->ndim, NDIM); \
         err = 102; \
         goto endread; \
     } \
     if (vi->nsteps != NSTEPS) { \
-        printE ("Variable " VARNAME " has %d steps, but expected %d\n", vi->nsteps, NSTEPS); \
+        printE ("Variable %s has %d steps, but expected %d\n", VARNAME, vi->nsteps, NSTEPS); \
         err = 103; \
         /*goto endread; */\
     } \
@@ -270,10 +281,10 @@ int write_file (int step)
         /*goto endread;*/\
     }
 
-#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,i) \
+#define CHECK_ARRAY(VARNAME,A,N,VALUE,STEP,BLOCK,i) \
     for (i=0;i<N;i++) \
         if (A[i] != VALUE) { \
-            printE (#VARNAME "[%d] step %d: wrote %d but read %d\n",i,STEP,VALUE,A[i]);\
+            printE ("%s[%d] step %d block %d: wrote %d but read %d\n",VARNAME,i,STEP,BLOCK,VALUE,A[i]);\
             err = 104; \
             /*goto endread;*/\
             break; \
@@ -292,12 +303,14 @@ int read_file ()
     ADIOS_SELECTION *sel2;
     ADIOS_FILE * f;
     ADIOS_VARINFO * vi;
-    int err=0,v,v0,i,n;
-    int nsteps_a, nsteps_b, nsteps_c;
+    int err=0,v,n;
+    int block,step,var; // loop variables
     int iMacro; // loop variable in macros
+    double        tb, te, tsched;
+    double        tsb, ts; // time for just scheduling for one step/block
 
-    uint64_t start[3] = {offs1,offs2,offs3};
-    uint64_t count[3] = {ldim1,ldim2,ldim3};
+    uint64_t start[2] = {offs1,offs2};
+    uint64_t count[2] = {ldim1,ldim2};
     uint64_t ndim;
     
     reset_readvars();
@@ -309,107 +322,51 @@ int read_file ()
         return 1;
     }
 
-    sel0 = adios_selection_boundingbox (0, start, count); 
-    sel1 = adios_selection_boundingbox (1, start, count); 
-    sel2 = adios_selection_boundingbox (2, start, count); 
-    sel3 = adios_selection_boundingbox (3, start, count); 
 
     log ("  Check variable definitions... %s\n", FILENAME);
-    nsteps_a = NSTEPS / 2 + NSTEPS % 2;
-    nsteps_b = NSTEPS / 2;
-    nsteps_c = NSTEPS;
-
-    CHECK_VARINFO("a0", 0, nsteps_a)
-    CHECK_VARINFO("b0", 0, nsteps_b)
-    CHECK_VARINFO("c0", 0, nsteps_c)
-    CHECK_VARINFO("at0", 0, nsteps_a)
-    CHECK_VARINFO("bt0", 0, nsteps_b)
-    CHECK_VARINFO("ct0", 0, nsteps_c)
-    CHECK_VARINFO("a1", 1, nsteps_a)
-    CHECK_VARINFO("b1", 1, nsteps_b)
-    CHECK_VARINFO("c1", 1, nsteps_c)
-    CHECK_VARINFO("at1", 1, nsteps_a)
-    CHECK_VARINFO("bt1", 1, nsteps_b)
-    CHECK_VARINFO("ct1", 1, nsteps_c)
-    CHECK_VARINFO("a2", 2, nsteps_a)
-    CHECK_VARINFO("b2", 2, nsteps_b)
-    CHECK_VARINFO("c2", 2, nsteps_c)
-    CHECK_VARINFO("a3", 3, nsteps_a)
-    CHECK_VARINFO("b3", 3, nsteps_b)
-    CHECK_VARINFO("c3", 3, nsteps_c)
-
-    log ("  Check variables c0,ct0,c1,ct1,c2,c3, steps=%d...\n",nsteps_c);
-    for (i=0; i<nsteps_c; i++) {
-        v = VALUE(rank,i);
-        v0 = VALUE0(i);
-        log ("    Step %d value %d\n", i, v);
-
-        adios_schedule_read (f, sel0, "c0",  i, 1, &r0);
-        adios_schedule_read (f, sel0, "ct0", i, 1, &rt0);
-        adios_schedule_read (f, sel1, "c1",  i, 1, r1);
-        adios_schedule_read (f, sel1, "ct1", i, 1, rt1);
-        adios_schedule_read (f, sel2, "c2",  i, 1, r2);
-        adios_schedule_read (f, sel3, "c3",  i, 1, r3);
-        adios_perform_reads (f, 1);
-
-        CHECK_SCALAR (c0,  r0,  v0, i) // scalar is from writer rank 0, not this rank!
-        CHECK_SCALAR (ct0, rt0, v0, i) // so value is v0 at step 'i', not v
-        CHECK_ARRAY (c1,  r1,  ldim1, v, i, iMacro)
-        CHECK_ARRAY (ct1, rt1, ldim1, v, i, iMacro)
-        CHECK_ARRAY (c2,  r2,  ldim1*ldim2, v, i, iMacro)
-        CHECK_ARRAY (c3,  r3,  ldim1*ldim2*ldim3, v, i, iMacro)
-    } 
+    tb = MPI_Wtime();
+    for (var=0; var<NVARS; var++) {
+        CHECK_VARINFO(varnames[var], 2, NSTEPS)
+    }
+    MPI_Barrier (comm);
+    te = MPI_Wtime();
+    if (rank==0) {
+        log ("  Time to check all vars' info: %6.3lf seconds\n", te-tb);
+    }
 
-    log ("  Check variables a0,at0,a1,at1,a2,a3, steps=%d...\n",nsteps_a);
-    for (i=0; i<nsteps_a; i++) {
-        v = VALUE(rank,i*2);
-        v0 = VALUE0(i*2);
-        log ("    Step %d value %d\n", i, v);
-
-        adios_schedule_read (f, sel0, "a0",  i, 1, &r0);
-        adios_schedule_read (f, sel0, "at0", i, 1, &rt0);
-        adios_schedule_read (f, sel1, "a1",  i, 1, r1);
-        adios_schedule_read (f, sel1, "at1", i, 1, rt1);
-        adios_schedule_read (f, sel2, "a2",  i, 1, r2);
-        adios_schedule_read (f, sel3, "a3",  i, 1, r3);
-        adios_perform_reads (f, 1);
-
-        CHECK_SCALAR (a0,  r0,  v0, i)
-        CHECK_SCALAR (at0, rt0, v0, i)
-        CHECK_ARRAY (a1,  r1,  ldim1, v, i, iMacro)
-        CHECK_ARRAY (at1, rt1, ldim1, v, i, iMacro)
-        CHECK_ARRAY (a2,  r2,  ldim1*ldim2, v, i, iMacro)
-        CHECK_ARRAY (a3,  r3,  ldim1*ldim2*ldim3, v, i, iMacro)
+    log ("  Check variable content...\n");
+    for (step=0; step<NSTEPS; step++) {
+        tb = MPI_Wtime();
+        ts = 0;
+        for (block=0; block<NBLOCKS; block++) {
+            v = VALUE(rank,step,block);
+            set_offsets(block);
+            start[0] = offs1;
+            start[1] = offs2;
+            sel2 = adios_selection_boundingbox (2, start, count); 
+            log ("    Step %d block %d: value=%d\n", step, block, v);
+
+            tsb = MPI_Wtime();
+            for (var=0; var<NVARS; var++) {
+                adios_schedule_read (f, sel2, varnames[var], step, 1, r2);
+                //adios_perform_reads (f, 1);
+                //CHECK_ARRAY (varnames[var],  r2,  ldim1*ldim2, v, step, block, iMacro)
+            }
+            ts += MPI_Wtime() - tsb;
+            adios_perform_reads (f, 1);
+            adios_selection_delete (sel2);
+        }
+        MPI_Barrier (comm);
+        te = MPI_Wtime();
+        if (rank==0) {
+            log ("  Read time for step %d was %6.3lfs, scheduling reads was %6.3lfs\n", 
+                 step, te-tb, ts);
+        }
     } 
 
-    log ("  Check variables b0,bt0,b1,bt1,b2,b3, steps=%d...\n",nsteps_b);
-    for (i=0; i<nsteps_b; i++) {
-        v = VALUE(rank,i*2)+1;
-        v0 = VALUE0(i*2)+1;
-        log ("    Step %d value %d\n", i, v);
-
-        adios_schedule_read (f, sel0, "b0",  i, 1, &r0);
-        adios_schedule_read (f, sel0, "bt0", i, 1, &rt0);
-        adios_schedule_read (f, sel1, "b1",  i, 1, r1);
-        adios_schedule_read (f, sel1, "bt1", i, 1, rt1);
-        adios_schedule_read (f, sel2, "b2",  i, 1, r2);
-        adios_schedule_read (f, sel3, "b3",  i, 1, r3);
-        adios_perform_reads (f, 1);
-
-        CHECK_SCALAR (b0,  r0,  v0, i)
-        CHECK_SCALAR (bt0, rt0, v0, i)
-        CHECK_ARRAY (b1,  r1,  ldim1, v, i, iMacro)
-        CHECK_ARRAY (bt1, rt1, ldim1, v, i, iMacro)
-        CHECK_ARRAY (b2,  r2,  ldim1*ldim2, v, i, iMacro)
-        CHECK_ARRAY (b3,  r3,  ldim1*ldim2*ldim3, v, i, iMacro)
-    } 
 
 endread:
 
-    adios_selection_delete (sel0);
-    adios_selection_delete (sel1);
-    adios_selection_delete (sel2);
-    adios_selection_delete (sel3);
 
     adios_read_close(f);
     MPI_Barrier (comm);
diff --git a/tests/suite/programs/path_test.c b/tests/suite/programs/path_test.c
new file mode 100644
index 0000000..e36c95f
--- /dev/null
+++ b/tests/suite/programs/path_test.c
@@ -0,0 +1,332 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C test: write then read variables with different paths possible
+ *
+ * How to run: mpirun -np <N> path_test
+ * Output: path_test.bp
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+/* Variables to write */
+int   *a1, *a2, *a3, *a4, *a5, *a6, *a7;
+
+/* Variables to read */
+int   *r1, *r2, *r3, *r4, *r5, *r6, *r7;
+
+int ldim1 = 1;
+int ldim2 = 2;
+int ldim3 = 3;
+int ldim4 = 4;
+int ldim5 = 5;
+int ldim6 = 6;
+int ldim7 = 7;
+int gdim1, gdim2, gdim3, gdim4, gdim5, gdim6, gdim7;
+int offs1, offs2, offs3, offs4, offs5, offs6, offs7;
+
+MPI_Comm    comm = MPI_COMM_WORLD;
+int rank;
+int size;
+
+void init_vars()
+{
+    int i;
+    int v = rank%10;
+
+    gdim1 = size*ldim1;
+    gdim2 = size*ldim2;
+    gdim3 = size*ldim3;
+    gdim4 = size*ldim4;
+    gdim5 = size*ldim5;
+    gdim6 = size*ldim6;
+    gdim7 = size*ldim7;
+
+    offs1 = rank*ldim1;
+    offs2 = rank*ldim2;
+    offs3 = rank*ldim3;
+    offs4 = rank*ldim4;
+    offs5 = rank*ldim5;
+    offs6 = rank*ldim6;
+    offs7 = rank*ldim7;
+
+    a1 = (int*)   malloc (ldim1 * sizeof(int));
+    a2 = (int*)   malloc (ldim2 * sizeof(int));
+    a3 = (int*)   malloc (ldim3 * sizeof(int));
+    a4 = (int*)   malloc (ldim4 * sizeof(int));
+    a5 = (int*)   malloc (ldim5 * sizeof(int));
+    a6 = (int*)   malloc (ldim6 * sizeof(int));
+    a7 = (int*)   malloc (ldim7 * sizeof(int));
+    r1 = (int*)   malloc (ldim1 * sizeof(int));
+    r2 = (int*)   malloc (ldim2 * sizeof(int));
+    r3 = (int*)   malloc (ldim3 * sizeof(int));
+    r4 = (int*)   malloc (ldim4 * sizeof(int));
+    r5 = (int*)   malloc (ldim5 * sizeof(int));
+    r6 = (int*)   malloc (ldim6 * sizeof(int));
+    r7 = (int*)   malloc (ldim7 * sizeof(int));
+
+    for (i=0; i<ldim1; i++)  a1[i] = 10+v;
+    for (i=0; i<ldim2; i++)  a2[i] = 20+v;
+    for (i=0; i<ldim3; i++)  a3[i] = 30+v;
+    for (i=0; i<ldim4; i++)  a4[i] = 40+v;
+    for (i=0; i<ldim5; i++)  a5[i] = 50+v;
+    for (i=0; i<ldim6; i++)  a6[i] = 60+v;
+    for (i=0; i<ldim7; i++)  a7[i] = 70+v;
+}
+
+void fini_vars()
+{
+    free (a1);
+    free (a2);
+    free (a3);
+    free (a4);
+    free (a5);
+    free (a6);
+    free (a7);
+    free (r1);
+    free (r2);
+    free (r3);
+    free (r4);
+    free (r5);
+    free (r6);
+    free (r7);
+}
+
+
+int write_file (char *fname);
+int read_file (char *fname);
+
+int main (int argc, char ** argv) 
+{
+    int err; 
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    init_vars();
+    adios_init ("path_test.xml", comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+    if (!err)
+        err = write_file ("path_test_1.bp"); 
+    if (!err)
+        err = read_file ("path_test_1.bp"); 
+    if (!err)
+        err = write_file ("path_test_2.bp"); 
+    if (!err)
+        err = read_file ("path_test_2.bp"); 
+    adios_finalize (rank);
+    fini_vars();
+    MPI_Finalize ();
+    return err;
+}
+
+
+int write_file (char *fname) 
+{
+    int64_t       fh;
+    uint64_t       groupsize=0, totalsize;
+
+    log ("Write data to %s\n", fname);
+    adios_open (&fh, "pathtest", fname, "w", comm);
+    
+    groupsize  = 21*4;                       // dimensions 
+    groupsize += 4 * ldim1;                  // a1 integer array 
+    groupsize += 4 * ldim2;                  // a2 integer array 
+    groupsize += 4 * ldim3;                  // a3 integer array 
+    groupsize += 4 * ldim4;                  // a4 integer array 
+    groupsize += 4 * ldim5;                  // a5 integer array 
+    groupsize += 4 * ldim6;                  // a6 integer array 
+    groupsize += 4 * ldim7;                  // a7 integer array 
+
+    adios_group_size (fh, groupsize, &totalsize);
+
+    adios_write (fh, "dir1/gdim1", &gdim1);
+    adios_write (fh, "/dir1/gdim2", &gdim2);
+    adios_write (fh, "dir1/gdim3", &gdim3);
+    adios_write (fh, "/dir1/dir2/gdim4", &gdim4);
+    adios_write (fh, "/gdim5", &gdim5);
+    adios_write (fh, "gdim6", &gdim6);
+    adios_write (fh, "gdim7", &gdim7);
+    adios_write (fh, "dir1/ldim1", &ldim1);
+    adios_write (fh, "/dir1/ldim2", &ldim2);
+    adios_write (fh, "dir1/ldim3", &ldim3);
+    adios_write (fh, "/dir1/dir2/ldim4", &ldim4);
+    adios_write (fh, "/ldim5", &ldim5);
+    adios_write (fh, "ldim6", &ldim6);
+    adios_write (fh, "ldim7", &ldim7);
+    adios_write (fh, "dir1/offs1", &offs1);
+    adios_write (fh, "/dir1/offs2", &offs2);
+    adios_write (fh, "dir1/offs3", &offs3);
+    adios_write (fh, "/dir1/dir2/offs4", &offs4);
+    adios_write (fh, "/offs5", &offs5);
+    adios_write (fh, "offs6", &offs6);
+    adios_write (fh, "offs7", &offs7);
+    adios_write (fh, "dir1/a1", a1);
+    adios_write (fh, "/dir1/a2", a2);
+    adios_write (fh, "dir1/a3", a3);
+    adios_write (fh, "/dir1/dir2/a4", a4);
+    adios_write (fh, "/a5", a5);
+    adios_write (fh, "a6", a6);
+    adios_write (fh, "a7", a7);
+
+    adios_close (fh);
+    MPI_Barrier (comm);
+    return 0;
+}
+
+
+#define GET_SCALAR(VARNAME) \
+    vi = adios_inq_var (f, VARNAME); \
+    if (vi == NULL) { \
+        printE ("No such variable %s\n", VARNAME); \
+        err = 101; \
+        goto endread; \
+    } \
+
+#define CHECK_SCALAR(VARNAME,VAR,TYPE) \
+    GET_SCALAR(VARNAME) \
+    if (*(TYPE*)vi->value != VAR) { \
+        printE ("Scalar %s as read from file != as written\n", VARNAME); \
+        err = 102; \
+        goto endread; \
+    } \
+    adios_free_varinfo (vi);
+
+#define CHECK_ARRAY(A,R,LEN) \
+    for (i=0;i<LEN;i++) \
+        if (A[i] != R[i]) { \
+            printE ("Variable " #A " does not equal in written and read values at position %d\n", i);\
+            err = 103; \
+            goto endread;\
+        }
+
+void reset_rarrays()
+{
+    memset (r1, -1, ldim1*sizeof(int));
+    memset (r2, -1, ldim2*sizeof(int));
+    memset (r3, -1, ldim3*sizeof(int));
+    memset (r4, -1, ldim4*sizeof(int));
+    memset (r5, -1, ldim5*sizeof(int));
+    memset (r6, -1, ldim6*sizeof(int));
+    memset (r7, -1, ldim7*sizeof(int));
+}
+
+int read_file (char *fname)
+{
+    ADIOS_SELECTION *sel;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,i;
+
+    uint64_t start[1];
+    uint64_t count[1];
+    
+    reset_rarrays();
+
+    log ("Read and check data in %s\n", fname);
+    f = adios_read_open_file (fname, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", rank, adios_errmsg());
+        return 1;
+    }
+
+    log ("  Global dimensions... %s\n", fname);
+    CHECK_SCALAR ("dir1/gdim1",  gdim1,  int)
+    CHECK_SCALAR ("/dir1/gdim2",  gdim2,  int)
+    CHECK_SCALAR ("dir1/gdim3",  gdim3,  int)
+    CHECK_SCALAR ("/dir1/dir2/gdim4",  gdim4,  int)
+    CHECK_SCALAR ("/gdim5",  gdim5,  int)
+    CHECK_SCALAR ("gdim6",  gdim6,  int)
+    CHECK_SCALAR ("gdim7",  gdim7,  int)
+
+    log ("  Arrays... %s\n", fname);
+    log ("    a1...\n");
+    start[0] = offs1;
+    count[0] = ldim1;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "dir1/a1", 0, 1, r1);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a1, r1, ldim1)
+
+    log ("    a2...\n");
+    start[0] = offs2;
+    count[0] = ldim2;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "/dir1/a2", 0, 1, r2);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a2, r2, ldim2)
+
+    log ("    a3...\n");
+    start[0] = offs3;
+    count[0] = ldim3;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "dir1/a3", 0, 1, r3);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a3, r3, ldim3)
+
+    log ("    a4...\n");
+    start[0] = offs4;
+    count[0] = ldim4;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "/dir1/dir2/a4", 0, 1, r4);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a4, r4, ldim4)
+
+    log ("    a5...\n");
+    start[0] = offs5;
+    count[0] = ldim5;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "/a5", 0, 1, r5);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a5, r5, ldim5)
+
+    log ("    a6...\n");
+    start[0] = offs6;
+    count[0] = ldim6;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "a6", 0, 1, r6);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a6, r6, ldim6)
+
+    log ("    a7...\n");
+    start[0] = offs7;
+    count[0] = ldim7;
+    sel = adios_selection_boundingbox (1, start, count); 
+    adios_schedule_read (f, sel, "a7", 0, 1, r7);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+    CHECK_ARRAY (a7, r7, ldim7)
+
+endread:
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
diff --git a/tests/suite/programs/path_test.xml b/tests/suite/programs/path_test.xml
new file mode 100644
index 0000000..a868844
--- /dev/null
+++ b/tests/suite/programs/path_test.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+
+    <adios-group name="pathtest">
+        <!-- dimension variables (scalars) with different possible paths -->
+        <var name="gdim1" path="dir1" type="integer"/>
+        <var name="gdim2" path="/dir1" type="integer"/>
+        <var name="gdim3" path="dir1/" type="integer"/>
+        <var name="gdim4" path="/dir1/dir2" type="integer"/>
+        <var name="gdim5" path="/" type="integer"/>
+        <var name="gdim6" path="" type="integer"/>
+        <var name="gdim7" type="integer"/>
+
+        <var name="ldim1" path="dir1" type="integer"/>
+        <var name="ldim2" path="/dir1" type="integer"/>
+        <var name="ldim3" path="dir1/" type="integer"/>
+        <var name="ldim4" path="/dir1/dir2" type="integer"/>
+        <var name="ldim5" path="/" type="integer"/>
+        <var name="ldim6" path="" type="integer"/>
+        <var name="ldim7" type="integer"/>
+
+ 
+        <var name="offs1" path="dir1" type="integer"/>
+        <var name="offs2" path="/dir1" type="integer"/>
+        <var name="offs3" path="dir1/" type="integer"/>
+        <var name="offs4" path="/dir1/dir2" type="integer"/>
+        <var name="offs5" path="/" type="integer"/>
+        <var name="offs6" path="" type="integer"/>
+        <var name="offs7" type="integer"/>
+
+        <!-- 1D Arrays -->
+        <global-bounds dimensions="dir1/gdim1" offsets="dir1/offs1">
+            <var name="a1"  path="dir1" type="integer" dimensions="dir1/ldim1"/>
+        </global-bounds>
+
+        <global-bounds dimensions="/dir1/gdim2" offsets="/dir1/offs2">
+            <var name="a2"  path="/dir1" type="integer" dimensions="/dir1/ldim2"/>
+        </global-bounds>
+
+        <global-bounds dimensions="dir1/gdim3" offsets="dir1/offs3">
+            <var name="a3"  path="dir1/" type="integer" dimensions="dir1/ldim3"/>
+        </global-bounds>
+
+        <global-bounds dimensions="/dir1/dir2/gdim4" offsets="/dir1/dir2/offs4">
+            <var name="a4"  path="/dir1/dir2" type="integer" dimensions="/dir1/dir2/ldim4"/>
+        </global-bounds>
+
+        <global-bounds dimensions="/gdim5" offsets="/offs5">
+            <var name="a5"  path="/" type="integer" dimensions="/ldim5"/>
+        </global-bounds>
+
+        <global-bounds dimensions="gdim6" offsets="offs6">
+            <var name="a6"  path="" type="integer" dimensions="ldim6"/>
+        </global-bounds>
+
+        <global-bounds dimensions="gdim7" offsets="offs7">
+            <var name="a7"  path="" type="integer" dimensions="ldim7"/>
+        </global-bounds>
+
+    </adios-group>
+
+<method group="pathtest" method="MPI">verbose=4</method>
+
+<buffer size-MB="20" allocate-time="now"/>
+
+</adios-config>
+
diff --git a/tests/suite/programs/reuse_dim.c b/tests/suite/programs/reuse_dim.c
new file mode 100755
index 0000000..9e3fd23
--- /dev/null
+++ b/tests/suite/programs/reuse_dim.c
@@ -0,0 +1,209 @@
+/* 
+ * ADIOS is freely available under the terms of the BSD license described
+ * in the COPYING file in the top level directory of this source distribution.
+ *
+ * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+/* ADIOS C Example: write two arrays, using the same dim scalar with different values
+ *
+ * How to run: ./reuse_dim
+ * Output: reuse_dim.bp
+ * ADIOS config file: None
+ *
+ */
+
+/* This example will write out 2 1D arrays, and one scalar NX twice.
+ * The dimension of the arrays is NX, but with different values.
+ * This test comes from how Maya is using ADIOS to write tens of thousands
+ * of arrays (patches), but using the same scalar for dimension 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "mpi.h"
+#include "adios.h"
+#include "adios_read.h"
+
+#ifdef DMALLOC
+#include "dmalloc.h"
+#endif
+
+
+#define log(...) fprintf (stderr, "[rank=%3.3d, line %d]: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+#define printE(...) fprintf (stderr, "[rank=%3.3d, line %d]: ERROR: ", rank, __LINE__); fprintf (stderr, __VA_ARGS__); fflush(stderr);
+
+
+int         NX = 100;
+double      *t, *r1, *r2;
+
+/* ADIOS variables declarations for matching gwrite_temperature.ch */
+int64_t     m_adios_group;
+int64_t     m_adios_file;
+
+MPI_Comm    comm = MPI_COMM_WORLD;
+int rank;
+int size;
+
+
+void init_vars()
+{
+    int i;
+    t  = (double *) malloc (NX * sizeof(double));
+    r1 = (double *) malloc (NX * sizeof(double));
+    r2 = (double *) malloc (NX * sizeof(double));
+    for (i = 0; i < NX; i++)
+        t[i] = i;
+}
+
+void fini_vars()
+{
+    free (t);
+    free (r1);
+    free (r2);
+}
+
+int write_file (char *fname);
+int read_file (char *fname);
+
+int main (int argc, char ** argv)
+{
+    int err;
+
+    MPI_Init (&argc, &argv);
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &size);
+
+    init_vars();
+    adios_init_noxml (comm);
+    err = adios_read_init_method(ADIOS_READ_METHOD_BP, comm, "verbose=2");
+    if (err) {
+        printE ("%s\n", adios_errmsg());
+    }
+
+    if (!err)
+        err = declare_group ();
+    if (!err)
+        err = write_file ("reuse_dim.bp");
+    if (!err)
+        err = read_file ("reuse_dim.bp");
+
+    adios_finalize (rank);
+    fini_vars();
+    MPI_Finalize ();
+    return err;
+}
+
+
+int declare_group ()
+{
+
+    adios_allocate_buffer (ADIOS_BUFFER_ALLOC_NOW, 10);
+
+    adios_declare_group (&m_adios_group, "restart", "iter", adios_flag_yes);
+    adios_select_method (m_adios_group, "MPI", "verbose=2", "");
+
+    adios_define_var (m_adios_group, "NX"
+            ,"", adios_integer
+            ,0, 0, 0);
+
+    adios_define_var (m_adios_group, "t1"
+            ,"", adios_double
+            ,"NX", "100", "0");
+
+    adios_define_var (m_adios_group, "NX"
+            ,"", adios_integer
+            ,0, 0, 0);
+
+    adios_define_var (m_adios_group, "t2"
+            ,"", adios_double
+            ,"NX", "100", "0");
+
+    return 0;
+}
+
+
+int write_file (char *fname)
+{
+	char        filename [256];
+	int         rank, size, i, block;
+        int         adios_err;
+        uint64_t    adios_groupsize, adios_totalsize;
+        int64_t     adios_handle;
+
+	strcpy (filename, "reuse_dim.bp");
+   
+        adios_open (&m_adios_file, "restart", filename, "w", comm);
+
+        adios_groupsize = (2*sizeof(int) + 2*NX*sizeof(double));
+
+        adios_group_size (m_adios_file, adios_groupsize, &adios_totalsize);
+
+        adios_write(m_adios_file, "NX", (void *) &NX);
+        adios_write(m_adios_file, "t1", t);
+
+        adios_write(m_adios_file, "NX", (void *) &NX);
+        adios_write(m_adios_file, "t2", t);
+
+        adios_close (m_adios_file);
+
+        MPI_Barrier (comm);
+
+        return 0;
+}
+
+#define CHECK_ARRAY(A,R,n) \
+    for (i=0;i<n;i++) \
+        if (A[i] != R[i]) { \
+            printE ("Variable " #A " does not equal in written and read values at position %d\n", i);\
+            err = 103; \
+            goto endread;\
+        }
+
+void reset_rarrays()
+{
+    int i;
+    for (i = 0; i < NX; i++) {
+        r1[i] = -1;
+        r2[i] = -1;
+    }
+}
+
+
+int read_file (char *fname)
+{
+    ADIOS_SELECTION *sel;
+    ADIOS_FILE * f;
+    ADIOS_VARINFO * vi;
+    int err=0,i,n;
+
+    uint64_t start[1] = {0};
+    uint64_t count[2] = {NX};
+    uint64_t ndim;
+
+    reset_rarrays();
+
+    log ("Read and check data in %s\n", fname);
+    f = adios_read_open_file (fname, ADIOS_READ_METHOD_BP, comm);
+    if (f == NULL) {
+        printE ("Error at opening file: %s\n", rank, adios_errmsg());
+        return 1;
+    }
+
+    sel = adios_selection_boundingbox (1, start, count);
+    adios_schedule_read (f, sel, "t1", 0, 1, r1);
+    adios_schedule_read (f, sel, "t2", 0, 1, r2);
+    adios_perform_reads (f, 1);
+    adios_selection_delete (sel);
+
+    CHECK_ARRAY (t, r1, NX);
+    CHECK_ARRAY (t, r2, NX);
+
+endread:
+    adios_read_close(f);
+    MPI_Barrier (comm);
+    return err;
+}
+
diff --git a/tests/suite/programs/selections.c b/tests/suite/programs/selections.c
index a1bcac7..187e476 100644
--- a/tests/suite/programs/selections.c
+++ b/tests/suite/programs/selections.c
@@ -19,8 +19,8 @@
 #include <string.h>
 #include <errno.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/transforms.xml b/tests/suite/programs/transforms.xml
new file mode 100644
index 0000000..0add026
--- /dev/null
+++ b/tests/suite/programs/transforms.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<adios-config host-language="C">
+    <adios-group name="transforms" coordination-communicator="comm" stats="Off" time-index="iter">
+        <global-bounds dimensions="1048576" offsets="0">
+            <var name="rawdouble" gwrite="rd" type="double" dimensions="iter,1048576"/>
+            <var name="transformdouble" gwrite="td" type="double" dimensions="iter,1048576" transform="identity"/>
+        </global-bounds>
+    </adios-group>
+    <method group="transforms" method="MPI"></method>
+    <buffer size-MB="100" allocate-time="now"/>
+</adios-config>
+
diff --git a/tests/suite/programs/transforms_specparse.c b/tests/suite/programs/transforms_specparse.c
new file mode 100644
index 0000000..2e68cd7
--- /dev/null
+++ b/tests/suite/programs/transforms_specparse.c
@@ -0,0 +1,165 @@
+/*
+ * transforms_specparse.c
+ *
+ * Tests the "specparse" functionality, which parses the string passed as transform="..." into
+ * the transform ID and a list of key-value pairs.
+ *
+ *  Created on: Jul 25, 2013
+ *      Author: David A. Boyuka II
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include "core/transforms/adios_transforms_specparse.h"
+
+struct specparse_test {
+    const char *specstr;
+    struct adios_transform_spec expected;
+} TESTS[4];
+#if 0
+struct specparse_test {
+    const char *specstr;
+    struct adios_transform_spec expected;
+} TESTS[] = {
+    {   .specstr = "identity:a=123,b,c=321,,,f=12321",
+        .expected = {
+            .transform_type     = adios_transform_identity,
+            .transform_type_str = "identity",
+            .param_count        = 6,
+            .params             = (struct adios_transform_spec_kv_pair *) {
+                (struct adios_transform_spec_kv_pair){ .key = "a", .value = "123"  },
+                (struct adios_transform_spec_kv_pair){ .key = "b", .value = NULL   },
+                (struct adios_transform_spec_kv_pair){ .key = "c", .value = "321"  },
+                (struct adios_transform_spec_kv_pair){ .key = "",  .value = NULL   },
+                (struct adios_transform_spec_kv_pair){ .key = "",  .value = NULL   },
+                (struct adios_transform_spec_kv_pair){ .key = "f", .value = "12321"},
+            }
+        }
+    },
+    {   .specstr = "identity",
+        .expected = {
+            .transform_type     = adios_transform_identity,
+            .transform_type_str = "identity",
+            .param_count        = 0,
+            .params             = NULL
+        }
+    },
+    {   .specstr = "none:a=123,b,c=321,,,f=12321",
+        .expected = {
+            .transform_type     = adios_transform_none,
+            .transform_type_str = "none",
+            .param_count        = 0,
+            .params             = NULL
+        }
+    },
+// Commented this test out since aliasing "raw" to the "none" transform is currently disabled
+//    {   .specstr = "raw:a=123,b,c=321,,,f=12321",
+//        .expected = {
+//            .transform_type     = adios_transform_none,
+//            .transform_type_str = "raw",
+//            .param_count        = 0,
+//            .params             = NULL
+//        }
+//    },
+    {   .specstr = "***impossible-transform-name***:a=123,b,c=321,,,f=12321",
+        .expected = {
+            .transform_type     = adios_transform_unknown,
+            .transform_type_str = "***impossible-transform-name***",
+            .param_count        = 0,
+            .params             = NULL
+        }
+    },
+};
+#endif
+const int NUM_TESTS = sizeof(TESTS)/sizeof(TESTS[0]);
+
+void run_test(struct specparse_test *test) {
+    const struct adios_transform_spec *actual = adios_transform_parse_spec(test->specstr);
+    const struct adios_transform_spec *expected = &test->expected;
+
+    // Check transform type ID
+    assert(actual->transform_type == expected->transform_type);
+
+    // Check transform type string
+    assert(actual->transform_type_str && expected->transform_type_str);
+    assert(strcmp(actual->transform_type_str, expected->transform_type_str) == 0);
+
+    // Check parameter count, and ensure parameter list exists for both or neither
+    assert(actual->param_count == expected->param_count);
+    assert((actual->params != NULL) == (expected->params != NULL));
+
+    // If there is a parameter list, check it
+    if (expected->params) {
+        int i;
+        for (i = 0; i < expected->param_count; i++) {
+            const struct adios_transform_spec_kv_pair *actual_p = &actual->params[i];
+            const struct adios_transform_spec_kv_pair *expected_p = &expected->params[i];
+
+            // Check that the keys are non-NULL and match
+            assert(actual_p->key && expected_p->key);
+            assert(strcmp(actual_p->key, expected_p->key) == 0);
+
+            // Check that values are either both or neither present, and if the former, that they match
+            assert((actual_p->value != NULL) == (expected_p->value != NULL));
+            if (expected_p->value != NULL)
+                assert(strcmp(actual_p->value, expected_p->value) == 0);
+        }
+    }
+
+    adios_transform_free_spec(&actual);
+}
+
+void init_tests() {
+    TESTS[0].specstr = strdup ("identity:a=123,b,c=321,,,f=12321");
+    TESTS[0].expected.transform_type = adios_transform_identity;
+    TESTS[0].expected.transform_type_str = "identity";
+    TESTS[0].expected.param_count = 6;
+    TESTS[0].expected.params = (struct adios_transform_spec_kv_pair *)
+                  malloc (sizeof (struct adios_transform_spec_kv_pair) * 6);
+    TESTS[0].expected.params[0].key = strdup ("a");
+    TESTS[0].expected.params[0].value = strdup ("123");
+    TESTS[0].expected.params[1].key = strdup ("b");
+    TESTS[0].expected.params[1].value = NULL;
+    TESTS[0].expected.params[2].key = strdup ("c");
+    TESTS[0].expected.params[2].value = strdup ("321");
+    TESTS[0].expected.params[3].key = strdup ("");
+    TESTS[0].expected.params[3].value = NULL;
+    TESTS[0].expected.params[4].key = strdup ("");
+    TESTS[0].expected.params[4].value = NULL;
+    TESTS[0].expected.params[5].key = strdup ("f");
+    TESTS[0].expected.params[5].value = strdup ("12321");
+
+    TESTS[1].specstr = strdup ("identity");
+    TESTS[1].expected.transform_type = adios_transform_identity;
+    TESTS[1].expected.transform_type_str = "identity";
+    TESTS[1].expected.param_count = 0;
+    TESTS[1].expected.params = NULL;
+
+    TESTS[2].specstr = strdup ("none:a=123,b,c=321,,,f=12321");
+    TESTS[2].expected.transform_type = adios_transform_none;
+    TESTS[2].expected.transform_type_str = "none";
+    TESTS[2].expected.param_count = 0;
+    TESTS[2].expected.params = NULL;
+
+    TESTS[3].specstr = strdup ("***impossible-transform-name***:a=123,b,c=321,,,f=12321");
+    TESTS[3].expected.transform_type = adios_transform_unknown;
+    TESTS[3].expected.transform_type_str = "***impossible-transform-name***";
+    TESTS[3].expected.param_count = 0;
+    TESTS[3].expected.params = NULL;
+}
+
+void run_tests() {
+    int i;
+    for (i = 0; i < NUM_TESTS; i++) {
+        run_test(&TESTS[i]);
+    }
+}
+
+int main(int argc, char **argv) {
+
+    init_tests();
+    run_tests();
+
+    return 0;
+}
diff --git a/tests/suite/programs/two_groups.c b/tests/suite/programs/two_groups.c
index d4de632..9a91896 100644
--- a/tests/suite/programs/two_groups.c
+++ b/tests/suite/programs/two_groups.c
@@ -18,8 +18,8 @@
 #include <stdint.h>
 #include <string.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/write_alternate.c b/tests/suite/programs/write_alternate.c
index 5bc851a..851105a 100644
--- a/tests/suite/programs/write_alternate.c
+++ b/tests/suite/programs/write_alternate.c
@@ -18,8 +18,8 @@
 #include <stdint.h>
 #include <string.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
diff --git a/tests/suite/programs/write_alternate.xml b/tests/suite/programs/write_alternate.xml
index bdad58b..f7a21f5 100644
--- a/tests/suite/programs/write_alternate.xml
+++ b/tests/suite/programs/write_alternate.xml
@@ -3,15 +3,15 @@
 
     <adios-group name="abc" coordination-communicator="comm" time-index="tidx">
         <!-- dimension variables (scalars) -->
-        <var name="gdim1" path="/dimensions" type="integer"/>
-        <var name="gdim2" path="/dimensions" type="integer"/>
-        <var name="gdim3" path="/dimensions" type="integer"/>
-        <var name="ldim1" path="/dimensions" type="integer"/>
-        <var name="ldim2" path="/dimensions" type="integer"/>
-        <var name="ldim3" path="/dimensions" type="integer"/>
-        <var name="offs1" path="/dimensions" type="integer"/>
-        <var name="offs2" path="/dimensions" type="integer"/>
-        <var name="offs3" path="/dimensions" type="integer"/>
+        <var name="gdim1" type="integer"/>
+        <var name="gdim2" type="integer"/>
+        <var name="gdim3" type="integer"/>
+        <var name="ldim1" type="integer"/>
+        <var name="ldim2" type="integer"/>
+        <var name="ldim3" type="integer"/>
+        <var name="offs1" type="integer"/>
+        <var name="offs2" type="integer"/>
+        <var name="offs3" type="integer"/>
 
         <!-- Scalars -->
         <var name="a0"  type="integer"/>
diff --git a/tests/suite/programs/write_read.c b/tests/suite/programs/write_read.c
index d98469e..cd191f4 100644
--- a/tests/suite/programs/write_read.c
+++ b/tests/suite/programs/write_read.c
@@ -16,8 +16,8 @@
 #include <stdint.h>
 #include <string.h>
 #include "mpi.h"
-#include "public/adios.h"
-#include "public/adios_read.h"
+#include "adios.h"
+#include "adios_read.h"
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -460,67 +460,67 @@ int write_file (char *fname)
     adios_write (fh, "offs4", &offs4);
     adios_write (fh, "offs5", &offs5);
     adios_write (fh, "offs6", &offs6);
-    adios_write (fh, "scalar_byte", &scalar_byte);
-    adios_write (fh, "scalar_short", &scalar_short);
-    adios_write (fh, "scalar_int", &scalar_int);
-    adios_write (fh, "scalar_long", &scalar_long);
-    adios_write (fh, "scalar_ubyte", &scalar_ubyte);
-    adios_write (fh, "scalar_ushort", &scalar_ushort);
-    adios_write (fh, "scalar_uint", &scalar_uint);
-    adios_write (fh, "scalar_ulong", &scalar_ulong);
-    adios_write (fh, "scalar_float", &scalar_float);
-    adios_write (fh, "scalar_double", &scalar_double);
-    adios_write (fh, "scalar_string", scalar_string);
-    adios_write (fh, "scalar_complex", &scalar_complex);
-    adios_write (fh, "scalar_double_complex", &scalar_double_complex);
-    adios_write (fh, "a1_byte", a1_byte);
-    adios_write (fh, "a1_short", a1_short);
-    adios_write (fh, "a1_int", a1_int);
-    adios_write (fh, "a1_long", a1_long);
-    adios_write (fh, "a1_ubyte", a1_ubyte);
-    adios_write (fh, "a1_ushort", a1_ushort);
-    adios_write (fh, "a1_uint", a1_uint);
-    adios_write (fh, "a1_ulong", a1_ulong);
-    adios_write (fh, "a1_float", a1_float);
-    adios_write (fh, "a1_double", a1_double);
-    adios_write (fh, "a1_complex", a1_complex);
-    adios_write (fh, "a1_double_complex", a1_double_complex);
-    adios_write (fh, "a2_byte", a2_byte);
-    adios_write (fh, "a2_short", a2_short);
-    adios_write (fh, "a2_int", a2_int);
-    adios_write (fh, "a2_long", a2_long);
-    adios_write (fh, "a2_ubyte", a2_ubyte);
-    adios_write (fh, "a2_ushort", a2_ushort);
-    adios_write (fh, "a2_uint", a2_uint);
-    adios_write (fh, "a2_ulong", a2_ulong);
-    adios_write (fh, "a2_float", a2_float);
-    adios_write (fh, "a2_double", a2_double);
-    adios_write (fh, "a2_complex", a2_complex);
-    adios_write (fh, "a2_double_complex", a2_double_complex);
-    adios_write (fh, "a3_byte", a3_byte);
-    adios_write (fh, "a3_short", a3_short);
-    adios_write (fh, "a3_int", a3_int);
-    adios_write (fh, "a3_long", a3_long);
-    adios_write (fh, "a3_ubyte", a3_ubyte);
-    adios_write (fh, "a3_ushort", a3_ushort);
-    adios_write (fh, "a3_uint", a3_uint);
-    adios_write (fh, "a3_ulong", a3_ulong);
-    adios_write (fh, "a3_float", a3_float);
-    adios_write (fh, "a3_double", a3_double);
-    adios_write (fh, "a3_complex", a3_complex);
-    adios_write (fh, "a3_double_complex", a3_double_complex);
-    adios_write (fh, "a6_byte", a6_byte);
-    adios_write (fh, "a6_short", a6_short);
-    adios_write (fh, "a6_int", a6_int);
-    adios_write (fh, "a6_long", a6_long);
-    adios_write (fh, "a6_ubyte", a6_ubyte);
-    adios_write (fh, "a6_ushort", a6_ushort);
-    adios_write (fh, "a6_uint", a6_uint);
-    adios_write (fh, "a6_ulong", a6_ulong);
-    adios_write (fh, "a6_float", a6_float);
-    adios_write (fh, "a6_double", a6_double);
-    adios_write (fh, "a6_complex", a6_complex);
-    adios_write (fh, "a6_double_complex", a6_double_complex);
+    adios_write (fh, "/scalars/scalar_byte", &scalar_byte);
+    adios_write (fh, "/scalars/scalar_short", &scalar_short);
+    adios_write (fh, "/scalars/scalar_int", &scalar_int);
+    adios_write (fh, "/scalars/scalar_long", &scalar_long);
+    adios_write (fh, "/scalars/scalar_ubyte", &scalar_ubyte);
+    adios_write (fh, "/scalars/scalar_ushort", &scalar_ushort);
+    adios_write (fh, "/scalars/scalar_uint", &scalar_uint);
+    adios_write (fh, "/scalars/scalar_ulong", &scalar_ulong);
+    adios_write (fh, "/scalars/scalar_float", &scalar_float);
+    adios_write (fh, "/scalars/scalar_double", &scalar_double);
+    adios_write (fh, "/scalars/scalar_string", scalar_string);
+    adios_write (fh, "/scalars/scalar_complex", &scalar_complex);
+    adios_write (fh, "/scalars/scalar_double_complex", &scalar_double_complex);
+    adios_write (fh, "/1D/a1_byte", a1_byte);
+    adios_write (fh, "/1D/a1_short", a1_short);
+    adios_write (fh, "/1D/a1_int", a1_int);
+    adios_write (fh, "/1D/a1_long", a1_long);
+    adios_write (fh, "/1D/a1_ubyte", a1_ubyte);
+    adios_write (fh, "/1D/a1_ushort", a1_ushort);
+    adios_write (fh, "/1D/a1_uint", a1_uint);
+    adios_write (fh, "/1D/a1_ulong", a1_ulong);
+    adios_write (fh, "/1D/a1_float", a1_float);
+    adios_write (fh, "/1D/a1_double", a1_double);
+    adios_write (fh, "/1D/a1_complex", a1_complex);
+    adios_write (fh, "/1D/a1_double_complex", a1_double_complex);
+    adios_write (fh, "/2D/a2_byte", a2_byte);
+    adios_write (fh, "/2D/a2_short", a2_short);
+    adios_write (fh, "/2D/a2_int", a2_int);
+    adios_write (fh, "/2D/a2_long", a2_long);
+    adios_write (fh, "/2D/a2_ubyte", a2_ubyte);
+    adios_write (fh, "/2D/a2_ushort", a2_ushort);
+    adios_write (fh, "/2D/a2_uint", a2_uint);
+    adios_write (fh, "/2D/a2_ulong", a2_ulong);
+    adios_write (fh, "/2D/a2_float", a2_float);
+    adios_write (fh, "/2D/a2_double", a2_double);
+    adios_write (fh, "/2D/a2_complex", a2_complex);
+    adios_write (fh, "/2D/a2_double_complex", a2_double_complex);
+    adios_write (fh, "/3D/a3_byte", a3_byte);
+    adios_write (fh, "/3D/a3_short", a3_short);
+    adios_write (fh, "/3D/a3_int", a3_int);
+    adios_write (fh, "/3D/a3_long", a3_long);
+    adios_write (fh, "/3D/a3_ubyte", a3_ubyte);
+    adios_write (fh, "/3D/a3_ushort", a3_ushort);
+    adios_write (fh, "/3D/a3_uint", a3_uint);
+    adios_write (fh, "/3D/a3_ulong", a3_ulong);
+    adios_write (fh, "/3D/a3_float", a3_float);
+    adios_write (fh, "/3D/a3_double", a3_double);
+    adios_write (fh, "/3D/a3_complex", a3_complex);
+    adios_write (fh, "/3D/a3_double_complex", a3_double_complex);
+    adios_write (fh, "/6D/a6_byte", a6_byte);
+    adios_write (fh, "/6D/a6_short", a6_short);
+    adios_write (fh, "/6D/a6_int", a6_int);
+    adios_write (fh, "/6D/a6_long", a6_long);
+    adios_write (fh, "/6D/a6_ubyte", a6_ubyte);
+    adios_write (fh, "/6D/a6_ushort", a6_ushort);
+    adios_write (fh, "/6D/a6_uint", a6_uint);
+    adios_write (fh, "/6D/a6_ulong", a6_ulong);
+    adios_write (fh, "/6D/a6_float", a6_float);
+    adios_write (fh, "/6D/a6_double", a6_double);
+    adios_write (fh, "/6D/a6_complex", a6_complex);
+    adios_write (fh, "/6D/a6_double_complex", a6_double_complex);
 
     adios_close (fh);
     MPI_Barrier (comm);
@@ -673,18 +673,18 @@ int read_file (char *fname)
     log ("  1D arrays... %s\n", fname);
     n = ldim1;
     sel = adios_selection_boundingbox (1, start, count); 
-    adios_schedule_read (f, sel, "1D/a1_byte", 0, 1, r1_byte);
-    adios_schedule_read (f, sel, "1D/a1_short", 0, 1, r1_short);
-    adios_schedule_read (f, sel, "1D/a1_int", 0, 1, r1_int);
-    adios_schedule_read (f, sel, "1D/a1_long", 0, 1, r1_long);
-    adios_schedule_read (f, sel, "1D/a1_ubyte", 0, 1, r1_ubyte);
-    adios_schedule_read (f, sel, "1D/a1_ushort", 0, 1, r1_ushort);
-    adios_schedule_read (f, sel, "1D/a1_uint", 0, 1, r1_uint);
-    adios_schedule_read (f, sel, "1D/a1_ulong", 0, 1, r1_ulong);
-    adios_schedule_read (f, sel, "1D/a1_float", 0, 1, r1_float);
-    adios_schedule_read (f, sel, "1D/a1_double", 0, 1, r1_double);
-    adios_schedule_read (f, sel, "1D/a1_complex", 0, 1, r1_complex);
-    adios_schedule_read (f, sel, "1D/a1_double_complex", 0, 1, r1_double_complex);
+    adios_schedule_read (f, sel, "/1D/a1_byte", 0, 1, r1_byte);
+    adios_schedule_read (f, sel, "/1D/a1_short", 0, 1, r1_short);
+    adios_schedule_read (f, sel, "/1D/a1_int", 0, 1, r1_int);
+    adios_schedule_read (f, sel, "/1D/a1_long", 0, 1, r1_long);
+    adios_schedule_read (f, sel, "/1D/a1_ubyte", 0, 1, r1_ubyte);
+    adios_schedule_read (f, sel, "/1D/a1_ushort", 0, 1, r1_ushort);
+    adios_schedule_read (f, sel, "/1D/a1_uint", 0, 1, r1_uint);
+    adios_schedule_read (f, sel, "/1D/a1_ulong", 0, 1, r1_ulong);
+    adios_schedule_read (f, sel, "/1D/a1_float", 0, 1, r1_float);
+    adios_schedule_read (f, sel, "/1D/a1_double", 0, 1, r1_double);
+    adios_schedule_read (f, sel, "/1D/a1_complex", 0, 1, r1_complex);
+    adios_schedule_read (f, sel, "/1D/a1_double_complex", 0, 1, r1_double_complex);
     adios_perform_reads (f, 1);
     adios_selection_delete (sel);
 
@@ -716,18 +716,18 @@ int read_file (char *fname)
     log ("  2D arrays... %s\n", fname);
     n = ldim1 * ldim2;
     sel = adios_selection_boundingbox (2, start, count); 
-    adios_schedule_read (f, sel, "2D/a2_byte", 0, 1, r2_byte);
-    adios_schedule_read (f, sel, "2D/a2_short", 0, 1, r2_short);
-    adios_schedule_read (f, sel, "2D/a2_int", 0, 1, r2_int);
-    adios_schedule_read (f, sel, "2D/a2_long", 0, 1, r2_long);
-    adios_schedule_read (f, sel, "2D/a2_ubyte", 0, 1, r2_ubyte);
-    adios_schedule_read (f, sel, "2D/a2_ushort", 0, 1, r2_ushort);
-    adios_schedule_read (f, sel, "2D/a2_uint", 0, 1, r2_uint);
-    adios_schedule_read (f, sel, "2D/a2_ulong", 0, 1, r2_ulong);
-    adios_schedule_read (f, sel, "2D/a2_float", 0, 1, r2_float);
-    adios_schedule_read (f, sel, "2D/a2_double", 0, 1, r2_double);
-    adios_schedule_read (f, sel, "2D/a2_complex", 0, 1, r2_complex);
-    adios_schedule_read (f, sel, "2D/a2_double_complex", 0, 1, r2_double_complex);
+    adios_schedule_read (f, sel, "/2D/a2_byte", 0, 1, r2_byte);
+    adios_schedule_read (f, sel, "/2D/a2_short", 0, 1, r2_short);
+    adios_schedule_read (f, sel, "/2D/a2_int", 0, 1, r2_int);
+    adios_schedule_read (f, sel, "/2D/a2_long", 0, 1, r2_long);
+    adios_schedule_read (f, sel, "/2D/a2_ubyte", 0, 1, r2_ubyte);
+    adios_schedule_read (f, sel, "/2D/a2_ushort", 0, 1, r2_ushort);
+    adios_schedule_read (f, sel, "/2D/a2_uint", 0, 1, r2_uint);
+    adios_schedule_read (f, sel, "/2D/a2_ulong", 0, 1, r2_ulong);
+    adios_schedule_read (f, sel, "/2D/a2_float", 0, 1, r2_float);
+    adios_schedule_read (f, sel, "/2D/a2_double", 0, 1, r2_double);
+    adios_schedule_read (f, sel, "/2D/a2_complex", 0, 1, r2_complex);
+    adios_schedule_read (f, sel, "/2D/a2_double_complex", 0, 1, r2_double_complex);
     adios_perform_reads (f, 1);
     adios_selection_delete (sel);
 
@@ -760,18 +760,18 @@ int read_file (char *fname)
     log ("  3D arrays... %s\n", fname);
     n = ldim1 * ldim2 * ldim3;
     sel = adios_selection_boundingbox (3, start, count); 
-    adios_schedule_read (f, sel, "3D/a3_byte", 0, 1, r3_byte);
-    adios_schedule_read (f, sel, "3D/a3_short", 0, 1, r3_short);
-    adios_schedule_read (f, sel, "3D/a3_int", 0, 1, r3_int);
-    adios_schedule_read (f, sel, "3D/a3_long", 0, 1, r3_long);
-    adios_schedule_read (f, sel, "3D/a3_ubyte", 0, 1, r3_ubyte);
-    adios_schedule_read (f, sel, "3D/a3_ushort", 0, 1, r3_ushort);
-    adios_schedule_read (f, sel, "3D/a3_uint", 0, 1, r3_uint);
-    adios_schedule_read (f, sel, "3D/a3_ulong", 0, 1, r3_ulong);
-    adios_schedule_read (f, sel, "3D/a3_float", 0, 1, r3_float);
-    adios_schedule_read (f, sel, "3D/a3_double", 0, 1, r3_double);
-    adios_schedule_read (f, sel, "3D/a3_complex", 0, 1, r3_complex);
-    adios_schedule_read (f, sel, "3D/a3_double_complex", 0, 1, r3_double_complex);
+    adios_schedule_read (f, sel, "/3D/a3_byte", 0, 1, r3_byte);
+    adios_schedule_read (f, sel, "/3D/a3_short", 0, 1, r3_short);
+    adios_schedule_read (f, sel, "/3D/a3_int", 0, 1, r3_int);
+    adios_schedule_read (f, sel, "/3D/a3_long", 0, 1, r3_long);
+    adios_schedule_read (f, sel, "/3D/a3_ubyte", 0, 1, r3_ubyte);
+    adios_schedule_read (f, sel, "/3D/a3_ushort", 0, 1, r3_ushort);
+    adios_schedule_read (f, sel, "/3D/a3_uint", 0, 1, r3_uint);
+    adios_schedule_read (f, sel, "/3D/a3_ulong", 0, 1, r3_ulong);
+    adios_schedule_read (f, sel, "/3D/a3_float", 0, 1, r3_float);
+    adios_schedule_read (f, sel, "/3D/a3_double", 0, 1, r3_double);
+    adios_schedule_read (f, sel, "/3D/a3_complex", 0, 1, r3_complex);
+    adios_schedule_read (f, sel, "/3D/a3_double_complex", 0, 1, r3_double_complex);
     adios_perform_reads (f, 1);
     adios_selection_delete (sel);
 
@@ -804,18 +804,18 @@ int read_file (char *fname)
     log ("  6D arrays... %s\n", fname);
     n = ldim1 * ldim2 * ldim3 * ldim4 * ldim5 * ldim6;
     sel = adios_selection_boundingbox (6, start, count); 
-    adios_schedule_read (f, sel, "6D/a6_byte", 0, 1, r6_byte);
-    adios_schedule_read (f, sel, "6D/a6_short", 0, 1, r6_short);
-    adios_schedule_read (f, sel, "6D/a6_int", 0, 1, r6_int);
-    adios_schedule_read (f, sel, "6D/a6_long", 0, 1, r6_long);
-    adios_schedule_read (f, sel, "6D/a6_ubyte", 0, 1, r6_ubyte);
-    adios_schedule_read (f, sel, "6D/a6_ushort", 0, 1, r6_ushort);
-    adios_schedule_read (f, sel, "6D/a6_uint", 0, 1, r6_uint);
-    adios_schedule_read (f, sel, "6D/a6_ulong", 0, 1, r6_ulong);
-    adios_schedule_read (f, sel, "6D/a6_float", 0, 1, r6_float);
-    adios_schedule_read (f, sel, "6D/a6_double", 0, 1, r6_double);
-    adios_schedule_read (f, sel, "6D/a6_complex", 0, 1, r6_complex);
-    adios_schedule_read (f, sel, "6D/a6_double_complex", 0, 1, r6_double_complex);
+    adios_schedule_read (f, sel, "/6D/a6_byte", 0, 1, r6_byte);
+    adios_schedule_read (f, sel, "/6D/a6_short", 0, 1, r6_short);
+    adios_schedule_read (f, sel, "/6D/a6_int", 0, 1, r6_int);
+    adios_schedule_read (f, sel, "/6D/a6_long", 0, 1, r6_long);
+    adios_schedule_read (f, sel, "/6D/a6_ubyte", 0, 1, r6_ubyte);
+    adios_schedule_read (f, sel, "/6D/a6_ushort", 0, 1, r6_ushort);
+    adios_schedule_read (f, sel, "/6D/a6_uint", 0, 1, r6_uint);
+    adios_schedule_read (f, sel, "/6D/a6_ulong", 0, 1, r6_ulong);
+    adios_schedule_read (f, sel, "/6D/a6_float", 0, 1, r6_float);
+    adios_schedule_read (f, sel, "/6D/a6_double", 0, 1, r6_double);
+    adios_schedule_read (f, sel, "/6D/a6_complex", 0, 1, r6_complex);
+    adios_schedule_read (f, sel, "/6D/a6_double_complex", 0, 1, r6_double_complex);
     adios_perform_reads (f, 1);
     adios_selection_delete (sel);
 
diff --git a/tests/suite/programs/write_read.xml b/tests/suite/programs/write_read.xml
index e1a11ed..e23adb4 100644
--- a/tests/suite/programs/write_read.xml
+++ b/tests/suite/programs/write_read.xml
@@ -3,24 +3,24 @@
 
     <adios-group name="alltypes" coordination-communicator="comm">
         <!-- dimension variables (scalars) -->
-        <var name="gdim1" path="/dimensions" type="integer"/>
-        <var name="gdim2" path="/dimensions" type="integer"/>
-        <var name="gdim3" path="/dimensions" type="integer"/>
-        <var name="gdim4" path="/dimensions" type="integer"/>
-        <var name="gdim5" path="/dimensions" type="integer"/>
-        <var name="gdim6" path="/dimensions" type="integer"/>
-        <var name="ldim1" path="/dimensions" type="integer"/>
-        <var name="ldim2" path="/dimensions" type="integer"/>
-        <var name="ldim3" path="/dimensions" type="integer"/>
-        <var name="ldim4" path="/dimensions" type="integer"/>
-        <var name="ldim5" path="/dimensions" type="integer"/>
-        <var name="ldim6" path="/dimensions" type="integer"/>
-        <var name="offs1" path="/dimensions" type="integer"/>
-        <var name="offs2" path="/dimensions" type="integer"/>
-        <var name="offs3" path="/dimensions" type="integer"/>
-        <var name="offs4" path="/dimensions" type="integer"/>
-        <var name="offs5" path="/dimensions" type="integer"/>
-        <var name="offs6" path="/dimensions" type="integer"/>
+        <var name="gdim1" type="integer"/>
+        <var name="gdim2" type="integer"/>
+        <var name="gdim3" type="integer"/>
+        <var name="gdim4" type="integer"/>
+        <var name="gdim5" type="integer"/>
+        <var name="gdim6" type="integer"/>
+        <var name="ldim1" type="integer"/>
+        <var name="ldim2" type="integer"/>
+        <var name="ldim3" type="integer"/>
+        <var name="ldim4" type="integer"/>
+        <var name="ldim5" type="integer"/>
+        <var name="ldim6" type="integer"/>
+        <var name="offs1" type="integer"/>
+        <var name="offs2" type="integer"/>
+        <var name="offs3" type="integer"/>
+        <var name="offs4" type="integer"/>
+        <var name="offs5" type="integer"/>
+        <var name="offs6" type="integer"/>
 
         <!-- Scalars -->
         <var name="scalar_byte"            path="/scalars" type="byte"/>
diff --git a/tests/suite/reference/arrays_bpls.txt b/tests/suite/reference/arrays_bpls.txt
index 5f22fa3..f1c5157 100644
--- a/tests/suite/reference/arrays_bpls.txt
+++ b/tests/suite/reference/arrays_bpls.txt
@@ -2,12 +2,12 @@ File info:
   of groups:     1
   of variables:  4
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     43 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  integer  /NX                  scalar = 10 
-  integer  /NY                  scalar = 100 
-  double   /var_double_2Darray  {10, 100} = 0 / 49.99 / 24.995 / 14.4338 
-  integer  /var_int_1Darray     {10} = 0 / 49 / 24.5 / 14.4309 
+  integer  NX                  scalar = 10 
+  integer  NY                  scalar = 100 
+  double   var_double_2Darray  {10, 100} = 0 / 49.99 / 24.995 / 14.4338 
+  integer  var_int_1Darray     {10} = 0 / 49 / 24.5 / 14.4309 
diff --git a/tests/suite/reference/attributes_bpls.txt b/tests/suite/reference/attributes_bpls.txt
index 168af3c..d34d9d8 100644
--- a/tests/suite/reference/attributes_bpls.txt
+++ b/tests/suite/reference/attributes_bpls.txt
@@ -2,18 +2,18 @@ File info:
   of groups:     1
   of variables:  6
   of attributes: 4
+  of meshes:     0
   time steps:    0 - 0
-  file size:     6 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  integer  /NX                            scalar = 10 
-  integer  /size                          scalar = 5 
-  integer  /rank                          scalar = 0 
-  double   /mean                          scalar = 4.5 
-  string   /date                          scalar = "Nov, 2009"
-  double   /temperature                   {5, 10} = 0 / 49 / 24.5 / 14.4309 
-  integer  /temperature/number of levels  attr   = 1 
-  string   /temperature/description       attr   = "Global array written from 'size' processes"
-  double   /temperature/mean value        attr   = 4.5 
-  string   /temperature/date of coding    attr   = "Nov, 2009"
+  integer  NX                            scalar = 10 
+  integer  size                          scalar = 5 
+  integer  rank                          scalar = 0 
+  double   mean                          scalar = 4.5 
+  string   date                          scalar = "Nov, 2009"
+  double   temperature                   {5, 10} = 0 / 49 / 24.5 / 14.4309 
+  integer  temperature/number of levels  attr   = 1 
+  string   temperature/description       attr   = "Global array written from 'size' processes"
+  double   temperature/mean value        attr   = 4.5 
+  string   temperature/date of coding    attr   = "Nov, 2009"
diff --git a/tests/suite/reference/attributes_read.txt b/tests/suite/reference/attributes_read.txt
index 079200f..e9a270c 100644
--- a/tests/suite/reference/attributes_read.txt
+++ b/tests/suite/reference/attributes_read.txt
@@ -1,8 +1,8 @@
-rank 0: attr: double /temperature/mean value = 4.500000e+00
-rank 0: attr: integer /temperature/number of levels = 1
-rank 0: attr: string /temperature/date of coding = Nov, 2009
-rank 0: attr: string /temperature/description = Global array written from 'size' processes
-rank 1: attr: double /temperature/mean value = 4.500000e+00
-rank 1: attr: integer /temperature/number of levels = 1
-rank 1: attr: string /temperature/date of coding = Nov, 2009
-rank 1: attr: string /temperature/description = Global array written from 'size' processes
+rank 0: attr: double temperature/mean value = 4.500000e+00
+rank 0: attr: integer temperature/number of levels = 1
+rank 0: attr: string temperature/date of coding = Nov, 2009
+rank 0: attr: string temperature/description = Global array written from 'size' processes
+rank 1: attr: double temperature/mean value = 4.500000e+00
+rank 1: attr: integer temperature/number of levels = 1
+rank 1: attr: string temperature/date of coding = Nov, 2009
+rank 1: attr: string temperature/description = Global array written from 'size' processes
diff --git a/tests/suite/reference/global_array_bpls.txt b/tests/suite/reference/global_array_bpls.txt
index f691fa5..a5ba4fc 100644
--- a/tests/suite/reference/global_array_bpls.txt
+++ b/tests/suite/reference/global_array_bpls.txt
@@ -1,7 +1,7 @@
-  integer  /NX                       scalar = 10 
-  integer  /size                     scalar = 7 
-  integer  /rank                     scalar = 0 
-  double   /temperature              {7, 10} = 0 / 69 / 34.5 / 20.2052 
+  integer  NX                       scalar = 10 
+  integer  size                     scalar = 7 
+  integer  rank                     scalar = 0 
+  double   temperature              {7, 10} = 0 / 69 / 34.5 / 20.2052 
     (0,0)    0 1 2 3 4 5 6 7 8 9 
     (1,0)    10 11 12 13 14 15 16 17 18 19 
     (2,0)    20 21 22 23 24 25 26 27 28 29 
@@ -10,4 +10,4 @@
     (5,0)    50 51 52 53 54 55 56 57 58 59 
     (6,0)    60 61 62 63 64 65 66 67 68 69 
 
-  string   /temperature/description  attr   = "Global array written from 'size' processes"
+  string   temperature/description  attr   = "Global array written from 'size' processes"
diff --git a/tests/suite/reference/global_array_no_xml_bpls.txt b/tests/suite/reference/global_array_no_xml_bpls.txt
index 8fe7347..98d0838 100644
--- a/tests/suite/reference/global_array_no_xml_bpls.txt
+++ b/tests/suite/reference/global_array_no_xml_bpls.txt
@@ -2,115 +2,115 @@ File info:
   of groups:     1
   of variables:  4
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     25 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  integer  /NX             scalar = 100 
-  integer  /Global_bounds  scalar = 2100 
-  integer  /Offsets        scalar = 0 
-  double   /temperature    {2100} = 0 / 2099 / 1049.5 / 606.218 
-    (0)    0 1 2 3 4 5 6 7 8 9 
-    (10)    10 11 12 13 14 15 16 17 18 19 
-    (20)    20 21 22 23 24 25 26 27 28 29 
-    (30)    30 31 32 33 34 35 36 37 38 39 
-    (40)    40 41 42 43 44 45 46 47 48 49 
-    (50)    50 51 52 53 54 55 56 57 58 59 
-    (60)    60 61 62 63 64 65 66 67 68 69 
-    (70)    70 71 72 73 74 75 76 77 78 79 
-    (80)    80 81 82 83 84 85 86 87 88 89 
-    (90)    90 91 92 93 94 95 96 97 98 99 
-    (100)    100 101 102 103 104 105 106 107 108 109 
-    (110)    110 111 112 113 114 115 116 117 118 119 
-    (120)    120 121 122 123 124 125 126 127 128 129 
-    (130)    130 131 132 133 134 135 136 137 138 139 
-    (140)    140 141 142 143 144 145 146 147 148 149 
-    (150)    150 151 152 153 154 155 156 157 158 159 
-    (160)    160 161 162 163 164 165 166 167 168 169 
-    (170)    170 171 172 173 174 175 176 177 178 179 
-    (180)    180 181 182 183 184 185 186 187 188 189 
-    (190)    190 191 192 193 194 195 196 197 198 199 
-    (200)    200 201 202 203 204 205 206 207 208 209 
-    (210)    210 211 212 213 214 215 216 217 218 219 
-    (220)    220 221 222 223 224 225 226 227 228 229 
-    (230)    230 231 232 233 234 235 236 237 238 239 
-    (240)    240 241 242 243 244 245 246 247 248 249 
-    (250)    250 251 252 253 254 255 256 257 258 259 
-    (260)    260 261 262 263 264 265 266 267 268 269 
-    (270)    270 271 272 273 274 275 276 277 278 279 
-    (280)    280 281 282 283 284 285 286 287 288 289 
-    (290)    290 291 292 293 294 295 296 297 298 299 
-    (300)    300 301 302 303 304 305 306 307 308 309 
-    (310)    310 311 312 313 314 315 316 317 318 319 
-    (320)    320 321 322 323 324 325 326 327 328 329 
-    (330)    330 331 332 333 334 335 336 337 338 339 
-    (340)    340 341 342 343 344 345 346 347 348 349 
-    (350)    350 351 352 353 354 355 356 357 358 359 
-    (360)    360 361 362 363 364 365 366 367 368 369 
-    (370)    370 371 372 373 374 375 376 377 378 379 
-    (380)    380 381 382 383 384 385 386 387 388 389 
-    (390)    390 391 392 393 394 395 396 397 398 399 
-    (400)    400 401 402 403 404 405 406 407 408 409 
-    (410)    410 411 412 413 414 415 416 417 418 419 
-    (420)    420 421 422 423 424 425 426 427 428 429 
-    (430)    430 431 432 433 434 435 436 437 438 439 
-    (440)    440 441 442 443 444 445 446 447 448 449 
-    (450)    450 451 452 453 454 455 456 457 458 459 
-    (460)    460 461 462 463 464 465 466 467 468 469 
-    (470)    470 471 472 473 474 475 476 477 478 479 
-    (480)    480 481 482 483 484 485 486 487 488 489 
-    (490)    490 491 492 493 494 495 496 497 498 499 
-    (500)    500 501 502 503 504 505 506 507 508 509 
-    (510)    510 511 512 513 514 515 516 517 518 519 
-    (520)    520 521 522 523 524 525 526 527 528 529 
-    (530)    530 531 532 533 534 535 536 537 538 539 
-    (540)    540 541 542 543 544 545 546 547 548 549 
-    (550)    550 551 552 553 554 555 556 557 558 559 
-    (560)    560 561 562 563 564 565 566 567 568 569 
-    (570)    570 571 572 573 574 575 576 577 578 579 
-    (580)    580 581 582 583 584 585 586 587 588 589 
-    (590)    590 591 592 593 594 595 596 597 598 599 
-    (600)    600 601 602 603 604 605 606 607 608 609 
-    (610)    610 611 612 613 614 615 616 617 618 619 
-    (620)    620 621 622 623 624 625 626 627 628 629 
-    (630)    630 631 632 633 634 635 636 637 638 639 
-    (640)    640 641 642 643 644 645 646 647 648 649 
-    (650)    650 651 652 653 654 655 656 657 658 659 
-    (660)    660 661 662 663 664 665 666 667 668 669 
-    (670)    670 671 672 673 674 675 676 677 678 679 
-    (680)    680 681 682 683 684 685 686 687 688 689 
-    (690)    690 691 692 693 694 695 696 697 698 699 
-    (700)    700 701 702 703 704 705 706 707 708 709 
-    (710)    710 711 712 713 714 715 716 717 718 719 
-    (720)    720 721 722 723 724 725 726 727 728 729 
-    (730)    730 731 732 733 734 735 736 737 738 739 
-    (740)    740 741 742 743 744 745 746 747 748 749 
-    (750)    750 751 752 753 754 755 756 757 758 759 
-    (760)    760 761 762 763 764 765 766 767 768 769 
-    (770)    770 771 772 773 774 775 776 777 778 779 
-    (780)    780 781 782 783 784 785 786 787 788 789 
-    (790)    790 791 792 793 794 795 796 797 798 799 
-    (800)    800 801 802 803 804 805 806 807 808 809 
-    (810)    810 811 812 813 814 815 816 817 818 819 
-    (820)    820 821 822 823 824 825 826 827 828 829 
-    (830)    830 831 832 833 834 835 836 837 838 839 
-    (840)    840 841 842 843 844 845 846 847 848 849 
-    (850)    850 851 852 853 854 855 856 857 858 859 
-    (860)    860 861 862 863 864 865 866 867 868 869 
-    (870)    870 871 872 873 874 875 876 877 878 879 
-    (880)    880 881 882 883 884 885 886 887 888 889 
-    (890)    890 891 892 893 894 895 896 897 898 899 
-    (900)    900 901 902 903 904 905 906 907 908 909 
-    (910)    910 911 912 913 914 915 916 917 918 919 
-    (920)    920 921 922 923 924 925 926 927 928 929 
-    (930)    930 931 932 933 934 935 936 937 938 939 
-    (940)    940 941 942 943 944 945 946 947 948 949 
-    (950)    950 951 952 953 954 955 956 957 958 959 
-    (960)    960 961 962 963 964 965 966 967 968 969 
-    (970)    970 971 972 973 974 975 976 977 978 979 
-    (980)    980 981 982 983 984 985 986 987 988 989 
-    (990)    990 991 992 993 994 995 996 997 998 999 
+  integer  NX             scalar = 100 
+  integer  Global_bounds  scalar = 2100 
+  integer  Offsets        scalar = 0 
+  double   temperature    {2100} = 0 / 2099 / 1049.5 / 606.218 
+    (   0)    0 1 2 3 4 5 6 7 8 9 
+    (  10)    10 11 12 13 14 15 16 17 18 19 
+    (  20)    20 21 22 23 24 25 26 27 28 29 
+    (  30)    30 31 32 33 34 35 36 37 38 39 
+    (  40)    40 41 42 43 44 45 46 47 48 49 
+    (  50)    50 51 52 53 54 55 56 57 58 59 
+    (  60)    60 61 62 63 64 65 66 67 68 69 
+    (  70)    70 71 72 73 74 75 76 77 78 79 
+    (  80)    80 81 82 83 84 85 86 87 88 89 
+    (  90)    90 91 92 93 94 95 96 97 98 99 
+    ( 100)    100 101 102 103 104 105 106 107 108 109 
+    ( 110)    110 111 112 113 114 115 116 117 118 119 
+    ( 120)    120 121 122 123 124 125 126 127 128 129 
+    ( 130)    130 131 132 133 134 135 136 137 138 139 
+    ( 140)    140 141 142 143 144 145 146 147 148 149 
+    ( 150)    150 151 152 153 154 155 156 157 158 159 
+    ( 160)    160 161 162 163 164 165 166 167 168 169 
+    ( 170)    170 171 172 173 174 175 176 177 178 179 
+    ( 180)    180 181 182 183 184 185 186 187 188 189 
+    ( 190)    190 191 192 193 194 195 196 197 198 199 
+    ( 200)    200 201 202 203 204 205 206 207 208 209 
+    ( 210)    210 211 212 213 214 215 216 217 218 219 
+    ( 220)    220 221 222 223 224 225 226 227 228 229 
+    ( 230)    230 231 232 233 234 235 236 237 238 239 
+    ( 240)    240 241 242 243 244 245 246 247 248 249 
+    ( 250)    250 251 252 253 254 255 256 257 258 259 
+    ( 260)    260 261 262 263 264 265 266 267 268 269 
+    ( 270)    270 271 272 273 274 275 276 277 278 279 
+    ( 280)    280 281 282 283 284 285 286 287 288 289 
+    ( 290)    290 291 292 293 294 295 296 297 298 299 
+    ( 300)    300 301 302 303 304 305 306 307 308 309 
+    ( 310)    310 311 312 313 314 315 316 317 318 319 
+    ( 320)    320 321 322 323 324 325 326 327 328 329 
+    ( 330)    330 331 332 333 334 335 336 337 338 339 
+    ( 340)    340 341 342 343 344 345 346 347 348 349 
+    ( 350)    350 351 352 353 354 355 356 357 358 359 
+    ( 360)    360 361 362 363 364 365 366 367 368 369 
+    ( 370)    370 371 372 373 374 375 376 377 378 379 
+    ( 380)    380 381 382 383 384 385 386 387 388 389 
+    ( 390)    390 391 392 393 394 395 396 397 398 399 
+    ( 400)    400 401 402 403 404 405 406 407 408 409 
+    ( 410)    410 411 412 413 414 415 416 417 418 419 
+    ( 420)    420 421 422 423 424 425 426 427 428 429 
+    ( 430)    430 431 432 433 434 435 436 437 438 439 
+    ( 440)    440 441 442 443 444 445 446 447 448 449 
+    ( 450)    450 451 452 453 454 455 456 457 458 459 
+    ( 460)    460 461 462 463 464 465 466 467 468 469 
+    ( 470)    470 471 472 473 474 475 476 477 478 479 
+    ( 480)    480 481 482 483 484 485 486 487 488 489 
+    ( 490)    490 491 492 493 494 495 496 497 498 499 
+    ( 500)    500 501 502 503 504 505 506 507 508 509 
+    ( 510)    510 511 512 513 514 515 516 517 518 519 
+    ( 520)    520 521 522 523 524 525 526 527 528 529 
+    ( 530)    530 531 532 533 534 535 536 537 538 539 
+    ( 540)    540 541 542 543 544 545 546 547 548 549 
+    ( 550)    550 551 552 553 554 555 556 557 558 559 
+    ( 560)    560 561 562 563 564 565 566 567 568 569 
+    ( 570)    570 571 572 573 574 575 576 577 578 579 
+    ( 580)    580 581 582 583 584 585 586 587 588 589 
+    ( 590)    590 591 592 593 594 595 596 597 598 599 
+    ( 600)    600 601 602 603 604 605 606 607 608 609 
+    ( 610)    610 611 612 613 614 615 616 617 618 619 
+    ( 620)    620 621 622 623 624 625 626 627 628 629 
+    ( 630)    630 631 632 633 634 635 636 637 638 639 
+    ( 640)    640 641 642 643 644 645 646 647 648 649 
+    ( 650)    650 651 652 653 654 655 656 657 658 659 
+    ( 660)    660 661 662 663 664 665 666 667 668 669 
+    ( 670)    670 671 672 673 674 675 676 677 678 679 
+    ( 680)    680 681 682 683 684 685 686 687 688 689 
+    ( 690)    690 691 692 693 694 695 696 697 698 699 
+    ( 700)    700 701 702 703 704 705 706 707 708 709 
+    ( 710)    710 711 712 713 714 715 716 717 718 719 
+    ( 720)    720 721 722 723 724 725 726 727 728 729 
+    ( 730)    730 731 732 733 734 735 736 737 738 739 
+    ( 740)    740 741 742 743 744 745 746 747 748 749 
+    ( 750)    750 751 752 753 754 755 756 757 758 759 
+    ( 760)    760 761 762 763 764 765 766 767 768 769 
+    ( 770)    770 771 772 773 774 775 776 777 778 779 
+    ( 780)    780 781 782 783 784 785 786 787 788 789 
+    ( 790)    790 791 792 793 794 795 796 797 798 799 
+    ( 800)    800 801 802 803 804 805 806 807 808 809 
+    ( 810)    810 811 812 813 814 815 816 817 818 819 
+    ( 820)    820 821 822 823 824 825 826 827 828 829 
+    ( 830)    830 831 832 833 834 835 836 837 838 839 
+    ( 840)    840 841 842 843 844 845 846 847 848 849 
+    ( 850)    850 851 852 853 854 855 856 857 858 859 
+    ( 860)    860 861 862 863 864 865 866 867 868 869 
+    ( 870)    870 871 872 873 874 875 876 877 878 879 
+    ( 880)    880 881 882 883 884 885 886 887 888 889 
+    ( 890)    890 891 892 893 894 895 896 897 898 899 
+    ( 900)    900 901 902 903 904 905 906 907 908 909 
+    ( 910)    910 911 912 913 914 915 916 917 918 919 
+    ( 920)    920 921 922 923 924 925 926 927 928 929 
+    ( 930)    930 931 932 933 934 935 936 937 938 939 
+    ( 940)    940 941 942 943 944 945 946 947 948 949 
+    ( 950)    950 951 952 953 954 955 956 957 958 959 
+    ( 960)    960 961 962 963 964 965 966 967 968 969 
+    ( 970)    970 971 972 973 974 975 976 977 978 979 
+    ( 980)    980 981 982 983 984 985 986 987 988 989 
+    ( 990)    990 991 992 993 994 995 996 997 998 999 
     (1000)    1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 
     (1010)    1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 
     (1020)    1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 
diff --git a/tests/suite/reference/global_array_no_xml_f_bpls.txt b/tests/suite/reference/global_array_no_xml_f_bpls.txt
index be1cfdc..51c88ed 100644
--- a/tests/suite/reference/global_array_no_xml_f_bpls.txt
+++ b/tests/suite/reference/global_array_no_xml_f_bpls.txt
@@ -2,25 +2,25 @@ File info:
   of groups:     1
   of variables:  4
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     8 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  integer  /NX           scalar = 10 
-  integer  /G            scalar = 140 
-  integer  /O            scalar = 0 
-  double   /temperature  {140} = 0 / 139 / 69.5 / 40.4135 
-    (0)    0 1 2 3 4 5 6 7 8 9 
-    (10)    10 11 12 13 14 15 16 17 18 19 
-    (20)    20 21 22 23 24 25 26 27 28 29 
-    (30)    30 31 32 33 34 35 36 37 38 39 
-    (40)    40 41 42 43 44 45 46 47 48 49 
-    (50)    50 51 52 53 54 55 56 57 58 59 
-    (60)    60 61 62 63 64 65 66 67 68 69 
-    (70)    70 71 72 73 74 75 76 77 78 79 
-    (80)    80 81 82 83 84 85 86 87 88 89 
-    (90)    90 91 92 93 94 95 96 97 98 99 
+  integer  NX           scalar = 10 
+  integer  G            scalar = 140 
+  integer  O            scalar = 0 
+  double   temperature  {140} = 0 / 139 / 69.5 / 40.4135 
+    (  0)    0 1 2 3 4 5 6 7 8 9 
+    ( 10)    10 11 12 13 14 15 16 17 18 19 
+    ( 20)    20 21 22 23 24 25 26 27 28 29 
+    ( 30)    30 31 32 33 34 35 36 37 38 39 
+    ( 40)    40 41 42 43 44 45 46 47 48 49 
+    ( 50)    50 51 52 53 54 55 56 57 58 59 
+    ( 60)    60 61 62 63 64 65 66 67 68 69 
+    ( 70)    70 71 72 73 74 75 76 77 78 79 
+    ( 80)    80 81 82 83 84 85 86 87 88 89 
+    ( 90)    90 91 92 93 94 95 96 97 98 99 
     (100)    100 101 102 103 104 105 106 107 108 109 
     (110)    110 111 112 113 114 115 116 117 118 119 
     (120)    120 121 122 123 124 125 126 127 128 129 
diff --git a/tests/suite/reference/global_array_time_bpls.txt b/tests/suite/reference/global_array_time_bpls.txt
index 33c2c21..753f199 100644
--- a/tests/suite/reference/global_array_time_bpls.txt
+++ b/tests/suite/reference/global_array_time_bpls.txt
@@ -1,7 +1,7 @@
-  integer  /NX                       13*scalar = 10 / 10 / 10 / 0 
-  integer  /NY                       13*scalar = 1 / 1 / 1 / 0 
-  integer  /size                     13*scalar = 9 / 9 / 9 / 0 
-  integer  /rank                     13*scalar = 0 / 8 / 4 / 2.58199 
-  double   /temperature              13*{9, 10} = 100 / 1389 / 744.5 / 375.067 
-  double   /pressure                 13*{9, 1} = 1000 / 13008 / 7004 / 3741.66 
-  string   /temperature/description  attr   = "Global array written from 'size' processes over several timesteps"
+  integer  NX                       13*scalar = 10 / 10 / 10 / 0 
+  integer  NY                       13*scalar = 1 / 1 / 1 / 0 
+  integer  size                     13*scalar = 9 / 9 / 9 / 0 
+  integer  rank                     13*scalar = 0 / 8 / 4 / 2.58199 
+  double   temperature              13*{9, 10} = 100 / 1389 / 744.5 / 375.067 
+  double   pressure                 13*{9, 1} = 1000 / 13008 / 7004 / 3741.66 
+  string   temperature/description  attr   = "Global array written from 'size' processes over several timesteps"
diff --git a/tests/suite/reference/no_xml_write_byid_bpls.txt b/tests/suite/reference/no_xml_write_byid_bpls.txt
index 4b2602d..76aeecf 100644
--- a/tests/suite/reference/no_xml_write_byid_bpls.txt
+++ b/tests/suite/reference/no_xml_write_byid_bpls.txt
@@ -2,112 +2,112 @@ File info:
   of groups:     1
   of variables:  1
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     22 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  double   /temperature  {2100} = 0 / 2099 / 1049.5 / 606.218 
-    (0)    0 1 2 3 4 5 6 7 8 9 
-    (10)    10 11 12 13 14 15 16 17 18 19 
-    (20)    20 21 22 23 24 25 26 27 28 29 
-    (30)    30 31 32 33 34 35 36 37 38 39 
-    (40)    40 41 42 43 44 45 46 47 48 49 
-    (50)    50 51 52 53 54 55 56 57 58 59 
-    (60)    60 61 62 63 64 65 66 67 68 69 
-    (70)    70 71 72 73 74 75 76 77 78 79 
-    (80)    80 81 82 83 84 85 86 87 88 89 
-    (90)    90 91 92 93 94 95 96 97 98 99 
-    (100)    100 101 102 103 104 105 106 107 108 109 
-    (110)    110 111 112 113 114 115 116 117 118 119 
-    (120)    120 121 122 123 124 125 126 127 128 129 
-    (130)    130 131 132 133 134 135 136 137 138 139 
-    (140)    140 141 142 143 144 145 146 147 148 149 
-    (150)    150 151 152 153 154 155 156 157 158 159 
-    (160)    160 161 162 163 164 165 166 167 168 169 
-    (170)    170 171 172 173 174 175 176 177 178 179 
-    (180)    180 181 182 183 184 185 186 187 188 189 
-    (190)    190 191 192 193 194 195 196 197 198 199 
-    (200)    200 201 202 203 204 205 206 207 208 209 
-    (210)    210 211 212 213 214 215 216 217 218 219 
-    (220)    220 221 222 223 224 225 226 227 228 229 
-    (230)    230 231 232 233 234 235 236 237 238 239 
-    (240)    240 241 242 243 244 245 246 247 248 249 
-    (250)    250 251 252 253 254 255 256 257 258 259 
-    (260)    260 261 262 263 264 265 266 267 268 269 
-    (270)    270 271 272 273 274 275 276 277 278 279 
-    (280)    280 281 282 283 284 285 286 287 288 289 
-    (290)    290 291 292 293 294 295 296 297 298 299 
-    (300)    300 301 302 303 304 305 306 307 308 309 
-    (310)    310 311 312 313 314 315 316 317 318 319 
-    (320)    320 321 322 323 324 325 326 327 328 329 
-    (330)    330 331 332 333 334 335 336 337 338 339 
-    (340)    340 341 342 343 344 345 346 347 348 349 
-    (350)    350 351 352 353 354 355 356 357 358 359 
-    (360)    360 361 362 363 364 365 366 367 368 369 
-    (370)    370 371 372 373 374 375 376 377 378 379 
-    (380)    380 381 382 383 384 385 386 387 388 389 
-    (390)    390 391 392 393 394 395 396 397 398 399 
-    (400)    400 401 402 403 404 405 406 407 408 409 
-    (410)    410 411 412 413 414 415 416 417 418 419 
-    (420)    420 421 422 423 424 425 426 427 428 429 
-    (430)    430 431 432 433 434 435 436 437 438 439 
-    (440)    440 441 442 443 444 445 446 447 448 449 
-    (450)    450 451 452 453 454 455 456 457 458 459 
-    (460)    460 461 462 463 464 465 466 467 468 469 
-    (470)    470 471 472 473 474 475 476 477 478 479 
-    (480)    480 481 482 483 484 485 486 487 488 489 
-    (490)    490 491 492 493 494 495 496 497 498 499 
-    (500)    500 501 502 503 504 505 506 507 508 509 
-    (510)    510 511 512 513 514 515 516 517 518 519 
-    (520)    520 521 522 523 524 525 526 527 528 529 
-    (530)    530 531 532 533 534 535 536 537 538 539 
-    (540)    540 541 542 543 544 545 546 547 548 549 
-    (550)    550 551 552 553 554 555 556 557 558 559 
-    (560)    560 561 562 563 564 565 566 567 568 569 
-    (570)    570 571 572 573 574 575 576 577 578 579 
-    (580)    580 581 582 583 584 585 586 587 588 589 
-    (590)    590 591 592 593 594 595 596 597 598 599 
-    (600)    600 601 602 603 604 605 606 607 608 609 
-    (610)    610 611 612 613 614 615 616 617 618 619 
-    (620)    620 621 622 623 624 625 626 627 628 629 
-    (630)    630 631 632 633 634 635 636 637 638 639 
-    (640)    640 641 642 643 644 645 646 647 648 649 
-    (650)    650 651 652 653 654 655 656 657 658 659 
-    (660)    660 661 662 663 664 665 666 667 668 669 
-    (670)    670 671 672 673 674 675 676 677 678 679 
-    (680)    680 681 682 683 684 685 686 687 688 689 
-    (690)    690 691 692 693 694 695 696 697 698 699 
-    (700)    700 701 702 703 704 705 706 707 708 709 
-    (710)    710 711 712 713 714 715 716 717 718 719 
-    (720)    720 721 722 723 724 725 726 727 728 729 
-    (730)    730 731 732 733 734 735 736 737 738 739 
-    (740)    740 741 742 743 744 745 746 747 748 749 
-    (750)    750 751 752 753 754 755 756 757 758 759 
-    (760)    760 761 762 763 764 765 766 767 768 769 
-    (770)    770 771 772 773 774 775 776 777 778 779 
-    (780)    780 781 782 783 784 785 786 787 788 789 
-    (790)    790 791 792 793 794 795 796 797 798 799 
-    (800)    800 801 802 803 804 805 806 807 808 809 
-    (810)    810 811 812 813 814 815 816 817 818 819 
-    (820)    820 821 822 823 824 825 826 827 828 829 
-    (830)    830 831 832 833 834 835 836 837 838 839 
-    (840)    840 841 842 843 844 845 846 847 848 849 
-    (850)    850 851 852 853 854 855 856 857 858 859 
-    (860)    860 861 862 863 864 865 866 867 868 869 
-    (870)    870 871 872 873 874 875 876 877 878 879 
-    (880)    880 881 882 883 884 885 886 887 888 889 
-    (890)    890 891 892 893 894 895 896 897 898 899 
-    (900)    900 901 902 903 904 905 906 907 908 909 
-    (910)    910 911 912 913 914 915 916 917 918 919 
-    (920)    920 921 922 923 924 925 926 927 928 929 
-    (930)    930 931 932 933 934 935 936 937 938 939 
-    (940)    940 941 942 943 944 945 946 947 948 949 
-    (950)    950 951 952 953 954 955 956 957 958 959 
-    (960)    960 961 962 963 964 965 966 967 968 969 
-    (970)    970 971 972 973 974 975 976 977 978 979 
-    (980)    980 981 982 983 984 985 986 987 988 989 
-    (990)    990 991 992 993 994 995 996 997 998 999 
+  double   temperature  {2100} = 0 / 2099 / 1049.5 / 606.218 
+    (   0)    0 1 2 3 4 5 6 7 8 9 
+    (  10)    10 11 12 13 14 15 16 17 18 19 
+    (  20)    20 21 22 23 24 25 26 27 28 29 
+    (  30)    30 31 32 33 34 35 36 37 38 39 
+    (  40)    40 41 42 43 44 45 46 47 48 49 
+    (  50)    50 51 52 53 54 55 56 57 58 59 
+    (  60)    60 61 62 63 64 65 66 67 68 69 
+    (  70)    70 71 72 73 74 75 76 77 78 79 
+    (  80)    80 81 82 83 84 85 86 87 88 89 
+    (  90)    90 91 92 93 94 95 96 97 98 99 
+    ( 100)    100 101 102 103 104 105 106 107 108 109 
+    ( 110)    110 111 112 113 114 115 116 117 118 119 
+    ( 120)    120 121 122 123 124 125 126 127 128 129 
+    ( 130)    130 131 132 133 134 135 136 137 138 139 
+    ( 140)    140 141 142 143 144 145 146 147 148 149 
+    ( 150)    150 151 152 153 154 155 156 157 158 159 
+    ( 160)    160 161 162 163 164 165 166 167 168 169 
+    ( 170)    170 171 172 173 174 175 176 177 178 179 
+    ( 180)    180 181 182 183 184 185 186 187 188 189 
+    ( 190)    190 191 192 193 194 195 196 197 198 199 
+    ( 200)    200 201 202 203 204 205 206 207 208 209 
+    ( 210)    210 211 212 213 214 215 216 217 218 219 
+    ( 220)    220 221 222 223 224 225 226 227 228 229 
+    ( 230)    230 231 232 233 234 235 236 237 238 239 
+    ( 240)    240 241 242 243 244 245 246 247 248 249 
+    ( 250)    250 251 252 253 254 255 256 257 258 259 
+    ( 260)    260 261 262 263 264 265 266 267 268 269 
+    ( 270)    270 271 272 273 274 275 276 277 278 279 
+    ( 280)    280 281 282 283 284 285 286 287 288 289 
+    ( 290)    290 291 292 293 294 295 296 297 298 299 
+    ( 300)    300 301 302 303 304 305 306 307 308 309 
+    ( 310)    310 311 312 313 314 315 316 317 318 319 
+    ( 320)    320 321 322 323 324 325 326 327 328 329 
+    ( 330)    330 331 332 333 334 335 336 337 338 339 
+    ( 340)    340 341 342 343 344 345 346 347 348 349 
+    ( 350)    350 351 352 353 354 355 356 357 358 359 
+    ( 360)    360 361 362 363 364 365 366 367 368 369 
+    ( 370)    370 371 372 373 374 375 376 377 378 379 
+    ( 380)    380 381 382 383 384 385 386 387 388 389 
+    ( 390)    390 391 392 393 394 395 396 397 398 399 
+    ( 400)    400 401 402 403 404 405 406 407 408 409 
+    ( 410)    410 411 412 413 414 415 416 417 418 419 
+    ( 420)    420 421 422 423 424 425 426 427 428 429 
+    ( 430)    430 431 432 433 434 435 436 437 438 439 
+    ( 440)    440 441 442 443 444 445 446 447 448 449 
+    ( 450)    450 451 452 453 454 455 456 457 458 459 
+    ( 460)    460 461 462 463 464 465 466 467 468 469 
+    ( 470)    470 471 472 473 474 475 476 477 478 479 
+    ( 480)    480 481 482 483 484 485 486 487 488 489 
+    ( 490)    490 491 492 493 494 495 496 497 498 499 
+    ( 500)    500 501 502 503 504 505 506 507 508 509 
+    ( 510)    510 511 512 513 514 515 516 517 518 519 
+    ( 520)    520 521 522 523 524 525 526 527 528 529 
+    ( 530)    530 531 532 533 534 535 536 537 538 539 
+    ( 540)    540 541 542 543 544 545 546 547 548 549 
+    ( 550)    550 551 552 553 554 555 556 557 558 559 
+    ( 560)    560 561 562 563 564 565 566 567 568 569 
+    ( 570)    570 571 572 573 574 575 576 577 578 579 
+    ( 580)    580 581 582 583 584 585 586 587 588 589 
+    ( 590)    590 591 592 593 594 595 596 597 598 599 
+    ( 600)    600 601 602 603 604 605 606 607 608 609 
+    ( 610)    610 611 612 613 614 615 616 617 618 619 
+    ( 620)    620 621 622 623 624 625 626 627 628 629 
+    ( 630)    630 631 632 633 634 635 636 637 638 639 
+    ( 640)    640 641 642 643 644 645 646 647 648 649 
+    ( 650)    650 651 652 653 654 655 656 657 658 659 
+    ( 660)    660 661 662 663 664 665 666 667 668 669 
+    ( 670)    670 671 672 673 674 675 676 677 678 679 
+    ( 680)    680 681 682 683 684 685 686 687 688 689 
+    ( 690)    690 691 692 693 694 695 696 697 698 699 
+    ( 700)    700 701 702 703 704 705 706 707 708 709 
+    ( 710)    710 711 712 713 714 715 716 717 718 719 
+    ( 720)    720 721 722 723 724 725 726 727 728 729 
+    ( 730)    730 731 732 733 734 735 736 737 738 739 
+    ( 740)    740 741 742 743 744 745 746 747 748 749 
+    ( 750)    750 751 752 753 754 755 756 757 758 759 
+    ( 760)    760 761 762 763 764 765 766 767 768 769 
+    ( 770)    770 771 772 773 774 775 776 777 778 779 
+    ( 780)    780 781 782 783 784 785 786 787 788 789 
+    ( 790)    790 791 792 793 794 795 796 797 798 799 
+    ( 800)    800 801 802 803 804 805 806 807 808 809 
+    ( 810)    810 811 812 813 814 815 816 817 818 819 
+    ( 820)    820 821 822 823 824 825 826 827 828 829 
+    ( 830)    830 831 832 833 834 835 836 837 838 839 
+    ( 840)    840 841 842 843 844 845 846 847 848 849 
+    ( 850)    850 851 852 853 854 855 856 857 858 859 
+    ( 860)    860 861 862 863 864 865 866 867 868 869 
+    ( 870)    870 871 872 873 874 875 876 877 878 879 
+    ( 880)    880 881 882 883 884 885 886 887 888 889 
+    ( 890)    890 891 892 893 894 895 896 897 898 899 
+    ( 900)    900 901 902 903 904 905 906 907 908 909 
+    ( 910)    910 911 912 913 914 915 916 917 918 919 
+    ( 920)    920 921 922 923 924 925 926 927 928 929 
+    ( 930)    930 931 932 933 934 935 936 937 938 939 
+    ( 940)    940 941 942 943 944 945 946 947 948 949 
+    ( 950)    950 951 952 953 954 955 956 957 958 959 
+    ( 960)    960 961 962 963 964 965 966 967 968 969 
+    ( 970)    970 971 972 973 974 975 976 977 978 979 
+    ( 980)    980 981 982 983 984 985 986 987 988 989 
+    ( 990)    990 991 992 993 994 995 996 997 998 999 
     (1000)    1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 
     (1010)    1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 
     (1020)    1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 
diff --git a/tests/suite/reference/no_xml_write_byid_f_bpls.txt b/tests/suite/reference/no_xml_write_byid_f_bpls.txt
index d518efa..c51ea04 100644
--- a/tests/suite/reference/no_xml_write_byid_f_bpls.txt
+++ b/tests/suite/reference/no_xml_write_byid_f_bpls.txt
@@ -2,22 +2,22 @@ File info:
   of groups:     1
   of variables:  1
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     5 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  double   /temperature  {140} = 0 / 139 / 69.5 / 40.4135 
-    (0)    0 1 2 3 4 5 6 7 8 9 
-    (10)    10 11 12 13 14 15 16 17 18 19 
-    (20)    20 21 22 23 24 25 26 27 28 29 
-    (30)    30 31 32 33 34 35 36 37 38 39 
-    (40)    40 41 42 43 44 45 46 47 48 49 
-    (50)    50 51 52 53 54 55 56 57 58 59 
-    (60)    60 61 62 63 64 65 66 67 68 69 
-    (70)    70 71 72 73 74 75 76 77 78 79 
-    (80)    80 81 82 83 84 85 86 87 88 89 
-    (90)    90 91 92 93 94 95 96 97 98 99 
+  double   temperature  {140} = 0 / 139 / 69.5 / 40.4135 
+    (  0)    0 1 2 3 4 5 6 7 8 9 
+    ( 10)    10 11 12 13 14 15 16 17 18 19 
+    ( 20)    20 21 22 23 24 25 26 27 28 29 
+    ( 30)    30 31 32 33 34 35 36 37 38 39 
+    ( 40)    40 41 42 43 44 45 46 47 48 49 
+    ( 50)    50 51 52 53 54 55 56 57 58 59 
+    ( 60)    60 61 62 63 64 65 66 67 68 69 
+    ( 70)    70 71 72 73 74 75 76 77 78 79 
+    ( 80)    80 81 82 83 84 85 86 87 88 89 
+    ( 90)    90 91 92 93 94 95 96 97 98 99 
     (100)    100 101 102 103 104 105 106 107 108 109 
     (110)    110 111 112 113 114 115 116 117 118 119 
     (120)    120 121 122 123 124 125 126 127 128 129 
diff --git a/tests/suite/reference/scalars_write_bpls.txt b/tests/suite/reference/scalars_write_bpls.txt
index b163449..7c61311 100644
--- a/tests/suite/reference/scalars_write_bpls.txt
+++ b/tests/suite/reference/scalars_write_bpls.txt
@@ -2,21 +2,21 @@ File info:
   of groups:     1
   of variables:  13
   of attributes: 0
+  of meshes:     0
   time steps:    0 - 0
-  file size:     4 KB
-  bp version:    513
+  bp version:    1
   statistics:    Min / Max / Avg / Std_dev
 
-  byte                /var_byte            scalar = -4 
-  short               /var_short           scalar = -3 
-  integer             /var_int             scalar = -2 
-  long long           /var_long            scalar = -1 
-  unsigned byte       /var_ubyte           scalar = 1 
-  unsigned short      /var_ushort          scalar = 2 
-  unsigned integer    /var_uint            scalar = 3 
-  unsigned long long  /var_ulong           scalar = 4 
-  real                /var_real            scalar = 5 
-  double              /var_double          scalar = 6 
-  string              /var_string          scalar = "ADIOS example"
-  complex             /var_complex         scalar = (8,i9) 
-  double complex      /var_double_complex  scalar = (10,i11)
+  byte                var_byte            scalar = -4 
+  short               var_short           scalar = -3 
+  integer             var_int             scalar = -2 
+  long long           var_long            scalar = -1 
+  unsigned byte       var_ubyte           scalar = 1 
+  unsigned short      var_ushort          scalar = 2 
+  unsigned integer    var_uint            scalar = 3 
+  unsigned long long  var_ulong           scalar = 4 
+  real                var_real            scalar = 5 
+  double              var_double          scalar = 6 
+  string              var_string          scalar = "ADIOS example"
+  complex             var_complex         scalar = (8,i9) 
+  double complex      var_double_complex  scalar = (10,i11)
diff --git a/tests/suite/reference/transforms_read_write_bpls.txt b/tests/suite/reference/transforms_read_write_bpls.txt
new file mode 100644
index 0000000..0a96d29
--- /dev/null
+++ b/tests/suite/reference/transforms_read_write_bpls.txt
@@ -0,0 +1,10 @@
+  integer  l1          16*scalar = 1 / 1 / 1 / 0 
+  integer  l2          16*scalar = 64 / 64 / 64 / 0 
+  integer  o1          16*scalar = 0 / 15 / 7.5 / 4.60977 
+  integer  o2          16*scalar = 0 / 0 / 0 / 0 
+  integer  g1          16*scalar = 16 / 16 / 16 / 0 
+  integer  g2          16*scalar = 64 / 64 / 64 / 0 
+  double   t_none      16*{16, 64} = 0 / 1038 / 519 / 295.639 
+  double   t_identity  16*{16, 64} = 0 / 1038 / 519 / 295.639 
+  double   t_aplod     16*{16, 64} = 0 / 1038 / 519 / 295.639 
+  double   t_isobar    16*{16, 64} = 0 / 1038 / 519 / 295.639 
diff --git a/tests/suite/reference/write_read_bpls.txt b/tests/suite/reference/write_read_bpls.txt
index d57bd52..74292fd 100644
--- a/tests/suite/reference/write_read_bpls.txt
+++ b/tests/suite/reference/write_read_bpls.txt
@@ -1,21 +1,21 @@
-  integer             /dimensions/gdim1               scalar
-  integer             /dimensions/gdim2               scalar
-  integer             /dimensions/gdim3               scalar
-  integer             /dimensions/gdim4               scalar
-  integer             /dimensions/gdim5               scalar
-  integer             /dimensions/gdim6               scalar
-  integer             /dimensions/ldim1               scalar
-  integer             /dimensions/ldim2               scalar
-  integer             /dimensions/ldim3               scalar
-  integer             /dimensions/ldim4               scalar
-  integer             /dimensions/ldim5               scalar
-  integer             /dimensions/ldim6               scalar
-  integer             /dimensions/offs1               scalar
-  integer             /dimensions/offs2               scalar
-  integer             /dimensions/offs3               scalar
-  integer             /dimensions/offs4               scalar
-  integer             /dimensions/offs5               scalar
-  integer             /dimensions/offs6               scalar
+  integer             gdim1                           scalar
+  integer             gdim2                           scalar
+  integer             gdim3                           scalar
+  integer             gdim4                           scalar
+  integer             gdim5                           scalar
+  integer             gdim6                           scalar
+  integer             ldim1                           scalar
+  integer             ldim2                           scalar
+  integer             ldim3                           scalar
+  integer             ldim4                           scalar
+  integer             ldim5                           scalar
+  integer             ldim6                           scalar
+  integer             offs1                           scalar
+  integer             offs2                           scalar
+  integer             offs3                           scalar
+  integer             offs4                           scalar
+  integer             offs5                           scalar
+  integer             offs6                           scalar
   byte                /scalars/scalar_byte            scalar
   short               /scalars/scalar_short           scalar
   integer             /scalars/scalar_int             scalar
diff --git a/tests/suite/test.sh b/tests/suite/test.sh
index c8007ce..4e8342f 100755
--- a/tests/suite/test.sh
+++ b/tests/suite/test.sh
@@ -21,6 +21,16 @@ fi
 KEEPOUTPUT=no
 MAXPROCS=128
 
+function add_transform_to_xmls() {
+  if [[ $TRANSFORM ]]; then
+    sed -i -e '/transform=/!s|\(<var .*dimensions=.*\)/>|\1 transform="'$TRANSFORM'" />|' ./*.xml
+  fi
+}
+# Make this function accessible to child processes (i.e., the actual tests)
+export -f add_transform_to_xmls    
+
+EXEOPT=""
+
 function Usage() {
     echo "
 Usage:  <path>/`basename $0` [-m runcmd] [-n "-np"] [-p procs] [-h] [-k]
@@ -38,6 +48,9 @@ Usage:  <path>/`basename $0` [-m runcmd] [-n "-np"] [-p procs] [-h] [-k]
      -p procs   Run only those tests that use less up to 'procs' processes. 
                 Default: $MAXPROCS
      -k         Do not remove logs and work dir of successful tests.
+     -t xform   Run tests with transform 'xform' applied to all non-scalar variables
+     -e exeopt  option to runcmd to specify executable. Default: empty. 
+                BG/Q interactive jobs requires '--exe' before an executable.
      -h         Print this help.
 "
 }
@@ -47,13 +60,15 @@ Usage:  <path>/`basename $0` [-m runcmd] [-n "-np"] [-p procs] [-h] [-k]
 #####################
     
 # process option arguments
-while getopts ":m:n:p:kh" Option
+while getopts ":m:n:p:t:e:kh" Option
 do  
   case $Option in
         m) MPIRUN=$OPTARG;;
         n) NP_MPIRUN=$OPTARG;;
         p) MAXPROCS=$OPTARG;;
         k) KEEPOUTPUT=yes;;
+        t) TRANSFORM=$OPTARG;;
+        e) EXEOPT=$OPTARG;;
         h) Usage; exit 0;;
         *) echo "Invalid option $Option"; Usage; exit 255;;   # DEFAULT
   esac
@@ -88,7 +103,7 @@ echo "  Run command:            $MPIRUN"
 echo "  Run command np option:  $NP_MPIRUN"
 echo "  Max. processes to use:  $MAXPROCS"
 echo "  Keep test output:       $KEEPOUTPUT"
-
+echo "  Execute option:         $EXEOPT"
 
 # find and list tests to be executed
 TESTS=
@@ -136,6 +151,8 @@ for TESTSCRIPT in $TESTS; do
     # Run the test script with setting the environment for it
     MPIRUN="$MPIRUN" NP_MPIRUN="$NP_MPIRUN" HAVE_FORTRAN="$HAVE_FORTRAN" SRCDIR="$TESTSRCDIR" \
         TRUNKDIR="$TRUNKDIR" MAXPROCS="$MAXPROCS" \
+        TRANSFORM="$TRANSFORM" \
+        EXEOPT="$EXEOPT" \
         $TESTSCRIPT &> ../log.$TEST
     EX=$?
     popd >/dev/null
diff --git a/tests/suite/tests/01_scalars.sh b/tests/suite/tests/01_scalars.sh
index 5e06ccd..0bd2fec 100755
--- a/tests/suite/tests/01_scalars.sh
+++ b/tests/suite/tests/01_scalars.sh
@@ -10,6 +10,7 @@
 # HAVE_FORTRAN  yes or no
 # SRCDIR        Test source dir (.. of this script)
 # TRUNKDIR      ADIOS trunk dir
+# EXEOPT        Run command's option to set executable
 
 PROCS=3
 
@@ -23,9 +24,12 @@ cp $TRUNKDIR/examples/C/scalars/scalars_read .
 cp $TRUNKDIR/examples/C/scalars/scalars_write .
 cp $TRUNKDIR/examples/C/scalars/scalars.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run C scalars_write"
-echo $MPIRUN $NP_MPIRUN $PROCS ./scalars_write
-$MPIRUN $NP_MPIRUN $PROCS ./scalars_write
+echo $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./scalars_write
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./scalars_write
 EX=$?
 if [ ! -f scalars.bp ]; then
     echo "ERROR: C version of scalars_write failed. No BP file is created. Exit code=$EX"
@@ -33,16 +37,16 @@ if [ ! -f scalars.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav scalars.bp | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav scalars.bp | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/scalars_write_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of scalars_write produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/scalars.bp | grep -v endianness\" to reference $SRCDIR/reference/scalars_write_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/scalars.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/scalars_write_bpls.txt"
     exit 1
 fi
 
 echo "Run C scalars_read"
-$MPIRUN $NP_MPIRUN $PROCS ./scalars_read > c_read.txt
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./scalars_read > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of scalars_read failed with exit code $EX"
@@ -67,8 +71,11 @@ cp $TRUNKDIR/examples/Fortran/scalars/scalars_read fortran_read
 cp $TRUNKDIR/examples/Fortran/scalars/scalars_write fortran_write
 cp $TRUNKDIR/examples/Fortran/scalars/scalars.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run Fortran scalar_write"
-$MPIRUN $NP_MPIRUN $PROCS ./fortran_write
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./fortran_write
 EX=$?
 if [ ! -f scalars.bp ]; then
     echo "ERROR: Fortran version of scalars_write failed. No BP file is created. Exit code=$EX"
@@ -76,16 +83,16 @@ if [ ! -f scalars.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav scalars.bp | grep -v endianness > f_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav scalars.bp | grep -v -e endianness -e 'file size' > f_bpls.txt
 diff -q f_bpls.txt $SRCDIR/reference/scalars_write_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of scalars_write produced a file different from the reference"
-    echo "Compare \"bpls -lav scalars.bp | grep -v endianness\" to reference $SRCDIR/reference/scalars_write_bpls.txt"
+    echo "Compare \"bpls -lav scalars.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/scalars_write_bpls.txt"
     exit 1
 fi
 
 echo "Run Fortran scalars_read"
-$MPIRUN $NP_MPIRUN $PROCS ./fortran_read > f_read.txt
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./fortran_read > f_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of scalars_read failed with exit code $EX"
diff --git a/tests/suite/tests/02_attributes.sh b/tests/suite/tests/02_attributes.sh
index e6539da..7cb1204 100755
--- a/tests/suite/tests/02_attributes.sh
+++ b/tests/suite/tests/02_attributes.sh
@@ -24,8 +24,11 @@ cp $TRUNKDIR/examples/C/attributes/attributes_read .
 cp $TRUNKDIR/examples/C/attributes/attributes_write .
 cp $TRUNKDIR/examples/C/attributes/attributes.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run C attributes_write"
-$MPIRUN $NP_MPIRUN $PROCS ./attributes_write
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./attributes_write
 EX=$?
 if [ ! -f attributes.bp ]; then
     echo "ERROR: C version of attributes_write failed. No BP file is created. Exit code=$EX"
@@ -33,16 +36,16 @@ if [ ! -f attributes.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav attributes.bp | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav attributes.bp | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/attributes_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of attributes_write produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/attributes.bp | grep -v endianness\" to reference $SRCDIR/reference/attributes_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/attributes.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/attributes_bpls.txt"
     exit 1
 fi
 
 echo "Run C attributes_read"
-$MPIRUN $NP_MPIRUN $READPROCS ./attributes_read | sort > c_read.txt
+$MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./attributes_read | sort > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of attributes_read failed with exit code $EX"
diff --git a/tests/suite/tests/03_arrays.sh b/tests/suite/tests/03_arrays.sh
index 9d33f19..fd8011c 100755
--- a/tests/suite/tests/03_arrays.sh
+++ b/tests/suite/tests/03_arrays.sh
@@ -23,8 +23,11 @@ cp $TRUNKDIR/examples/C/arrays/arrays_read .
 cp $TRUNKDIR/examples/C/arrays/arrays_write .
 cp $TRUNKDIR/examples/C/arrays/arrays.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run C arrays_write"
-$MPIRUN $NP_MPIRUN $PROCS ./arrays_write
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./arrays_write
 EX=$?
 if [ ! -f arrays.bp ]; then
     echo "ERROR: C version of arrays_write failed. No BP file is created. Exit code=$EX"
@@ -32,16 +35,16 @@ if [ ! -f arrays.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav arrays.bp | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav arrays.bp | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/arrays_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of arrays_write produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/arrays.bp | grep -v endianness\" to reference $SRCDIR/reference/arrays_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/arrays.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/arrays_bpls.txt"
     exit 1
 fi
 
 echo "Run C arrays_read"
-$MPIRUN $NP_MPIRUN $PROCS ./arrays_read | sort > c_read.txt
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./arrays_read | sort > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of arrays_read failed with exit code $EX"
diff --git a/tests/suite/tests/04_global_array.sh b/tests/suite/tests/04_global_array.sh
index 74175e0..3398d45 100755
--- a/tests/suite/tests/04_global_array.sh
+++ b/tests/suite/tests/04_global_array.sh
@@ -24,8 +24,11 @@ cp $TRUNKDIR/examples/C/global-array/adios_global .
 cp $TRUNKDIR/examples/C/global-array/adios_read_global .
 cp $TRUNKDIR/examples/C/global-array/adios_global.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run C adios_global"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_global
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global
 EX=$?
 if [ ! -f adios_global.bp ]; then
     echo "ERROR: C version of adios_global failed. No BP file is created. Exit code=$EX"
@@ -33,16 +36,16 @@ if [ ! -f adios_global.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -la adios_global.bp -d -n 10  | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -la adios_global.bp -d -n 10  | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/global_array_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_global produced a file different from the reference."
-    echo "Compare \"bpls -la $PWD/adios_global.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/global_array_bpls.txt"
+    echo "Compare \"bpls -la $PWD/adios_global.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_bpls.txt"
     exit 1
 fi
 
 echo "Run C adios_read_global"
-$MPIRUN $NP_MPIRUN $READPROCS ./adios_read_global | sort > c_read.txt
+$MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_read_global | sort > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_read_global exited with $EX"
@@ -69,8 +72,11 @@ mv adios_global.bp adios_global_c.bp
 cp $TRUNKDIR/examples/Fortran/global-array/adios_global adios_global_f
 cp $TRUNKDIR/examples/Fortran/global-array/adios_global.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run Fortran adios_global_f"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_global_f
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global_f
 EX=$?
 if [ ! -f adios_global.bp ]; then
     echo "ERROR: Fortran version of adios_global failed. No BP file is created. Exit code=$EX"
@@ -78,11 +84,11 @@ if [ ! -f adios_global.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -la adios_global.bp -d -n 10 | grep -v endianness > f_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -la adios_global.bp -d -n 10 | grep -v -e endianness -e 'file size' > f_bpls.txt
 diff -q f_bpls.txt $SRCDIR/reference/global_array_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of adios_global produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/adios_global.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/global_array_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/adios_global.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_bpls.txt"
     exit 1
 fi
 
diff --git a/tests/suite/tests/05_global_array_time.sh b/tests/suite/tests/05_global_array_time.sh
index 9911bc1..7e37b08 100755
--- a/tests/suite/tests/05_global_array_time.sh
+++ b/tests/suite/tests/05_global_array_time.sh
@@ -23,8 +23,11 @@ cp $TRUNKDIR/examples/C/global-array-time/adios_globaltime .
 cp $TRUNKDIR/examples/C/global-array-time/adios_read_globaltime .
 cp $TRUNKDIR/examples/C/global-array-time/adios_globaltime.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run C adios_globaltime"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_globaltime
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_globaltime
 EX=$?
 if [ ! -f adios_globaltime.bp ]; then
     echo "ERROR: C version of adios_globaltime failed. No BP file is created. Exit code=$EX"
@@ -32,16 +35,15 @@ if [ ! -f adios_globaltime.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -la adios_globaltime.bp | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -la adios_globaltime.bp | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/global_array_time_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_globaltime produced a file different from the reference."
-    echo "Compare \"bpls -la $PWD/adios_globaltime.bp | grep -v endianness\" to reference $SRCDIR/reference/global_array_time_bpls.txt"
-    exit 1
+    echo "Compare \"bpls -la $PWD/adios_globaltime.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_time_bpls.txt"
 fi
 
 echo "Run C adios_read_globaltime"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_read_globaltime > c_read.txt
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_read_globaltime > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_read_globaltime exited with $EX"
@@ -68,8 +70,11 @@ mv adios_globaltime.bp adios_globaltime_c.bp
 cp $TRUNKDIR/examples/Fortran/global-array-time/adios_globaltime adios_globaltime_f
 cp $TRUNKDIR/examples/Fortran/global-array-time/adios_globaltime.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run Fortran adios_globaltime_f"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_globaltime_f
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_globaltime_f
 EX=$?
 if [ ! -f adios_globaltime.bp ]; then
     echo "ERROR: Fortran version of adios_globaltime failed. No BP file is created. Exit code=$EX"
@@ -77,11 +82,11 @@ if [ ! -f adios_globaltime.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -la adios_globaltime.bp | grep -v endianness > f_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -la adios_globaltime.bp | grep -v -e endianness -e 'file size' > f_bpls.txt
 diff -q f_bpls.txt $SRCDIR/reference/global_array_time_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of adios_globaltime produced a file different from the reference."
-    echo "Compare \"bpls -la $PWD/adios_globaltime.bp | grep -v endianness\" to reference $SRCDIR/reference/global_array_time_bpls.txt"
+    echo "Compare \"bpls -la $PWD/adios_globaltime.bp | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_time_bpls.txt"
     exit 1
 fi
 
diff --git a/tests/suite/tests/06_posix_method.sh b/tests/suite/tests/06_posix_method.sh
index 5cb4153..25dd67f 100755
--- a/tests/suite/tests/06_posix_method.sh
+++ b/tests/suite/tests/06_posix_method.sh
@@ -27,8 +27,11 @@ fi
 cp $SRCDIR/programs/posix_method .
 cp $SRCDIR/programs/posix_method.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run posix_method"
-$MPIRUN $NP_MPIRUN $PROCS ./posix_method
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./posix_method
 EX=$?
 if [ $EX != 0 ]; then
     echo "ERROR: posix method failed with exit code=$EX"
diff --git a/tests/suite/tests/07_global_array_no_xml.sh b/tests/suite/tests/07_global_array_no_xml.sh
index 5df7847..e8b3125 100755
--- a/tests/suite/tests/07_global_array_no_xml.sh
+++ b/tests/suite/tests/07_global_array_no_xml.sh
@@ -25,8 +25,8 @@ cp $TRUNKDIR/examples/C/global-array/adios_read_global_no_xml .
 
 echo "Run C adios_global_no_xml"
 ls -l ./adios_global_no_xml
-echo $MPIRUN $NP_MPIRUN $PROCS ./adios_global_no_xml
-$MPIRUN $NP_MPIRUN $PROCS ./adios_global_no_xml
+echo $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global_no_xml
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global_no_xml
 EX=$?
 if [ ! -f adios_global_no_xml.bp ]; then
     echo "ERROR: C version of adios_global_no_xml failed. No BP file is created. Exit code=$EX"
@@ -34,16 +34,16 @@ if [ ! -f adios_global_no_xml.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav adios_global_no_xml.bp -d -n 10 | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav adios_global_no_xml.bp -d -n 10 | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/global_array_no_xml_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_global_no_xml produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/adios_global_no_xml.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/global_array_no_xml_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/adios_global_no_xml.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_no_xml_bpls.txt"
     exit 1
 fi
 
 echo "Run C adios_read_global_no_xml"
-$MPIRUN $NP_MPIRUN $READPROCS ./adios_read_global_no_xml > c_read.txt
+$MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_read_global_no_xml > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of adios_read_global_no_xml exited with $EX"
@@ -69,8 +69,11 @@ mv adios_global_no_xml.bp adios_global_no_xml_c.bp
 cp $TRUNKDIR/examples/Fortran/global-array/adios_global_no_xml adios_global_f
 cp $TRUNKDIR/examples/Fortran/global-array/adios_global.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run Fortran adios_global_f"
-$MPIRUN $NP_MPIRUN $PROCS ./adios_global_f
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_global_f
 EX=$?
 if [ ! -f adios_global_no_xml.bp ]; then
     echo "ERROR: Fortran version of adios_global failed. No BP file is created. Exit code=$EX"
@@ -78,11 +81,11 @@ if [ ! -f adios_global_no_xml.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav adios_global_no_xml.bp -d -n 10 | grep -v endianness > f_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav adios_global_no_xml.bp -d -n 10 | grep -v -e endianness -e 'file size' > f_bpls.txt
 diff -q f_bpls.txt $SRCDIR/reference/global_array_no_xml_f_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of adios_global produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/adios_global_no_xml.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/global_array_no_xml_f_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/adios_global_no_xml.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/global_array_no_xml_f_bpls.txt"
     exit 1
 fi
 
diff --git a/tests/suite/tests/08_amr_write_read.sh b/tests/suite/tests/08_amr_write_read.sh
index dbab05b..76d3d8b 100755
--- a/tests/suite/tests/08_amr_write_read.sh
+++ b/tests/suite/tests/08_amr_write_read.sh
@@ -24,13 +24,16 @@ cp $SRCDIR/programs/adios_amr_write.xml .
 cp $SRCDIR/programs/adios_staged_read .
 cp $SRCDIR/programs/adios_staged_read_v2 .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 for ((m=1; m <= 2 ; m++))
 do
     echo "Run C adios_amr_write"
     ls -l ./adios_amr_write
-    echo $MPIRUN $NP_MPIRUN $PROCS ./adios_amr_write $m
+    echo $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_amr_write $m
     rm -f *.bp
-    $MPIRUN $NP_MPIRUN $PROCS ./adios_amr_write $m
+    $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_amr_write $m
     EX=$?
     ls -l ./adios_amr_write.bp
     if [ ! -f adios_amr_write.bp ]; then
@@ -44,8 +47,8 @@ do
     export chunk_size=64
     for ((n=1; n <= 5 ; n++))
     do
-        echo $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read $n
-        $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read $n| grep -v aggregator | grep [0-9] > 08_amr_write_read_$n.txt
+        echo $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read $n
+        $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read $n| grep -v aggregator | grep [0-9] > 08_amr_write_read_$n.txt
         EX=$?
        echo "Check output with reference"
        diff -q 08_amr_write_read_$n.txt $SRCDIR/reference/amr_write_read_$n.txt
@@ -61,8 +64,8 @@ do
     export chunk_size=64
     for ((n=1; n <= 5 ; n++))
     do
-        echo $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read_v2 $n
-        $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read_v2 $n| grep -v aggregator | grep [0-9] > 08_amr_write_read_$n.txt
+        echo $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read_v2 $n
+        $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read_v2 $n| grep -v aggregator | grep [0-9] > 08_amr_write_read_$n.txt
         EX=$?
        echo "Check output with reference"
        diff -q 08_amr_write_read_$n.txt $SRCDIR/reference/amr_write_read_$n.txt
diff --git a/tests/suite/tests/09_amr_write_read_2vars.sh b/tests/suite/tests/09_amr_write_read_2vars.sh
index d173058..5147a13 100755
--- a/tests/suite/tests/09_amr_write_read_2vars.sh
+++ b/tests/suite/tests/09_amr_write_read_2vars.sh
@@ -23,13 +23,16 @@ cp $SRCDIR/programs/adios_amr_write_2vars .
 cp $SRCDIR/programs/adios_amr_write_2vars.xml .
 cp $SRCDIR/programs/adios_staged_read_2vars .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 for ((m=1; m <= 2 ; m++))
 do
     echo "Run C adios_amr_write_2vars"
     ls -l ./adios_amr_write_2vars
-    echo $MPIRUN $NP_MPIRUN $PROCS ./adios_amr_write_2vars $m
+    echo $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_amr_write_2vars $m
     rm -f *.bp
-    $MPIRUN $NP_MPIRUN $PROCS ./adios_amr_write_2vars $m
+    $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./adios_amr_write_2vars $m
     EX=$?
     ls -l ./adios_amr_write_2vars.bp
     if [ ! -f adios_amr_write_2vars.bp ]; then
@@ -43,8 +46,8 @@ do
     export chunk_size=64
     for ((n=1; n <= 5 ; n++))
     do
-        echo $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read_2vars $n
-        $MPIRUN $NP_MPIRUN $READPROCS ./adios_staged_read_2vars $n| grep -v aggregator | grep [0-9] > 09_amr_write_read_$n.txt
+        echo $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read_2vars $n
+        $MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./adios_staged_read_2vars $n| grep -v aggregator | grep [0-9] > 09_amr_write_read_$n.txt
         EX=$?
        echo "Check output with reference"
        diff -q 09_amr_write_read_$n.txt $SRCDIR/reference/amr_write_read_2vars_$n.txt
diff --git a/tests/suite/tests/10_write_read.sh b/tests/suite/tests/10_write_read.sh
index 9d7c63c..50ddda7 100755
--- a/tests/suite/tests/10_write_read.sh
+++ b/tests/suite/tests/10_write_read.sh
@@ -22,8 +22,11 @@ fi
 cp $SRCDIR/programs/write_read .
 cp $SRCDIR/programs/write_read.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run write_read"
-$MPIRUN $NP_MPIRUN $PROCS ./write_read
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./write_read
 EX=$?
 if [ ! -f write_read_1.bp ]; then
     echo "ERROR: write_read failed at creating the 1st BP file, write_read_1.bp. Exit code=$EX"
diff --git a/tests/suite/tests/11_write_alternate.sh b/tests/suite/tests/11_write_alternate.sh
index f3aed4e..a3d2b7a 100755
--- a/tests/suite/tests/11_write_alternate.sh
+++ b/tests/suite/tests/11_write_alternate.sh
@@ -23,8 +23,11 @@ fi
 cp $SRCDIR/programs/write_alternate .
 cp $SRCDIR/programs/write_alternate.xml .
 
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
 echo "Run write_alternate"
-$MPIRUN $NP_MPIRUN $PROCS ./write_alternate
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./write_alternate
 EX=$?
 if [ ! -f write_alternate.bp ]; then
     echo "ERROR: write_alternate failed at creating the BP file, write_alternate.bp. Exit code=$EX"
diff --git a/tests/suite/tests/12_selections.sh b/tests/suite/tests/12_selections.sh
index 0b62b5a..61b00f5 100755
--- a/tests/suite/tests/12_selections.sh
+++ b/tests/suite/tests/12_selections.sh
@@ -22,7 +22,7 @@ fi
 cp $SRCDIR/programs/selections .
 
 echo "Run selections"
-$MPIRUN $NP_MPIRUN $PROCS ./selections
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./selections
 EX=$?
 if [ ! -f selections.bp ]; then
     echo "ERROR: selections failed at creating the BP file, selections.bp. Exit code=$EX"
diff --git a/tests/suite/tests/13_write_byid.sh b/tests/suite/tests/13_write_byid.sh
index 2ba02e3..e12e6f5 100755
--- a/tests/suite/tests/13_write_byid.sh
+++ b/tests/suite/tests/13_write_byid.sh
@@ -25,8 +25,8 @@ cp $TRUNKDIR/examples/C/global-array/read_no_xml_write_byid .
 
 echo "Run C no_xml_write_byid"
 ls -l ./no_xml_write_byid
-echo $MPIRUN $NP_MPIRUN $PROCS ./no_xml_write_byid
-$MPIRUN $NP_MPIRUN $PROCS ./no_xml_write_byid
+echo $MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./no_xml_write_byid
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./no_xml_write_byid
 EX=$?
 if [ ! -f no_xml_write_byid.bp ]; then
     echo "ERROR: C version of no_xml_write_byid failed. No BP file is created. Exit code=$EX"
@@ -34,16 +34,16 @@ if [ ! -f no_xml_write_byid.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav no_xml_write_byid.bp -d -n 10 | grep -v endianness > c_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav no_xml_write_byid.bp -d -n 10 | grep -v -e endianness -e 'file size' > c_bpls.txt
 diff -q c_bpls.txt $SRCDIR/reference/no_xml_write_byid_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: C version of no_xml_write_byid produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/no_xml_write_byid.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/no_xml_write_byid_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/no_xml_write_byid.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/no_xml_write_byid_bpls.txt"
     exit 1
 fi
 
 echo "Run C read_no_xml_write_byid"
-$MPIRUN $NP_MPIRUN $READPROCS ./read_no_xml_write_byid > c_read.txt
+$MPIRUN $NP_MPIRUN $READPROCS $EXEOPT ./read_no_xml_write_byid > c_read.txt
 EX=$?
 if [ $? != 0 ]; then
     echo "ERROR: C version of read_no_xml_write_byid exited with $EX"
@@ -69,7 +69,7 @@ mv no_xml_write_byid.bp no_xml_write_byid_c.bp
 cp $TRUNKDIR/examples/Fortran/global-array/no_xml_write_byid no_xml_write_byid_f
 
 echo "Run Fortran no_xml_write_byid"
-$MPIRUN $NP_MPIRUN $PROCS ./no_xml_write_byid_f
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./no_xml_write_byid_f
 EX=$?
 if [ ! -f no_xml_write_byid.bp ]; then
     echo "ERROR: Fortran version of no_xml_write_byid failed. No BP file is created. Exit code=$EX"
@@ -77,11 +77,11 @@ if [ ! -f no_xml_write_byid.bp ]; then
 fi
 
 echo "Check output with bpls"
-$TRUNKDIR/utils/bpls/bpls -lav no_xml_write_byid.bp -d -n 10 | grep -v endianness > f_bpls.txt
+$TRUNKDIR/utils/bpls/bpls -lav no_xml_write_byid.bp -d -n 10 | grep -v -e endianness -e 'file size' > f_bpls.txt
 diff -q f_bpls.txt $SRCDIR/reference/no_xml_write_byid_f_bpls.txt
 if [ $? != 0 ]; then
     echo "ERROR: Fortran version of no_xml_write_byid produced a file different from the reference."
-    echo "Compare \"bpls -lav $PWD/no_xml_write_byid.bp -d -n 10 | grep -v endianness\" to reference $SRCDIR/reference/no_xml_write_byid_f_bpls.txt"
+    echo "Compare \"bpls -lav $PWD/no_xml_write_byid.bp -d -n 10 | grep -v -e endianness -e 'file size'\" to reference $SRCDIR/reference/no_xml_write_byid_f_bpls.txt"
     exit 1
 fi
 
diff --git a/tests/suite/tests/14_pathtest.sh b/tests/suite/tests/14_pathtest.sh
new file mode 100755
index 0000000..e8dcb12
--- /dev/null
+++ b/tests/suite/tests/14_pathtest.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+# Test different path+name combinations in ADIOS xml
+# Uses ../programs/path_test
+#
+# Environment variables set by caller:
+# MPIRUN        Run command
+# NP_MPIRUN     Run commands option to set number of processes
+# MAXPROCS      Max number of processes allowed
+# HAVE_FORTRAN  yes or no
+# SRCDIR        Test source dir (.. of this script)
+# TRUNKDIR      ADIOS trunk dir
+
+PROCS=1
+
+if [ $MAXPROCS -lt $PROCS ]; then
+    echo "WARNING: Needs $PROCS processes at least"
+    exit 77  # not failure, just skip
+fi
+
+# copy codes and inputs to . 
+cp $SRCDIR/programs/path_test .
+cp $SRCDIR/programs/path_test.xml .
+
+# Insert transform=X if requested by user
+add_transform_to_xmls
+
+echo "Run path_test"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./path_test
+EX=$?
+if [ ! -f path_test_1.bp ]; then
+    echo "ERROR: path_test failed at creating the BP file, path_test_1.bp. Exit code=$EX"
+    exit 1
+fi
+
+if [ ! -f path_test_2.bp ]; then
+    echo "ERROR: path_test failed at creating the BP file, path_test_2.bp. Exit code=$EX"
+    exit 1
+fi
+
+if [ $EX != 0 ]; then
+    echo "ERROR: path_test failed with exit code=$EX"
+    exit 1
+fi
+
diff --git a/tests/suite/tests/12_selections.sh b/tests/suite/tests/15_reuse_dim.sh
similarity index 58%
copy from tests/suite/tests/12_selections.sh
copy to tests/suite/tests/15_reuse_dim.sh
index 0b62b5a..67202ac 100755
--- a/tests/suite/tests/12_selections.sh
+++ b/tests/suite/tests/15_reuse_dim.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
-# Test if adios can read data with points selection
-# Uses ../programs/selections
+# Test using one dimension scalar twice with different values for two arrays
+# Uses ../programs/reuse_dim
 #
 # Environment variables set by caller:
 # MPIRUN        Run command
@@ -19,18 +19,18 @@ if [ $MAXPROCS -lt $PROCS ]; then
 fi
 
 # copy codes and inputs to . 
-cp $SRCDIR/programs/selections .
+cp $SRCDIR/programs/reuse_dim .
 
-echo "Run selections"
-$MPIRUN $NP_MPIRUN $PROCS ./selections
+echo "Run reuse_dim"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./reuse_dim
 EX=$?
-if [ ! -f selections.bp ]; then
-    echo "ERROR: selections failed at creating the BP file, selections.bp. Exit code=$EX"
+if [ ! -f reuse_dim.bp ]; then
+    echo "ERROR: reuse_dim failed at creating the BP file, reuse_dim.bp. Exit code=$EX"
     exit 1
 fi
 
 if [ $EX != 0 ]; then
-    echo "ERROR: selections failed with exit code=$EX"
+    echo "ERROR: reuse_dim failed with exit code=$EX"
     exit 1
 fi
 
diff --git a/tests/suite/tests/16_transform_write_read.sh b/tests/suite/tests/16_transform_write_read.sh
new file mode 100755
index 0000000..0d9e362
--- /dev/null
+++ b/tests/suite/tests/16_transform_write_read.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# Test if adios can write and read scalars correctly
+# Uses codes from examples/C/scalars and examples/Fortran/scalars 
+#
+# Environment variables set by caller:
+# MPIRUN        Run command
+# NP_MPIRUN     Run command's option to set number of processes
+# MAXPROCS      Max number of processes allowed
+# HAVE_FORTRAN  yes or no
+# SRCDIR        Test source dir (.. of this script)
+# TRUNKDIR      ADIOS trunk dir
+
+PROCS=16
+TEST_NAME=transforms_read_write
+PROGRAM_NAME=adios_${TEST_NAME}
+OUTPUT_FILENAME=${PROGRAM_NAME}.bp
+
+cp ${SRCDIR}/programs/${PROGRAM_NAME} .
+cp ${SRCDIR}/programs/adios_transforms.xml .
+
+echo "Run C ${PROGRAM_NAME}"
+$MPIRUN $NP_MPIRUN $PROCS $EXEOPT ./${PROGRAM_NAME}
+ 
+EX=$?
+if [ ! -f ${OUTPUT_FILENAME} ]; then
+    echo "ERROR: C version of ${PROGRAM_NAME} failed. No BP file is created. Exit code=$EX"
+    exit 1
+fi
+
+echo "Check output with bpls"
+$TRUNKDIR/utils/bpls/bpls -la ${OUTPUT_FILENAME} | grep -v -e endianness -e 'file size' > ${TEST_NAME}_bpls.txt
+
+# check scalars first
+echo "  check scalars first"
+grep -v "t_" ${TEST_NAME}_bpls.txt > c1.txt
+grep -v "t_" $SRCDIR/reference/${TEST_NAME}_bpls.txt > c2.txt
+diff -q c1.txt c2.txt
+if [ $? != 0 ]; then
+    echo "ERROR: C version of ${PROGRAM_NAME} produced a file different from the reference."
+    echo "Some of the scalars don't match with the reference. "
+    echo "Compare \"bpls -la $PWD/${OUTPUT_FILENAME} | grep -v -e "t_" -e endianness -e 'file size'\" to reference $SRCDIR/reference/${TEST_NAME}_bpls.txt"
+    exit 1
+fi
+rm c1.txt c2.txt
+
+for VAR in t_none t_identity t_aplod t_isobar
+do
+    echo "  $VAR"
+    grep "$VAR"  ${TEST_NAME}_bpls.txt > c1.txt
+    if [ $? == 0 ]; then
+        grep "$VAR"  $SRCDIR/reference/${TEST_NAME}_bpls.txt > c2.txt
+        if [ $? != 0 ]; then
+            echo "ERROR: C version of ${PROGRAM_NAME} produced a file different from the reference."
+            echo "Variable $VAR does not match with the reference. "
+            echo "Compare \"bpls -la $PWD/${OUTPUT_FILENAME} | grep -v -e "t_" -e endianness -e 'file size'\" to reference $SRCDIR/reference/${TEST_NAME}_bpls.txt"
+            exit 1
+        fi
+    else
+        echo "  $VAR is not in the output. Skip check."
+    fi
+    rm -f c1.txt c2.txt
+done
+
+
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 26bfef1..2b50ab3 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -3,6 +3,7 @@ add_subdirectory(bpdump)
 add_subdirectory(bp2ascii)
 add_subdirectory(bpsplit)
 add_subdirectory(bpls)
+add_subdirectory(bpdiff)
 
 if(BUILD_WRITE)
   add_subdirectory(adios_lint)
@@ -18,7 +19,7 @@ if(HAVE_NETCDF)
 endif(HAVE_NETCDF)
 
 add_subdirectory(skel)
-
+add_subdirectory(skeldump)
 
 #find_library(ADIOS_INTERNAL_NOMPI_LIB adios_internal_nompi ${PROJECT_BINARY_DIR}/src)
 #if(${ADIOS_INTERNAL_NOMPI_LIB}-NOTFOUND)
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 30e6e92..324078a 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS= gpp bpdump bp2ascii bpsplit bpls
+SUBDIRS= gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump
 if BUILD_WRITE
 SUBDIRS += adios_lint bp2bp
 endif
diff --git a/utils/Makefile.in b/utils/Makefile.in
index a13c5a0..b0923f5 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -39,7 +39,11 @@ host_triplet = @host@
 subdir = utils
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -49,14 +53,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -82,8 +90,8 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
 	distdir
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = gpp bpdump bp2ascii bpsplit bpls adios_lint bp2bp bp2h5 \
-	bp2ncd skel
+DIST_SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
+	adios_lint bp2bp bp2h5 bp2ncd skel
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -132,12 +140,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -200,6 +217,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -272,7 +292,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -327,8 +356,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = gpp bpdump bp2ascii bpsplit bpls $(am__append_1) \
-	$(am__append_2) $(am__append_3) skel
+SUBDIRS = gpp bpdump bp2ascii bpsplit bpls bpdiff skeldump \
+	$(am__append_1) $(am__append_2) $(am__append_3) skel
 all: all-recursive
 
 .SUFFIXES:
diff --git a/utils/adios_lint/Makefile.am b/utils/adios_lint/Makefile.am
index b1cb31d..3f8f2c5 100644
--- a/utils/adios_lint/Makefile.am
+++ b/utils/adios_lint/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src  -I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES += -I$(top_srcdir)/src  -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/adios_lint/Makefile.in b/utils/adios_lint/Makefile.in
index 7954aac..ce1d8c9 100644
--- a/utils/adios_lint/Makefile.in
+++ b/utils/adios_lint/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = adios_lint$(EXEEXT)
 subdir = utils/adios_lint
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -115,12 +123,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -185,6 +202,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -257,7 +277,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -312,8 +341,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 adios_lint_SOURCES = adios_lint.c
 adios_lint_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
diff --git a/utils/bp2ascii/Makefile.am b/utils/bp2ascii/Makefile.am
index 17b0738..5b32d35 100644
--- a/utils/bp2ascii/Makefile.am
+++ b/utils/bp2ascii/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bp2ascii/Makefile.in b/utils/bp2ascii/Makefile.in
index ae31010..4dd471b 100644
--- a/utils/bp2ascii/Makefile.in
+++ b/utils/bp2ascii/Makefile.in
@@ -38,7 +38,11 @@ noinst_PROGRAMS = bp2ascii$(EXEEXT)
 subdir = utils/bp2ascii
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -113,12 +121,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -183,6 +200,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -255,7 +275,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -310,8 +339,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 bp2ascii_SOURCES = bp2ascii.c 
 bp2ascii_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
diff --git a/utils/bp2ascii/bp2ascii.c b/utils/bp2ascii/bp2ascii.c
index 5965818..859f28a 100644
--- a/utils/bp2ascii/bp2ascii.c
+++ b/utils/bp2ascii/bp2ascii.c
@@ -106,7 +106,7 @@ int main (int argc, char ** argv)
     print_process_group_index (pg_root);
 
     adios_posix_read_vars_index (b);
-    adios_parse_vars_index_v1 (b, &vars_root);
+    adios_parse_vars_index_v1 (b, &vars_root, NULL, NULL);
 
     while (vars_root)
     {
diff --git a/utils/bp2bp/CMakeLists.txt b/utils/bp2bp/CMakeLists.txt
index 995b358..733bb44 100644
--- a/utils/bp2bp/CMakeLists.txt
+++ b/utils/bp2bp/CMakeLists.txt
@@ -4,7 +4,11 @@ include_directories(${PROJECT_SOURCE_DIR}/utils/bp2bp)
 link_directories(${PROJECT_BINARY_DIR}/utils/bp2bp)
 
 add_executable(bp2bp bp2bp.c)
-target_link_libraries(bp2bp adios ${ADIOSLIB_LDADD})
-set_target_properties(bp2bp PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}ADIOS_USE_READ_API_1 ${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS}")
+target_link_libraries(bp2bp adios ${ADIOSLIB_LDADD} ${MPI_C_LIBRARIES})
+set_target_properties(bp2bp PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}ADIOS_USE_READ_API_1 ${ADIOSLIB_CPPFLAGS} ${ADIOSLIB_CFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${MPI_C_COMPILE_FLAGS}")
+
+if(MPI_LINK_FLAGS)
+   set_target_properties(bp2bp PROPERTIES LINK_FLAGS "${MPI_C_LINK_FLAGS}")
+endif()
 
 install(PROGRAMS ${PROJECT_BINARY_DIR}/utils/bp2bp/bp2bp DESTINATION ${bindir})
diff --git a/utils/bp2bp/Makefile.am b/utils/bp2bp/Makefile.am
index 8ced2f7..caed25e 100644
--- a/utils/bp2bp/Makefile.am
+++ b/utils/bp2bp/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bp2bp/Makefile.in b/utils/bp2bp/Makefile.in
index 1eca5d5..9c8b2f1 100644
--- a/utils/bp2bp/Makefile.in
+++ b/utils/bp2bp/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bp2bp$(EXEEXT)
 subdir = utils/bp2bp
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -114,12 +122,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 
 #if USE_PARALLEL_COMPILER
 CC = $(MPICC)
@@ -184,6 +201,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -256,7 +276,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -311,8 +340,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 bp2bp_SOURCES = bp2bp.c
 bp2bp_CPPFLAGS = ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_CPPFLAGS) $(ADIOSLIB_CFLAGS) $(ADIOSLIB_EXTRA_CPPFLAGS) 
diff --git a/utils/bp2h5/CMakeLists.txt b/utils/bp2h5/CMakeLists.txt
index 3f3cd18..09cfdde 100644
--- a/utils/bp2h5/CMakeLists.txt
+++ b/utils/bp2h5/CMakeLists.txt
@@ -11,3 +11,5 @@ else()
   target_link_libraries(bp2h5 adiosread_nompi ${ADIOSREADLIB_SEQ_LDADD} ${HDF5_LIBS})
   set_target_properties(bp2h5 PROPERTIES COMPILE_FLAGS "${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_SEQ_CPPFLAGS} ${HDF5_FLAGS}")
 endif()
+
+install(PROGRAMS ${PROJECT_BINARY_DIR}/utils/bp2h5/bp2h5 DESTINATION ${bindir})
diff --git a/utils/bp2h5/Makefile.am b/utils/bp2h5/Makefile.am
index 28ffa89..e70fe65 100644
--- a/utils/bp2h5/Makefile.am
+++ b/utils/bp2h5/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bp2h5/Makefile.in b/utils/bp2h5/Makefile.in
index 3d36736..34c7df2 100644
--- a/utils/bp2h5/Makefile.in
+++ b/utils/bp2h5/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bp2h5$(EXEEXT)
 subdir = utils/bp2h5
 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -118,12 +126,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -188,6 +205,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -260,7 +280,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -315,8 +344,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 bp2h5_SOURCES = bp2h5.c
 @USE_PARALLEL_COMPILER_FALSE at bp2h5_CPPFLAGS = ${MACRODEFFLAG}H5_USE_16_API ${MACRODEFFLAG}ADIOS_USE_READ_API_1 $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS) $(HDF5_CPPFLAGS)
diff --git a/utils/bp2ncd/CMakeLists.txt b/utils/bp2ncd/CMakeLists.txt
index c7bf936..25e6eff 100644
--- a/utils/bp2ncd/CMakeLists.txt
+++ b/utils/bp2ncd/CMakeLists.txt
@@ -8,8 +8,8 @@ link_directories(${PROJECT_BINARY_DIR}/utils/bp2ncd)
 add_executable(bp2ncd bp2ncd.c)
 
 if(USE_PARALLEL_COMPILER)
-  set(bp2ncd_CPPFLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
-  set(bp2ncd_CFLAGS "${ADIOSLIB_CFLAGS}")
+  set(bp2ncd_CPPFLAGS "${NETCDF_CPPFLAGS} ${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_CPPFLAGS}")
+  set(bp2ncd_CFLAGS "${NETCDF_CFLAGS} ${ADIOSLIB_CFLAGS}")
   target_link_libraries(bp2ncd adios ${ADIOSLIB_LDADD})
   set_target_properties(bp2ncd PROPERTIES COMPILE_FLAGS "${bp2ncd_CPPFLAGS} ${bp2ncd_CFLAGS}")
 else(USE_PARALLEL_COMPILER)
@@ -18,4 +18,5 @@ else(USE_PARALLEL_COMPILER)
   set_target_properties(bp2ncd PROPERTIES COMPILE_FLAGS "${bp2ncd_CPPFLAGS}")
 endif(USE_PARALLEL_COMPILER)
 
-install(FILES bp2ncd.h DESTINATION ${PROJECT_BINARY_DIR}/utils/bp2ncd)
+#install(FILES bp2ncd.h DESTINATION ${PROJECT_BINARY_DIR}/utils/bp2ncd)
+install(PROGRAMS ${PROJECT_BINARY_DIR}/utils/bp2ncd/bp2ncd DESTINATION ${bindir})
diff --git a/utils/bp2ncd/Makefile.am b/utils/bp2ncd/Makefile.am
index 07c555b..95d643b 100644
--- a/utils/bp2ncd/Makefile.am
+++ b/utils/bp2ncd/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bp2ncd/Makefile.in b/utils/bp2ncd/Makefile.in
index 4450104..b0aefb5 100644
--- a/utils/bp2ncd/Makefile.in
+++ b/utils/bp2ncd/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bp2ncd$(EXEEXT)
 subdir = utils/bp2ncd
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -117,12 +125,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -187,6 +204,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -259,7 +279,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -314,8 +343,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 bp2ncd_SOURCES = bp2ncd.c
 @USE_PARALLEL_COMPILER_FALSE at bp2ncd_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
diff --git a/utils/bp2ncd/bp2ncd.c b/utils/bp2ncd/bp2ncd.c
index 182091c..03b292c 100644
--- a/utils/bp2ncd/bp2ncd.c
+++ b/utils/bp2ncd/bp2ncd.c
@@ -31,7 +31,10 @@ void copy_buffer(struct adios_bp_buffer_struct_v1 *dest
 
     memcpy (dest, src, sizeof(struct adios_bp_buffer_struct_v1));
 }
+
 static int verbose=0;
+static int is_input_fortran = 0; // 0 = C generated BP file, 1 = Fortran generated BP file
+
 int ncd_gen_name (char *fullname, char *path, char *name) {
     int i;
     char *new_path = strdup (path);
@@ -120,7 +123,7 @@ int ncd_attr_str_ds (int ncid
 
     if ( attribute->is_var == adios_flag_yes) {
         adios_posix_read_vars_index (ptr_buffer);
-        adios_parse_vars_index_v1 (ptr_buffer, &vars_root);
+        adios_parse_vars_index_v1 (ptr_buffer, &vars_root, NULL, NULL);
         //print_vars_index ( vars_root);
         while (vars_root) {
             if (vars_root->id == attribute->var_id) {
@@ -146,7 +149,7 @@ int ncd_attr_str_ds (int ncid
                            for (i = 0; i < var_dims_count; i++) {
                                 if (var_dims [i].id == dims->dimension.var_id ){
                                     len *= var_dims [i]. rank;
-			            break;
+                                    break;
                                 } 
                            }
                       }
@@ -234,7 +237,7 @@ int ncd_dataset (int ncid
     
     memset(dimids,-1,10*sizeof(int));
     if(!strcmp(path,"") && !strcmp(name,""))
-	return 0;
+        return 0;
     ncd_gen_name (fullname, path, name);
    
     //printf(DIVIDER);
@@ -248,45 +251,36 @@ int ncd_dataset (int ncid
         if (dims->dimension.time_index == adios_flag_yes) {
             time_flag = adios_flag_yes;
             time_dimrank = maxrank-1;
+            //fprintf(stderr, "Time dim rank = %d\n",time_dimrank); 
         } 
         dims = dims->next;
     } 
+    //fprintf(stderr, "variable %s, ndims = %d time_flag = %d\n",ptr_var_header->name, maxrank, time_flag); 
     dims = ptr_var_header->dims;
     time_index = 0; 
     if (dims) {
-        for (j = 0; j < maxrank; j++) {
-            if (time_flag==adios_flag_yes && time_dimrank >0 ) {
-//		  //printf("%d %d\n",time_dimrank,j); 
-               if (j < time_dimrank)
-                   rank = j+1;
-               else if(j==time_dimrank)
-                   rank = 0;
-               else  
-                   rank = j;
-            }
-            else
-               rank = j;
-//            printf("rank cal:time_index=%d j=%d rank=%d\n",time_dimrank,j,rank);
+        for (rank = 0; rank < maxrank; rank++) {
+            //            printf("rank cal:time_index=%d j=%d rank=%d\n",time_dimrank,j,rank);
             /**********************************************************************
-            * Process dataset which has global bounds with dynamic dimension value
-            **********************************************************************/
+             * Process dataset which has global bounds with dynamic dimension value
+             **********************************************************************/
             if ( dims->global_dimension.var_id != 0 ) {
-                    for (i = 0; i < var_dims_count; i++) {
-                        if (var_dims [i].id == dims->global_dimension.var_id) {
-                            dimids [rank] = var_dims [i]. nc_dimid;
-                            break;
+                for (i = 0; i < var_dims_count; i++) {
+                    if (var_dims [i].id == dims->global_dimension.var_id) {
+                        dimids [rank] = var_dims [i]. nc_dimid;
+                        break;
+                    }
+                }
+                if (i==var_dims_count) {
+                    adios_posix_read_attributes_index (ptr_buffer);
+                    adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
+                    while (atts_root) {
+                        if (atts_root->id == dims->global_dimension.var_id) {
+                            dimids[ rank] = *(int*)atts_root->characteristics->value;
+                            break; 
                         }
+                        atts_root = atts_root->next; 
                     }
-                    if (i==var_dims_count) {
-                        adios_posix_read_attributes_index (ptr_buffer);
-			adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
-	                while (atts_root) {
-		            if (atts_root->id == dims->global_dimension.var_id) {
-                                dimids[ rank] = *(int*)atts_root->characteristics->value;
-			        break; 
-			    }
-                            atts_root = atts_root->next; 
-	                }
                 }
                 if (dims->dimension.var_id!=0 ) {
                     for (i = 0; i < var_dims_count; i++){
@@ -297,15 +291,15 @@ int ncd_dataset (int ncid
                     }
                     if (i==var_dims_count) {
                         adios_posix_read_attributes_index (ptr_buffer);
-			adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
-			//print_attributes_index ( atts_root);
-			while (atts_root) {
-		            if (atts_root->id == dims->dimension.var_id) {
+                        adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
+                        //print_attributes_index ( atts_root);
+                        while (atts_root) {
+                            if (atts_root->id == dims->dimension.var_id) {
                                 count_dims [ rank] = *(int*)atts_root->characteristics->value;
-				break; 
-			    } 
-			    atts_root = atts_root->next;
-			}
+                                break; 
+                            } 
+                            atts_root = atts_root->next;
+                        }
                     }
                 }
                 else
@@ -313,36 +307,36 @@ int ncd_dataset (int ncid
 
                 if ( dims->local_offset.var_id != 0 ) {
                     for (i = 0; i < var_dims_count; i++){
-                         if (var_dims [i].id == dims->local_offset.var_id){
-                             start_dims[rank]=var_dims [i]. rank;;
-                             break;
-                         }
+                        if (var_dims [i].id == dims->local_offset.var_id){
+                            start_dims[rank]=var_dims [i]. rank;;
+                            break;
+                        }
                     }
                     if (i==var_dims_count) {
                         adios_posix_read_attributes_index (ptr_buffer);
-			adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
-			while (atts_root) {
-		            if (atts_root->id == dims->local_offset.var_id) {
+                        adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
+                        while (atts_root) {
+                            if (atts_root->id == dims->local_offset.var_id) {
                                 start_dims [rank] = *(int*)atts_root->characteristics->value;
-				break; 
-			    } 
-			    atts_root = atts_root->next;
-			}
+                                break; 
+                            } 
+                            atts_root = atts_root->next;
+                        }
                     }
                 }
                 else{
-                         start_dims[ rank]=dims->local_offset.rank;
+                    start_dims[ rank]=dims->local_offset.rank;
                 }
             }
             /**********************************************************************
-            * Process dataset which has global bounds with constant dimension value
-            ***********************************************************************/
+             * Process dataset which has global bounds with constant dimension value
+             ***********************************************************************/
             else if (dims->global_dimension.rank !=0 ) {
                 //printf(" \tconstant global_info: %s rank: %d\n",fullname, dimids[rank]);
                 dimids[rank] = dims->global_dimension.rank;
                 if (dims->dimension.var_id!=0 ) {
                     for (i = 0; i < var_dims_count; i++){
-                         if (var_dims [i].id == dims->dimension.var_id)
+                        if (var_dims [i].id == dims->dimension.var_id)
                             count_dims[rank]=var_dims [i]. rank;
                     }
                 }
@@ -351,33 +345,33 @@ int ncd_dataset (int ncid
                 if (dims->local_offset.var_id!=0 ) {
                     for (i = 0; i < var_dims_count; i++){
                         if (var_dims [i].id == dims->local_offset.var_id)
-                                 start_dims[rank]=var_dims [i]. rank;
+                            start_dims[rank]=var_dims [i]. rank;
                     }
                 }
                 else
                     start_dims[rank]=dims->local_offset.rank;
             }
             /*******************************************
-            * Process dataset which has no global bounds
-            ********************************************/
+             * Process dataset which has no global bounds
+             ********************************************/
             else {
                 //printf("\tdim: %s %d\n",atts_root->attr_name,dims->dimension.rank);
                 if ( dims->dimension.var_id!=0
-                   ||time_flag == adios_flag_yes) {
+                        ||time_flag == adios_flag_yes) {
                     if (dims->dimension.rank!=0) {
-                            sprintf(dimname,"%s_%d",fullname,rank);
-                            dimids[rank]=-1;
-                            nc_inq_dimid(ncid, dimname, &dimids[rank]); 
-                            if (dimids [rank] <= 0) 
-                                retval=nc_def_dim (ncid, dimname,dims->dimension.rank,&dimids[rank]);
-                            start_dims[rank] = 0;
-         		    count_dims[rank] = dims->dimension.rank;
-                            fprintf(stderr,"\tdim[%d]: c(%d):s(%d): dimid=%d\n"
-                                  ,rank 
-                                  ,count_dims[rank] 
-                                  ,start_dims[rank]
-                                  ,dimids[rank]
-                                  );
+                        sprintf(dimname,"%s_%d",fullname,rank);
+                        dimids[rank]=-1;
+                        nc_inq_dimid(ncid, dimname, &dimids[rank]); 
+                        if (dimids [rank] <= 0) 
+                            retval=nc_def_dim (ncid, dimname,dims->dimension.rank,&dimids[rank]);
+                        start_dims[rank] = 0;
+                        count_dims[rank] = dims->dimension.rank;
+                        fprintf(stderr,"\tdim[%d]: c(%d):s(%d): dimid=%d\n"
+                                ,rank 
+                                ,count_dims[rank] 
+                                ,start_dims[rank]
+                                ,dimids[rank]
+                               );
 
                     }
                     else {
@@ -386,69 +380,69 @@ int ncd_dataset (int ncid
                                 if (dims->dimension.time_index == adios_flag_yes) {
                                     start_dims[rank] = var_dims[i].rank - 1;
                                     time_index = var_dims[i].rank;
-         			    count_dims[rank] = 1;
+                                    count_dims[rank] = 1;
                                     dimids[rank] = var_dims [i].nc_dimid; 
                                     /*printf("\tdim[%d]: c(%d):s(%d): dimid=%d (time-index)\n"
-                                          ,rank
-                                          ,count_dims[rank]
-                                          ,start_dims[rank]
-                                          ,dimids[rank]
-                                          ); 
-*/
+                                      ,rank
+                                      ,count_dims[rank]
+                                      ,start_dims[rank]
+                                      ,dimids[rank]
+                                      ); 
+                                     */
                                 }
                                 else {
                                     start_dims[rank] = 0;
-			            count_dims[rank] = var_dims[i].rank;
+                                    count_dims[rank] = var_dims[i].rank;
                                     dimids[rank]=var_dims[i].nc_dimid;
-				    fprintf(stderr,"\tdim[%d]: c(%d):s(%d): dimid=%d\n"
-                                          ,rank
-                                          ,count_dims[rank]
-                                          ,start_dims[rank]
-                                          ,dimids[rank]
-                                          ); 
+                                    fprintf(stderr,"\tdim[%d]: c(%d):s(%d): dimid=%d\n"
+                                            ,rank
+                                            ,count_dims[rank]
+                                            ,start_dims[rank]
+                                            ,dimids[rank]
+                                           ); 
                                 } 
                                 break;
                             }
                         }
-                   }
+                    }
                     if (i==var_dims_count) {
                         adios_posix_read_attributes_index (ptr_buffer);
-			adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
+                        adios_parse_attributes_index_v1 (ptr_buffer, &atts_root);
                         //print_attributes_index(atts_root);
-			while (atts_root) {
-		            if (atts_root->id == dims->dimension.var_id) {
+                        while (atts_root) {
+                            if (atts_root->id == dims->dimension.var_id) {
                                 ncd_gen_name (dimname, atts_root->attr_path
-                                ,atts_root->attr_name); 
-				if (!atts_root->characteristics->value) {
-                           		for (i = 0; i < var_dims_count; i++) {
-                                		if (var_dims [i].id == atts_root->characteristics->var_id) {
-                                			start_dims[rank]=0;
-				    	          	count_dims [rank] = var_dims [i].rank;
-							
-                                               	  	nc_inq_dimid(ncid, dimname, &dimids[rank]);
-                       		         	    	if (dimids [rank] <= 0)
-                               		     			nc_def_dim (ncid, dimname
-                                       	        			,var_dims[i].rank
-                                       	        			,&dimids [rank]);
-							i = var_dims_count + 1; 
-		 	 			}		
-		 	 		}		
-		 	 	}		
+                                        ,atts_root->attr_name); 
+                                if (!atts_root->characteristics->value) {
+                                    for (i = 0; i < var_dims_count; i++) {
+                                        if (var_dims [i].id == atts_root->characteristics->var_id) {
+                                            start_dims[rank]=0;
+                                            count_dims [rank] = var_dims [i].rank;
+
+                                            nc_inq_dimid(ncid, dimname, &dimids[rank]);
+                                            if (dimids [rank] <= 0)
+                                                nc_def_dim (ncid, dimname
+                                                        ,var_dims[i].rank
+                                                        ,&dimids [rank]);
+                                            i = var_dims_count + 1; 
+                                        }                
+                                    }                
+                                }                
                                 else {
-					count_dims [ rank] = *(int *)atts_root->characteristics->value;
-                                	start_dims[rank]=0;
-                                	nc_inq_dimid(ncid, dimname, &dimids[rank]);
-                                	if (dimids [rank] <= 0)
-                                    		nc_def_dim (ncid, dimname
-                                               		,*(int *)atts_root->characteristics->value
-                                               		,&dimids [rank]); 
-				}
+                                    count_dims [ rank] = *(int *)atts_root->characteristics->value;
+                                    start_dims[rank]=0;
+                                    nc_inq_dimid(ncid, dimname, &dimids[rank]);
+                                    if (dimids [rank] <= 0)
+                                        nc_def_dim (ncid, dimname
+                                                ,*(int *)atts_root->characteristics->value
+                                                ,&dimids [rank]); 
+                                }
                                 /*printf("\t local[%d]: c(%d) id(%d)\n"
                                   ,rank,count_dims[rank], dimids[rank]); */
-				break; 
-			    } 
-			    atts_root = atts_root->next;
-			}
+                                break; 
+                            } 
+                            atts_root = atts_root->next;
+                        }
                     }
                 }
                 else {
@@ -465,108 +459,134 @@ int ncd_dataset (int ncid
                 } 
             }
             if (dims)
- 		dims = dims->next;
+                dims = dims->next;
         } // end of for loop
         val = ptr_var_payload->payload;    
         nc_inq_varid(ncid,fullname,&valid);
         nc_redef(ncid);
-	int time_idx=-1;
+        int time_idx=-1;
         for (rank = 0; rank < maxrank; rank++) {
-        	if (count_dims[rank]==0) {
-			count_dims[rank]=1;
-                 	time_idx = rank;
-		 	break;
-		}
+            if (count_dims[rank]==0) {
+                count_dims[rank]=1;
+                time_idx = rank;
+                break;
+            }
         } 
         for (rank = 0; rank < maxrank; rank++) {
-		if (verbose>0)
-            		fprintf(stderr, "\tdimension info[%d]: c(%d) s(%d)\n"
-                    		,rank,count_dims[rank], start_dims[rank]);
-	}
+            if (verbose>0)
+                fprintf(stderr, "\tdimension info[%d]: c(%d) s(%d)\n"
+                        ,rank,count_dims[rank], start_dims[rank]);
+        }
         if (time_idx == 0 && dimids[time_idx]!=0) {
-	    for (rank=maxrank-1;rank>0;rank--) {
-	        dimids[rank] = dimids[rank-1];		
-	        start_dims[rank] = start_dims[rank-1];		
+            for (rank=maxrank-1;rank>0;rank--) {
+                dimids[rank] = dimids[rank-1];                
+                start_dims[rank] = start_dims[rank-1];                
+            }
+            start_dims[time_idx] = var_dims[0].rank-1;
+            dimids[time_idx] = var_dims[0].id;                
+        }
+
+        /* In case of Fortran generated file, we have to flip the dimensions here
+           because the dimension order at this moment is how it was in Fortran, but
+           this is a C code and thus NetCDF expects C ordering of dimensions here.
+        */
+        if (is_input_fortran==1) {
+            size_t tmp;
+            int start_rank = 0;
+            //fprintf(stderr, "\tFlip %d Fortran dimensions, time_idx=%d\n", maxrank, time_idx);
+            for (rank=0; rank < maxrank; rank++) {
+                if (rank < maxrank-1-rank) {
+                    //fprintf(stderr, "\t  flip rank %d with rank %d\n", rank, maxrank-1-rank);
+                    tmp = dimids[rank];
+                    dimids[rank] = dimids[maxrank-1-rank];
+                    dimids[maxrank-1-rank] = tmp;
+
+                    tmp = count_dims[rank];
+                    count_dims[rank] = count_dims[maxrank-1-rank];
+                    count_dims[maxrank-1-rank] = tmp;
+
+                    tmp = start_dims[rank];
+                    start_dims[rank] = start_dims[maxrank-1-rank];
+                    start_dims[maxrank-1-rank] = tmp;
+                }
             }
-	    start_dims[time_idx] = var_dims[0].rank-1;
-	    dimids[time_idx] = var_dims[0].id;		
         }
-		 
+
         switch(type) { 
-        case adios_real:
-            //for (rank=0;rank<maxrank;rank++)
-            // 	printf("\t local[%d]: c(%d) (%d) %d\n",
-            //    rank,count_dims[rank], start_dims[rank], dimids[rank]);
-            if ( valid<0) {
-                retval=nc_def_var(ncid,fullname,NC_FLOAT,maxrank,dimids,&valid);
+            case adios_real:
+                //for (rank=0;rank<maxrank;rank++)
+                //         printf("\t local[%d]: c(%d) (%d) %d\n",
+                //    rank,count_dims[rank], start_dims[rank], dimids[rank]);
+                if ( valid<0) {
+                    retval=nc_def_var(ncid,fullname,NC_FLOAT,maxrank,dimids,&valid);
+                    ERR(retval);
+                }
+                retval=nc_enddef(ncid);
+                retval=nc_put_vara_float(ncid,valid,start_dims,count_dims,val);
                 ERR(retval);
-            }
-            retval=nc_enddef(ncid);
-            retval=nc_put_vara_float(ncid,valid,start_dims,count_dims,val);
-            ERR(retval);
-            break;
-        case adios_double:
-            if ( valid<0) 
-                retval=nc_def_var(ncid,fullname,NC_DOUBLE,maxrank,dimids,&valid);
-            ERR(retval);
-            retval=nc_enddef(ncid);
-            ERR(retval);
-            retval=nc_put_vara_double(ncid,valid,start_dims,count_dims,val);
-            ERR(retval);
-            //printf("end   writing!\n");
-            break;
-        case adios_long:
-            if ( valid<0) 
-                retval=nc_def_var(ncid,fullname,NC_LONG,maxrank,dimids,&valid);
-            retval=nc_enddef(ncid);
-            retval=nc_put_vara_long(ncid,valid,start_dims,count_dims,val);
-            break;
-        case adios_unsigned_byte:
-            if ( valid<0) 
-                retval=nc_def_var(ncid,fullname,NC_BYTE,maxrank,dimids,&valid);
-            retval=nc_enddef(ncid);
-            retval=nc_put_vara_uchar(ncid,valid,start_dims,count_dims,val);
-            break;
-        case adios_byte:
-	    //printf("write byte test %d %d\n",maxrank,dimids[0]);
-            if ( valid<0) 
-                retval=nc_def_var(ncid,fullname,NC_BYTE,maxrank,dimids,&valid);
-            ERR (retval);
-            //printf("\t vid=%d\n",valid);
-            retval=nc_enddef(ncid);
-            retval=nc_put_vara_schar(ncid,valid,start_dims,count_dims,val);
-            ERR (retval);
-	    //printf("write byte test\n");
-            break;
-        case adios_integer:
-            if (valid < 0) {
-               retval = nc_def_var (ncid,fullname,NC_INT,maxrank,dimids,&valid);
-               //printf("definition done!\n");
-            } 
-            retval = nc_enddef (ncid);
-            ERR (retval);
-            retval=nc_put_vara_int (ncid,valid,start_dims,count_dims,val);
-            ERR (retval);
-            break;
-        default:
-            retval=nc_enddef(ncid);
-            break;
+                break;
+            case adios_double:
+                if ( valid<0) 
+                    retval=nc_def_var(ncid,fullname,NC_DOUBLE,maxrank,dimids,&valid);
+                ERR(retval);
+                retval=nc_enddef(ncid);
+                ERR(retval);
+                retval=nc_put_vara_double(ncid,valid,start_dims,count_dims,val);
+                ERR(retval);
+                //printf("end   writing!\n");
+                break;
+            case adios_long:
+                if ( valid<0) 
+                    retval=nc_def_var(ncid,fullname,NC_LONG,maxrank,dimids,&valid);
+                retval=nc_enddef(ncid);
+                retval=nc_put_vara_long(ncid,valid,start_dims,count_dims,val);
+                break;
+            case adios_unsigned_byte:
+                if ( valid<0) 
+                    retval=nc_def_var(ncid,fullname,NC_BYTE,maxrank,dimids,&valid);
+                retval=nc_enddef(ncid);
+                retval=nc_put_vara_uchar(ncid,valid,start_dims,count_dims,val);
+                break;
+            case adios_byte:
+                //printf("write byte test %d %d\n",maxrank,dimids[0]);
+                if ( valid<0) 
+                    retval=nc_def_var(ncid,fullname,NC_BYTE,maxrank,dimids,&valid);
+                ERR (retval);
+                //printf("\t vid=%d\n",valid);
+                retval=nc_enddef(ncid);
+                retval=nc_put_vara_schar(ncid,valid,start_dims,count_dims,val);
+                ERR (retval);
+                //printf("write byte test\n");
+                break;
+            case adios_integer:
+                if (valid < 0) {
+                    retval = nc_def_var (ncid,fullname,NC_INT,maxrank,dimids,&valid);
+                    //printf("definition done!\n");
+                } 
+                retval = nc_enddef (ncid);
+                ERR (retval);
+                retval=nc_put_vara_int (ncid,valid,start_dims,count_dims,val);
+                ERR (retval);
+                break;
+            default:
+                retval=nc_enddef(ncid);
+                break;
         }
     }
     else if (ptr_var_header->is_dim == adios_flag_yes) {
         for ( j = 0; j<var_dims_count;j++){
-           if (var_dims [j].id==ptr_var_header->id) { 
-               break; 
-           }
+            if (var_dims [j].id==ptr_var_header->id) { 
+                break; 
+            }
         }
-          
+
         nc_redef(ncid);
         nc_inq_dimid ( ncid, fullname, &nc_dimid);
         if ( var_dims[j].rank == 0)
             return 0;
         if ( nc_dimid < 0) {
-           retval = nc_def_dim ( ncid, fullname, var_dims[j].rank, &nc_dimid);
-           ERR(retval);
+            retval = nc_def_dim ( ncid, fullname, var_dims[j].rank, &nc_dimid);
+            ERR(retval);
         }
         var_dims [j].nc_dimid = nc_dimid;
     }
@@ -584,54 +604,54 @@ int ncd_dataset (int ncid
         }
         dimids[0]=onename_dimid;
         rank = 1;
-    switch (type) {
-        case adios_real:
-            if (valid < 0 ) {
-               //printf("\t ncd-scalar-real: %d %d %s\n",dimids[0],valid, fullname);
-               retval=nc_def_var(ncid,fullname,NC_FLOAT,rank,dimids,&valid);
-               ERR(retval);
-            }
-            retval=nc_enddef(ncid);
-            ERR(retval);
-            retval=nc_put_var_float(ncid,valid,val);
-            break;
-        case adios_double:
-            if (valid < 0 ) {
-               //printf("\t ncd-scalar: %d %d %s\n",dimids[0],valid, fullname);
-               retval=nc_def_var(ncid,fullname,NC_DOUBLE,rank,dimids,&valid);
-               ERR(retval);
-               retval=nc_enddef(ncid);
-               ERR(retval);
-            }
-            retval=nc_enddef(ncid);
-            retval=nc_put_var_double(ncid,valid,val);
-            break;
-        case adios_long:
-            if (valid < 0 ) {
-               //printf("\t ncd-scalar: %d %d %s\n",dimids[0],valid, fullname);
-               retval=nc_def_var(ncid,fullname,NC_LONG,rank,dimids,&valid);
-               ERR(retval);
-            }
-            retval=nc_enddef(ncid);
-            ERR(retval);
-            retval=nc_def_var(ncid,fullname,NC_LONG,rank,dimids,&valid);
-            retval=nc_enddef(ncid);
-            retval=nc_put_var_long(ncid,valid,val);
-            break;
-        case adios_integer:
-            if (valid < 0 ) {
-               retval=nc_def_var(ncid,fullname,NC_INT,rank,dimids,&valid);
-               ERR(retval);
-            }
-            retval=nc_enddef(ncid);
-            ERR(retval);
-            //printf("\t   scalar: %d\n", *(int *)val);
-            retval=nc_put_var_int(ncid,valid,val);
-            ERR(retval);
-            break;
-        default:
-            retval=nc_enddef(ncid);
-            break;
+        switch (type) {
+            case adios_real:
+                if (valid < 0 ) {
+                    //printf("\t ncd-scalar-real: %d %d %s\n",dimids[0],valid, fullname);
+                    retval=nc_def_var(ncid,fullname,NC_FLOAT,rank,dimids,&valid);
+                    ERR(retval);
+                }
+                retval=nc_enddef(ncid);
+                ERR(retval);
+                retval=nc_put_var_float(ncid,valid,val);
+                break;
+            case adios_double:
+                if (valid < 0 ) {
+                    //printf("\t ncd-scalar: %d %d %s\n",dimids[0],valid, fullname);
+                    retval=nc_def_var(ncid,fullname,NC_DOUBLE,rank,dimids,&valid);
+                    ERR(retval);
+                    retval=nc_enddef(ncid);
+                    ERR(retval);
+                }
+                retval=nc_enddef(ncid);
+                retval=nc_put_var_double(ncid,valid,val);
+                break;
+            case adios_long:
+                if (valid < 0 ) {
+                    //printf("\t ncd-scalar: %d %d %s\n",dimids[0],valid, fullname);
+                    retval=nc_def_var(ncid,fullname,NC_LONG,rank,dimids,&valid);
+                    ERR(retval);
+                }
+                retval=nc_enddef(ncid);
+                ERR(retval);
+                retval=nc_def_var(ncid,fullname,NC_LONG,rank,dimids,&valid);
+                retval=nc_enddef(ncid);
+                retval=nc_put_var_long(ncid,valid,val);
+                break;
+            case adios_integer:
+                if (valid < 0 ) {
+                    retval=nc_def_var(ncid,fullname,NC_INT,rank,dimids,&valid);
+                    ERR(retval);
+                }
+                retval=nc_enddef(ncid);
+                ERR(retval);
+                //printf("\t   scalar: %d\n", *(int *)val);
+                retval=nc_put_var_int(ncid,valid,val);
+                ERR(retval);
+                break;
+            default:
+                retval=nc_enddef(ncid);
+                break;
         }
     }
     return 0;
@@ -676,6 +696,7 @@ int main (int argc, char ** argv)
     struct adios_bp_buffer_struct_v1 * b_0 = 0;
     struct adios_bp_buffer_struct_v1 * b_1 = 0;
     uint32_t version = 0;
+    is_input_fortran = 0;
 
     b = malloc (sizeof (struct adios_bp_buffer_struct_v1));
     b_0 = malloc (sizeof (struct adios_bp_buffer_struct_v1));
@@ -685,7 +706,7 @@ int main (int argc, char ** argv)
     rc = adios_posix_open_read_internal (argv[1], "", b);
     if (!rc)
     {
-        fprintf (stderr, "bpdump: file not found: %s\n", argv[1]);
+        fprintf (stderr, "bp2ncd: file not found: %s\n", argv[1]);
 
         return -1;
     }
@@ -706,7 +727,7 @@ int main (int argc, char ** argv)
 
     copy_buffer(b_0, b);
     adios_posix_read_vars_index (b);
-    adios_parse_vars_index_v1 (b, &vars_root);
+    adios_parse_vars_index_v1 (b, &vars_root, NULL, NULL);
 
     copy_buffer(b_1, b);
     adios_posix_read_attributes_index (b);
@@ -747,6 +768,11 @@ int main (int argc, char ** argv)
         //printf ("\tTime Index Name: %s %d\n", pg_header.time_index_name, pg_header.time_index);
         //printf ("*************************************************\n"); 
 
+        // Note here if we deal with Fortran generated file
+        if (pg_header.host_language_fortran == adios_flag_yes) {
+            is_input_fortran = 1;
+        }
+
         /****************************************
         * Create unlimited time index dimension 
         ****************************************/
@@ -755,13 +781,13 @@ int main (int argc, char ** argv)
              var_dims = realloc (var_dims, (var_dims_count + 1)
                           * sizeof (struct var_dim)
                           );
-	     static int time_dimid = -1;
-	     nc_def_dim(ncid,pg_header.time_index_name,NC_UNLIMITED,&time_dimid);
-	     nc_enddef(ncid);
-	     strcpy(var_dims[var_dims_count].dimname,pg_header.time_index_name);
-	     var_dims[var_dims_count].id = 0; 
-	     var_dims[var_dims_count].rank = pg_header.time_index;
-	     var_dims[var_dims_count].nc_dimid = time_dimid;
+             static int time_dimid = -1;
+             nc_def_dim(ncid,pg_header.time_index_name,NC_UNLIMITED,&time_dimid);
+             nc_enddef(ncid);
+             strcpy(var_dims[var_dims_count].dimname,pg_header.time_index_name);
+             var_dims[var_dims_count].id = 0; 
+             var_dims[var_dims_count].rank = pg_header.time_index;
+             var_dims[var_dims_count].nc_dimid = time_dimid;
 
              var_dims_count=var_dims_count+1;
         }
diff --git a/utils/bpdiff/CMakeLists.txt b/utils/bpdiff/CMakeLists.txt
new file mode 100644
index 0000000..c58ad12
--- /dev/null
+++ b/utils/bpdiff/CMakeLists.txt
@@ -0,0 +1,11 @@
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/utils/bpdiff)
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+include_directories(${PROJECT_SOURCE_DIR}/src/core)
+link_directories(${PROJECT_BINARY_DIR}/utils/bpdiff)
+
+add_executable(bpdiff bpdiff.c decompose_block.c utils.c)
+target_link_libraries(bpdiff adiosread_nompi ${ADIOSREADLIB_LDADD})
+set_target_properties(bpdiff PROPERTIES COMPILE_FLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSREADLIB_CPPFLAGS} ${ADIOSREADLIB_CFLAGS}")
+
+install(PROGRAMS ${CMAKE_BINARY_DIR}/utils/bpdiff/bpdiff DESTINATION ${bindir})
diff --git a/utils/bpdiff/Makefile.am b/utils/bpdiff/Makefile.am
new file mode 100644
index 0000000..74707c9
--- /dev/null
+++ b/utils/bpdiff/Makefile.am
@@ -0,0 +1,17 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+bin_PROGRAMS = bpdiff
+
+bpdiff_SOURCES = bpdiff.c decompose_block.c utils.c
+bpdiff_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
+bpdiff_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
+bpdiff_LDADD = $(top_builddir)/src/libadiosread.a 
+bpdiff_LDADD += $(ADIOSREADLIB_LDADD)
+
+CC=$(MPICC)
+CXX=$(MPICXX)
+
+EXTRA_DIST = decompose.h utils.h
diff --git a/utils/bpdump/Makefile.in b/utils/bpdiff/Makefile.in
similarity index 83%
copy from utils/bpdump/Makefile.in
copy to utils/bpdiff/Makefile.in
index 7c7972c..d17d8fd 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpdiff/Makefile.in
@@ -34,11 +34,15 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = bpdump$(EXEEXT)
-subdir = utils/bpdump
+bin_PROGRAMS = bpdiff$(EXEEXT)
+subdir = utils/bpdiff
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,13 +75,14 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bpdump_OBJECTS = bpdump-bpdump.$(OBJEXT)
-bpdump_OBJECTS = $(am_bpdump_OBJECTS)
+am_bpdiff_OBJECTS = bpdiff-bpdiff.$(OBJEXT) \
+	bpdiff-decompose_block.$(OBJEXT) bpdiff-utils.$(OBJEXT)
+bpdiff_OBJECTS = $(am_bpdiff_OBJECTS)
 am__DEPENDENCIES_1 =
-bpdump_DEPENDENCIES = $(top_builddir)/src/libadios_internal_nompi.a \
+bpdiff_DEPENDENCIES = $(top_builddir)/src/libadiosread.a \
 	$(am__DEPENDENCIES_1)
-bpdump_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpdump_LDFLAGS) \
+bpdiff_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpdiff_LDFLAGS) \
 	$(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
@@ -87,8 +96,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(bpdump_SOURCES)
-DIST_SOURCES = $(bpdump_SOURCES)
+SOURCES = $(bpdiff_SOURCES)
+DIST_SOURCES = $(bpdiff_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -114,14 +123,22 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
-CC = @CC@
- at USE_PARALLEL_COMPILER_TRUE@CC = $(MPICC)
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
+CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CPP = @CPP@
@@ -133,8 +150,7 @@ CRAY_UGNI_CPPFLAGS = @CRAY_UGNI_CPPFLAGS@
 CRAY_UGNI_LDFLAGS = @CRAY_UGNI_LDFLAGS@
 CRAY_UGNI_LIBS = @CRAY_UGNI_LIBS@
 CSH = @CSH@
-CXX = @CXX@
- at USE_PARALLEL_COMPILER_TRUE@CXX = $(MPICXX)
+CXX = $(MPICXX)
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
@@ -184,6 +200,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -256,7 +275,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -311,14 +339,15 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
-bpdump_SOURCES = bpdump.c
-bpdump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
-bpdump_LDFLAGS = $(ADIOSLIB_INT_LDFLAGS)
-bpdump_LDADD = $(top_builddir)/src/libadios_internal_nompi.a \
-	$(ADIOSLIB_INT_LDADD)
+bpdiff_SOURCES = bpdiff.c decompose_block.c utils.c
+bpdiff_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_CPPFLAGS) $(ADIOSREADLIB_CFLAGS)
+bpdiff_LDFLAGS = $(ADIOSREADLIB_LDFLAGS) 
+bpdiff_LDADD = $(top_builddir)/src/libadiosread.a \
+	$(ADIOSREADLIB_LDADD)
+EXTRA_DIST = decompose.h utils.h
 all: all-am
 
 .SUFFIXES:
@@ -332,9 +361,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bpdump/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bpdiff/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bpdump/Makefile
+	  $(AUTOMAKE) --gnu utils/bpdiff/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -396,9 +425,9 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bpdump$(EXEEXT): $(bpdump_OBJECTS) $(bpdump_DEPENDENCIES) 
-	@rm -f bpdump$(EXEEXT)
-	$(bpdump_LINK) $(bpdump_OBJECTS) $(bpdump_LDADD) $(LIBS)
+bpdiff$(EXEEXT): $(bpdiff_OBJECTS) $(bpdiff_DEPENDENCIES) 
+	@rm -f bpdiff$(EXEEXT)
+	$(bpdiff_LINK) $(bpdiff_OBJECTS) $(bpdiff_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -415,11 +444,23 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
-bpdump-bpdump.o: bpdump.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdump-bpdump.o `test -f 'bpdump.c' || echo '$(srcdir)/'`bpdump.c
+bpdiff-bpdiff.o: bpdiff.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-bpdiff.o `test -f 'bpdiff.c' || echo '$(srcdir)/'`bpdiff.c
 
-bpdump-bpdump.obj: bpdump.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdump-bpdump.obj `if test -f 'bpdump.c'; then $(CYGPATH_W) 'bpdump.c'; else $(CYGPATH_W) '$(srcdir)/bpdump.c'; fi`
+bpdiff-bpdiff.obj: bpdiff.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-bpdiff.obj `if test -f 'bpdiff.c'; then $(CYGPATH_W) 'bpdiff.c'; else $(CYGPATH_W) '$(srcdir)/bpdiff.c'; fi`
+
+bpdiff-decompose_block.o: decompose_block.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-decompose_block.o `test -f 'decompose_block.c' || echo '$(srcdir)/'`decompose_block.c
+
+bpdiff-decompose_block.obj: decompose_block.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-decompose_block.obj `if test -f 'decompose_block.c'; then $(CYGPATH_W) 'decompose_block.c'; else $(CYGPATH_W) '$(srcdir)/decompose_block.c'; fi`
+
+bpdiff-utils.o: utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c
+
+bpdiff-utils.obj: utils.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpdiff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpdiff-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/utils/bpdiff/bpdiff.c b/utils/bpdiff/bpdiff.c
new file mode 100644
index 0000000..f8cfb87
--- /dev/null
+++ b/utils/bpdiff/bpdiff.c
@@ -0,0 +1,500 @@
+/* 
+ * Staged write of ADIOS files using a staging method
+ *
+ * Copyright (c) 2008 - 2012.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+
+/* Staged write example code.
+   Assumptions:
+     - one output step fits into the memory of the staged writer.
+       Actually, this means, even more memory is needed than the size of output.
+       We need to read each variable while also buffering all of them for output.
+     - output steps contain the same variable set (no changes in variables)
+     - attributes are the same for all steps (will write only once here)
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "mpi.h"
+#include "utils.h"
+#include "adios.h"
+#include "adios_read.h"
+#include "adios_error.h"
+
+#define MIN(a,b) ((a) < (b) ? a : b)
+
+static enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_BP;
+//static enum ADIOS_READ_METHOD read_method = ADIOS_READ_METHOD_DATASPACES;
+
+double FUZZ_FACTOR = 0.0;
+
+
+// Input arguments
+char   infilename1[256];    // File1
+char   infilename2[256];    // File2
+char   fuzzfactor[256];     //fuzz factor
+char   outfilename[256];   // File to write
+char   methodname[16];     // ADIOS write method
+char   methodparams[256];  // ADIOS write method
+
+static const int max_read_buffer_size  = 1024*1024*1024;
+static const int max_write_buffer_size = 1024*1024*1024;
+
+static int timeout_sec = 0; // will stop if no data found for this time (-1: never stop)
+
+
+// Global variables
+int         rank, numproc;
+MPI_Comm    comm; 
+ADIOS_FILE *f1, *f2;      // stream for reading
+int64_t    fh;     // ADIOS output file handle
+int64_t     gh;     // ADIOS group for output definitions
+//uint64_t    write_total1, write_total2; // data size written by one processor
+uint64_t    largest_block1; // the largest variable block one process reads
+char     ** group_namelist1; // name of ADIOS group
+char     ** group_namelist2;
+char       *readbuf1, *readbuf2; // read buffer
+double     fuzz_factor; //fuzz factor
+int        verbose = 0;
+
+
+int process_metadata();
+int diff();
+int compare_buffer(char * variable_name, void *data1, void *data2, int total, enum ADIOS_DATATYPES adiosvartype);
+int compare_data(char * variable_name, void *data1, void *data2, int item, enum ADIOS_DATATYPES adiosvartype);
+
+void printUsage(char *fname)
+{
+    print0("Usage: %s file1 file2 [-f fuzz_factor] [-v]\n"
+           "    file1	Input file1 path\n"
+           "    file2	Input file2 path\n"
+           "    fuzz factor The difference cutoff for float/double\n",
+           fname);
+}
+
+
+int processArgs(int argc, char ** argv)
+{
+    if (argc < 3) {
+        printUsage(argv[0]);
+        return 1;
+    }
+    strncpy(infilename1,     argv[1], sizeof(infilename1));
+    strncpy(infilename2,    argv[2], sizeof(infilename2));
+    //strncpy(fuzzfactor,    argv[3], sizeof(fuzzfactor));
+
+    int option = 0;
+    while ((option = getopt (argc, argv, "vf:")) != -1){
+      switch (option){
+        case 'v':
+          verbose = 1;
+          break;
+        case 'f': 
+          fuzz_factor = atof(optarg);
+          break;
+        case '?':
+          return 1;
+      }
+    }
+
+    return 0;
+}
+
+
+int main (int argc, char ** argv) 
+{
+    int         err;
+    int         retval = 0;
+
+    MPI_Init (&argc, &argv);
+    comm = MPI_COMM_WORLD;
+    MPI_Comm_rank (comm, &rank);
+    MPI_Comm_size (comm, &numproc);
+
+    if (processArgs(argc, argv)) {
+        return 1;
+    }
+    
+    print0("Input stream      = %s\n", infilename1);
+    print0("Input stream      = %s\n", infilename2);
+    print0("Fuzz factor       = %f\n", fuzz_factor);
+    
+    err = adios_read_init_method(read_method, comm, 
+                                 "max_chunk_size=100; "
+                                 "app_id =32767; \n"
+                                 "verbose= 3;"
+                                 "poll_interval  =  100;"
+                                );
+
+    if (!err) {
+        print0 ("%s\n", adios_errmsg());
+    }
+
+    //adios_init_noxml(comm);
+
+    print0 ("Waiting to open stream %s...\n", infilename1);
+    f1 = adios_read_open_file(infilename1, read_method, comm);
+
+    f2 = adios_read_open_file(infilename2, read_method, comm);
+
+    if (adios_errno == err_file_not_found) 
+    {
+        print ("rank %d: File not found: %s\n", adios_errmsg());
+        retval = adios_errno;
+    } 
+    else if (f1 == NULL) {
+        print ("rank %d: Error at opening file: %s\n", rank, adios_errmsg());
+        retval = adios_errno;
+    } 
+    else 
+    {
+
+       print0 ("File info:\n");
+       print0 ("  # of variables: %d	%d:\n", f1->nvars, f2->nvars);
+
+       retval = process_metadata();
+       if (retval) return retval;
+
+       retval = diff();
+       if (retval) return retval;
+
+
+       adios_read_close (f1);
+       adios_read_close (f2);
+    }
+
+    adios_read_finalize_method (read_method);
+    MPI_Finalize ();
+    return retval;
+}
+
+
+typedef struct {
+    ADIOS_VARINFO * v;
+    uint64_t        start[10];
+    uint64_t        count[10];
+    uint64_t        writesize; // size of subset this process writes, 0: do not write
+    int		    cross_ref;
+} VarInfo;
+
+VarInfo * varinfo1, *varinfo2;
+uint64_t sum_count1, sum_count2;
+
+int process_metadata()
+{
+    int retval = 0;
+    int i, j;
+    char gdims[256], ldims[256], offs[256];
+    ADIOS_VARINFO *v1, *v2; // shortcut pointer
+
+
+    varinfo1 = (VarInfo *) malloc (sizeof(VarInfo) * f1->nvars);
+    if (!varinfo1) {
+        print("ERROR: rank %d cannot allocate %lu bytes\n", rank, sizeof(VarInfo)*f1->nvars);
+        return 1;
+    }
+    varinfo2 = (VarInfo *) malloc (sizeof(VarInfo) * f2->nvars);
+    if (!varinfo2) {
+        print("ERROR: rank %d cannot allocate %lu bytes\n", rank, sizeof(VarInfo)*f2->nvars);
+        return 1;
+    }
+
+    //get varinfo of file1
+    print0 ("--------------- metadata of %s ----------------------\n", infilename1); 
+    for (i=0; i<f1->nvars; i++) 
+    {
+        //print0 ("%s Get info on variable %d: %s\n", infilename1, i, f1->var_namelist[i]); 
+        varinfo1[i].v = adios_inq_var_byid (f1, i);
+	      varinfo1[i].cross_ref= -1;
+        v1 = varinfo1[i].v; // just a shortcut
+        if (v1 == NULL) {
+            print ("%s rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                   infilename1, rank, f1->var_namelist[i], adios_errmsg());
+            return 1;
+        }
+
+        // print variable type and dimensions
+        print0("    %-9s  %s", adios_type_to_string(v1->type), f1->var_namelist[i]);
+        if (v1->ndim > 0) {
+            print0("[%llu", v1->dims[0]);
+            for (j = 1; j < v1->ndim; j++)
+                print0(", %llu", v1->dims[j]);
+            print0("] :\n");
+        } else {
+            print0("\tscalar\n");
+        }
+
+     }
+
+    print0 ("--------------- metadata of %s ----------------------\n", infilename2); 
+    for (i=0; i<f2->nvars; i++) {
+        //print0 ("%s Get info on variable %d: %s\n", infilename2, i, f2->var_namelist[i]); 
+        varinfo2[i].v = adios_inq_var_byid (f2, i);
+        varinfo2[i].cross_ref = -1;
+        v2 = varinfo2[i].v; // just a shortcut
+        if (v2 == NULL) {
+            print ("%s rank %d: ERROR: Variable %s inquiry failed: %s\n", 
+                   infilename2, rank, f2->var_namelist[i], adios_errmsg());
+            return 1;
+        }
+        
+        // print variable type and dimensions
+        print0("    %-9s  %s", adios_type_to_string(v2->type), f2->var_namelist[i]);
+        if (v2->ndim > 0) {
+            print0("[%llu", v2->dims[0]);
+            for (j = 1; j < v2->ndim; j++)
+                print0(", %llu", v2->dims[j]);
+            print0("] :\n");
+        } else {
+            print0("\tscalar\n");
+        }
+     }
+
+    print0 ("--------------- end of metadata ----------------------\n"); 
+     
+    for(i=0; i<f1->nvars; i++){
+	    v1 = varinfo1[i].v;
+	    for(j=i; j!=i-1; ((j++)%(f2->nvars))){
+	      v2 = varinfo2[j].v;
+	      if(strcmp(f1->var_namelist[i], f2->var_namelist[j]) == 0 &&
+	        strcmp(adios_type_to_string(v1->type), adios_type_to_string(v2->type))==0){
+          if(v1->ndim == v2->ndim){
+	          varinfo1[i].cross_ref = j;
+	          varinfo2[j].cross_ref = i;
+          }
+	        break;
+	      }
+	    }
+    }
+     
+   return 0;
+}
+
+int diff(){
+  int i;
+  ADIOS_VARINFO *v1, *v2; // shortcut pointer
+
+  //process variables in one file but not in the other
+  for(i=0; i<f1->nvars; i++){
+    if(varinfo1[i].cross_ref == -1){
+      print0("%s is in %s, not %s, or the datatype or dimension of the variable is different in two files\n", f1->var_namelist[i],infilename1, infilename2);
+    }
+  }
+
+  for(i=0; i<f2->nvars; i++){
+    if(varinfo2[i].cross_ref == -1){
+      print0("%s is in %s, not %s, or the datatype or dimension of the variable is different in two files\n", f2->var_namelist[i], infilename2, infilename1);
+    }
+  }
+
+  for (i=0; i<f1->nvars; i++){
+	  v1 = varinfo1[i].v;
+	  int cross_ref = varinfo1[i].cross_ref;
+	  v2 = varinfo2[cross_ref].v;
+	  
+    if(varinfo1[i].cross_ref >=0 && v1->ndim == 0) //scalar 1 value already in mem of every processes
+    {
+	    if(!rank){
+	     int ret = compare_data(f1->var_namelist[i], v1->value, v2->value, 0, v1->type);
+       if(!ret) print0("%s is the same in %s and %s\n", f1->var_namelist[i], infilename1, infilename2);
+	    }
+      continue;
+    }
+
+    if(varinfo1[i].cross_ref >= 0 && v1->ndim >0){
+      //decompose
+      int *decomp_values = (int *)malloc(sizeof(int)*v1->ndim);
+      int x;for(x=0; x<v1->ndim; x++) {decomp_values[x] = numproc;} 
+      decompose (numproc, rank, v1->ndim, v1->dims, decomp_values,
+                varinfo1[i].count, varinfo1[i].start, &sum_count1);
+      decompose (numproc, rank, v2->ndim, v2->dims, decomp_values,
+                varinfo2[cross_ref].count, varinfo2[cross_ref].start, &sum_count2);
+      //for(x=0; x<v1->ndim; x++) print("%d %d %d %d %d %d %d\n",rank, varinfo1[i].count[x], varinfo1[i].start[x], sum_count1,\
+       //                                                              varinfo2[cross_ref].start[x], varinfo2[cross_ref].count[x], sum_count2);
+
+      //read from files
+      uint64_t size = adios_type_size (v1->type, v1->value);
+      char *readbuf1 = malloc(sum_count1 * size);
+      ADIOS_SELECTION *sel1 = adios_selection_boundingbox (v1->ndim,
+                                                           varinfo1[i].start, 
+                                                           varinfo1[i].count);
+      adios_schedule_read_byid (f1, sel1, i, 0, 1, readbuf1);
+      adios_perform_reads (f1, 1);   
+
+      char *readbuf2 = malloc(sum_count1 * size);
+      ADIOS_SELECTION *sel2 = adios_selection_boundingbox (v2->ndim,
+                                                           varinfo2[cross_ref].start, 
+                                                           varinfo2[cross_ref].count);
+      adios_schedule_read_byid (f2, sel2, i, 0, 1, readbuf2);
+      adios_perform_reads (f2, 1);   
+
+      int sum_count = MIN(sum_count1, sum_count2);
+	    int ret = compare_data(f1->var_namelist[i], readbuf1, readbuf2, sum_count, v1->type);
+      int allret;
+      MPI_Reduce(&ret, &allret, 1, MPI_INT, MPI_SUM, 0, comm);
+      if(allret > 0){
+        if(!verbose){
+          print0("%s has different values in %s and %s\n", f1->var_namelist[i], infilename1, infilename2);
+        } else {
+          print0("%s has %d different values in %s and %s\n", f1->var_namelist[i], allret, infilename1, infilename2);
+        }
+      } else {
+        print0("%s is the same in %s and %s\n", f1->var_namelist[i], infilename1, infilename2);
+      }
+
+      free(decomp_values);
+      free(readbuf1);
+      free(readbuf2);
+      adios_selection_delete(sel1);
+      adios_selection_delete(sel2);
+    }
+  }//for
+
+}
+
+int compare_buffer(char * variable_name, void *data1, void *data2, int total, enum ADIOS_DATATYPES adiosvartype){
+  int i;
+  int total_diff = 0;
+  for(i=0; i<total; i++){
+    total_diff += compare_data(variable_name, data1, data2, i, adiosvartype);
+  }
+  return total_diff;
+}
+
+int compare_data(char * variable_name, void *data1, void *data2, int item, enum ADIOS_DATATYPES adiosvartype){
+    int ret = 0;
+    if (data1 == NULL || data2 == NULL) {
+        print("null data");
+        return ret;
+    }
+    
+    
+    // print next data item into vstr
+    switch(adiosvartype) {
+        case adios_unsigned_byte:
+	    if(((unsigned char *) data1)[item] !=  ((unsigned char *) data2)[item] )//not identical
+	    {
+		    print("%s : %hhu in %s | %hhu in %s\n", variable_name, ((unsigned char *) data1)[item], infilename1, ((unsigned char *) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_byte:
+	    if(((signed char *) data1)[item] != ((signed char *) data2)[item])//not identical
+	    {
+		print("%s : %hhd in %s | %hhd in %s\n", variable_name, ((signed char *) data1)[item], infilename1, ((signed char *) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_string:
+	    if(strcmp(((char *) data1), ((char *) data2))!= 0 )//not identical
+	    {
+		print("%s : %s in %s | %s in %s\n", variable_name, ((char *) data1)[item], infilename1, ((char *) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_unsigned_short:
+	    if(((unsigned short*) data1)[item] != ((unsigned short *) data2)[item])//not identical
+	    {
+		print("%s : %hu in %s | %hu in %s\n", variable_name, ((unsigned short *) data1)[item], infilename1, ((unsigned short *) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_short:
+	    if(((signed short*) data1)[item] != ((signed short *) data2)[item])//not identical
+	    {
+		print("%s : %hd in %s | %hd in %s\n", variable_name, ((signed short *) data1)[item], infilename1, ((signed short *) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_unsigned_integer:
+	    if(((unsigned int*) data1)[item] != ((unsigned int*) data2)[item])//not identical
+	    {
+		print("%s : %u in %s | %u in %s\n", variable_name, ((unsigned int*) data1)[item], infilename1, ((unsigned int*) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_integer:
+	    if(((signed int*) data1)[item] != ((signed int*) data2)[item] != 0 )//not identical
+	    {
+		print("%s : %d in %s | %d in %s\n", variable_name, ((signed int*) data1)[item], infilename1, ((signed int*) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_unsigned_long:
+	    if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
+	    {
+		print("%s : %llu in %s | %llu in %s\n", variable_name, ((unsigned long long*) data1)[item], infilename1, ((unsigned long long*) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_long:
+	    if(((unsigned long long*) data1)[item] != ((unsigned long long*) data2)[item])//not identical
+	    {
+		print("%s : %lld in %s | %lld in %s\n", variable_name, ((signed long long*) data1)[item], infilename1, ((signed long long*) data2)[item], infilename2);
+        ret++;
+	    }
+            break;
+        case adios_real:
+	    {
+	    float a, b;
+	    a = ((float *) data1)[item];
+	    b = ((float *) data2)[item];
+	    if(abs(a-b)> fuzz_factor){
+ 	      print("%s : %g in %s | %g in %s\n", variable_name, a, infilename1, b, infilename2);
+        ret++;
+	    }
+            break;
+	    }
+        case adios_double:
+	    {
+	    double aa, bb;
+	    aa = ((double *) data1)[item];
+	    bb = ((double *) data2)[item];
+	    if(abs(aa-bb)> fuzz_factor){
+ 	      print("%s : %g in %s | %g in %s\n", variable_name, aa, infilename1, bb, infilename2);
+        ret++;
+	    }
+            break;
+	    }
+        case adios_long_double:
+            //fprintf(outf,(f ? format : "%g "), ((double *) data1)[item]);
+        //                fprintf(outf,(f ? format : "????????"));
+            break;
+        case adios_complex:
+	    {
+	    float a11, a12, b11, b12;
+	    a11 = ((float *) data1)[2*item];
+	    a12 = ((float *) data1)[2*item+1];
+	    b11 = ((float *) data2)[2*item];
+	    b12 = ((float *) data2)[2*item+1];
+	    if(abs(a11-b11)> fuzz_factor || abs(a12-b12)>fuzz_factor){
+ 	      print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a11, b11, infilename1, a12, b12, infilename2);
+        ret++;
+	    }
+	 
+            break;
+	    }
+        case adios_double_complex:
+            {
+	    double a21, a22, b21, b22;
+	    a21 = ((float *) data1)[2*item];
+	    a22 = ((float *) data1)[2*item+1];
+	    b21 = ((float *) data2)[2*item];
+	    b22 = ((float *) data2)[2*item+1];
+	    if(abs(a21-b21)> fuzz_factor || abs(a22-b22)>fuzz_factor){
+ 	      print("%s : %g i%g in %s | %g i%g in %s\n", variable_name, a21, b21, infilename1, a22, b22, infilename2);
+        ret++;
+	    }
+            break;
+ 	    }
+    } // end switch
+    return ret;
+}
+
diff --git a/utils/bpdiff/decompose.h b/utils/bpdiff/decompose.h
new file mode 100644
index 0000000..0d133ff
--- /dev/null
+++ b/utils/bpdiff/decompose.h
@@ -0,0 +1,17 @@
+#ifndef __DECOMPOSE_H_
+#define __DECOMPOSE_H_
+
+#include <stdint.h>
+
+/* Decompose a variable among several processors 
+
+   count/start: array of size/offset in each dimension 
+   writesize:   sum (count)
+
+*/
+void decompose (int numproc, int rank, int ndim, uint64_t *dims, int *decomp_values,
+                /*OUT*/ uint64_t *count,
+                /*OUT*/ uint64_t *start,
+                /*OUT*/ uint64_t *writesize);
+
+#endif
diff --git a/utils/bpdiff/decompose_block.c b/utils/bpdiff/decompose_block.c
new file mode 100644
index 0000000..3266266
--- /dev/null
+++ b/utils/bpdiff/decompose_block.c
@@ -0,0 +1,91 @@
+/* 
+Decompose arrays in all dimensions (block), evenly among 
+the processes. 
+
+Does not care how small the blocks become, so small arrays
+with many writers may suffer with this approach.
+
+*/
+
+#include "decompose.h"
+#include "utils.h"
+
+void decompose (int numproc, int rank, int ndim, uint64_t *dims, 
+                int *np, // number of processes in each dimension
+                /*OUT*/ uint64_t *count,
+                /*OUT*/ uint64_t *start,
+                /*OUT*/ uint64_t *writesize)
+{
+    int i;
+    int pos[10]; // rank's position in each dimensions
+
+    if (ndim == 0) {
+        // scalars -> rank 0 writes them
+        if (rank == 0) 
+            *writesize = 1;
+        else 
+            *writesize = 0;
+        return;
+    }
+
+    /* calculate this process' position in the n-dim space
+        0 1 2
+        3 4 5
+        6 7 8
+
+        for 1D: 
+        posx = rank/1             ! 1st dim: 0, 1, 2...,rank-1 are in the same X position
+    
+        for 2D: 
+        posx = mod(rank, npx)     ! 1st dim: 0, npx, 2npx... are in the same X position
+        posy = rank/(npx)         ! 2nd dim: npx processes belong into one dim
+
+        for 3D: 
+        posx = mod(rank, npx)     ! 1st dim: 0, npx, 2npx... are in the same X position
+        posy = mod(rank/npx, npy) ! 2nd dim: (0, npx-1) have the same dim (so divide with npx first)
+        posz = rank/(npx*npy)     ! 3rd dim: npx*npy processes belong into one dim
+    */
+    int nps = 1;
+    for (i=0; i<ndim-1; i++)
+    {
+        pos[i] = (rank / nps) % np[i];
+        nps *= np[i];
+    }
+    pos[i] = rank / nps;
+
+    char ints[256];
+    ints_to_str(ndim, pos, ints);
+    if (pos[ndim-1] >= np[ndim-1]) {
+        print("rank %d: position in %d-D space = %s ---> Out of bound process\n", rank, ndim, ints);
+    } else {
+        //print("rank %d: position in %d-D space = %s\n", rank, ndim, ints);
+    }
+
+    /* Decompose each dimension according to the position */
+    *writesize = 1;
+    for (i=0; i<ndim; i++)
+    {
+        if (pos[ndim-1] >= np[ndim-1]) 
+        {
+            // this process gets nothing to read
+            count[i] = 0;
+            start[i] = 0;
+        } 
+        else 
+        {
+            count[i] = dims[i] / np[i];
+            start[i] = count[i] * pos[i];
+            if (pos[i] == np[i]-1) {
+                // last one in the dimension may need to read more than the rest
+                count[i] = dims[i] - count[i]*(np[i]-1);
+            }
+        }
+        *writesize *= count[i];
+    }
+    int64s_to_str(ndim, count, ints);
+    //print("rank %d: ldims   in %d-D space = %s\n", rank, ndim, ints);
+    int64s_to_str(ndim, start, ints);
+    //print("rank %d: offsets in %d-D space = %s\n", rank, ndim, ints);
+}
+
+
diff --git a/examples/staging/stage_write/utils.c b/utils/bpdiff/utils.c
similarity index 100%
copy from examples/staging/stage_write/utils.c
copy to utils/bpdiff/utils.c
diff --git a/utils/bpdiff/utils.h b/utils/bpdiff/utils.h
new file mode 100644
index 0000000..21196aa
--- /dev/null
+++ b/utils/bpdiff/utils.h
@@ -0,0 +1,50 @@
+/* 
+ * Staged write of ADIOS files using a staging method
+ *
+ * Copyright (c) 2008 - 2012.  UT-BATTELLE, LLC. All rights reserved.
+ */
+
+#ifndef __UTILS_H_
+#define __UTILS_H_
+
+#include <stdio.h>
+#include <stdint.h>
+#include "adios_types.h"
+
+#define MAX3(a,b,c) (a > b ? (a > c ? a : c) : (b > c ? b : c))
+#define print(...) fprintf (stderr, __VA_ARGS__); 
+#define print0(...) if (!rank) fprintf (stderr, __VA_ARGS__); 
+
+#define bool int
+#define false 0
+#define true 1
+
+void ints_to_str (int n, int *values, char *s);
+void int64s_to_str (int n, uint64_t *values, char *s);
+const char * value_to_string (enum ADIOS_DATATYPES type, void * data, int idx);
+
+/* Get basename and dirname from path.
+   Allocates memory for both strings, they should be freed after use.
+   May return NULL for dirname. "" for dirname means path is like /file.
+
+   dir1/dir2/file   dir=dir1/dir2   base=file
+   dir1/file        dir=dir1        base=file
+   file             dir=null        base=file
+   /file            dir=""          base=file
+   dir1/            dir=null        base=dir1
+   /                dir=""          base=""
+   ""               dir=null        base=""
+*/
+void getbasename (char *path, char **dirname, char **basename);
+
+bool file_exists (char *path);  // true if stat(path) succeeds, 
+                                // i.e. it is an accessible item on file system
+bool is_dir (char *path);       // true if path is a directory (and stat() succeeds on it)
+
+/** mkdir -r
+  * return: 0 on success, otherwise mkdir() syscall's return value
+  */
+int createdir_recursive( char* path);
+
+#endif
+
diff --git a/utils/bpdump/CMakeLists.txt b/utils/bpdump/CMakeLists.txt
index 02aa3d0..b32dfbd 100644
--- a/utils/bpdump/CMakeLists.txt
+++ b/utils/bpdump/CMakeLists.txt
@@ -1,8 +1,9 @@
 include_directories(${PROJECT_SOURCE_DIR}/src)
 include_directories(${PROJECT_SOURCE_DIR}/src/core)
+include_directories(${PROJECT_SOURCE_DIR}/src/core/transforms)
 include_directories(${PROJECT_BINARY_DIR})
 include_directories(${PROJECT_SOURCE_DIR}/src/public)
-link_directories(${PROJECT_BINARY_DIR}/lib)
+link_directories(${PROJECT_BINARY_DIR}/src)
 
 add_executable(bpdump bpdump.c)
 target_link_libraries(bpdump adios_internal_nompi ${ADIOSLIB_INT_LDADD})
diff --git a/utils/bpdump/Makefile.am b/utils/bpdump/Makefile.am
index dd46a8b..029a7fc 100644
--- a/utils/bpdump/Makefile.am
+++ b/utils/bpdump/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core -I$(top_srcdir)/src/core/transforms
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bpdump/Makefile.in b/utils/bpdump/Makefile.in
index 7c7972c..deb38ae 100644
--- a/utils/bpdump/Makefile.in
+++ b/utils/bpdump/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bpdump$(EXEEXT)
 subdir = utils/bpdump
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -114,12 +122,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -184,6 +201,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -256,7 +276,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -311,8 +340,9 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core \
+	-I$(top_srcdir)/src/core/transforms
 AUTOMAKE_OPTIONS = no-dependencies
 bpdump_SOURCES = bpdump.c
 bpdump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
diff --git a/utils/bpdump/bpdump.c b/utils/bpdump/bpdump.c
index e4f8c3e..fd5f574 100644
--- a/utils/bpdump/bpdump.c
+++ b/utils/bpdump/bpdump.c
@@ -13,6 +13,8 @@
 #include "adios_transport_hooks.h"
 #include "adios_bp_v1.h"
 #include "bp_utils.h"
+#include "adios_transforms_common.h" // NCSU ALACRITY-ADIOS
+#include "adios_transforms_read.h" // NCSU ALACRITY-ADIOS
 //#include "adios_internals.h"
 
 #define DIVIDER "========================================================\n"
@@ -159,7 +161,7 @@ int main (int argc, char ** argv)
     printf (DIVIDER);
     printf ("Vars Index:\n");
     adios_posix_read_vars_index (b);
-    adios_parse_vars_index_v1 (b, &vars_root);
+    adios_parse_vars_index_v1 (b, &vars_root, NULL, NULL);
     print_vars_index (vars_root);
 
     printf (DIVIDER);
@@ -509,6 +511,30 @@ void print_vars_header (struct adios_vars_header_struct_v1 * vars_header)
     printf ("\tVars Count: %u\n", vars_header->count);
 }
 
+void print_characteristic_dims(struct adios_index_characteristic_dims_struct_v1 *dims) {
+    int j;
+
+    for (j = 0; j < dims->count; j++)
+    {
+        if (j != 0)
+            printf (",");
+        if (dims->dims [j * 3 + 1] != 0)
+        {
+            printf ("%llu:%llu:%llu"
+                   ,dims->dims [j * 3 + 0]
+                   ,dims->dims [j * 3 + 1]
+                   ,dims->dims [j * 3 + 2]
+                   );
+        }
+        else
+        {
+            printf ("%llu"
+                   ,dims->dims [j * 3 + 0]
+                   );
+        }
+    }
+}
+
 void print_var_header (struct adios_var_header_struct_v1 * var_header)
 {
     int i = 0;
@@ -641,30 +667,23 @@ void print_var_header (struct adios_var_header_struct_v1 * var_header)
     }
     if (var_header->characteristics.dims.count != 0)
     {
-        int j;
-
         printf ("\t\t\tDims (l:g:o): (");
-        for (j = 0; j < var_header->characteristics.dims.count; j++)
-        {
-            if (j != 0)
-                printf (",");
-            if (var_header->characteristics.dims.dims [j * 3 + 1] != 0)
-            {
-                printf ("%llu:%llu:%llu"
-                       ,var_header->characteristics.dims.dims [j * 3 + 0]
-                       ,var_header->characteristics.dims.dims [j * 3 + 1]
-                       ,var_header->characteristics.dims.dims [j * 3 + 2]
-                       );
-            }
-            else
-            {
-                printf ("%llu"
-                       ,var_header->characteristics.dims.dims [j * 3 + 0]
-                       );
-            }
+        print_characteristic_dims(&var_header->characteristics.dims);
+        printf(")");
         }
+
+    // NCSU ALACRITY-ADIOS - Adding printing of transform type
+    printf ("\t\t\tTransform-type(%hhu = %s)",
+            var_header->characteristics.transform.transform_type,
+            adios_transform_plugin_primary_xml_alias(var_header->characteristics.transform.transform_type));
+    if (var_header->characteristics.transform.transform_type != adios_transform_none) {
+        printf ("\t\t\tPre-transform-datatype(%s)", adios_type_to_string_int(var_header->characteristics.transform.pre_transform_type));
+        printf ("\t\t\tPre-transform-dims(l:g:o = ");
+        print_characteristic_dims(&var_header->characteristics.transform.pre_transform_dimensions);
         printf (")");
+        printf ("\t\t\tTransform-metadata-length(%hu)", var_header->characteristics.transform.transform_metadata_len);
     }
+
     printf ("\n");
 }
 
@@ -1090,6 +1109,40 @@ void print_vars_index (struct adios_index_var_struct_v1 * vars_root)
                 }
                 printf (")");
             }
+
+            // NCSU ALACRITY-ADIOS - Print transform info
+            if (vars_root->characteristics[i].transform.transform_type != adios_transform_none) {
+                struct adios_index_characteristic_transform_struct *transform = &vars_root->characteristics[i].transform;
+                struct adios_index_characteristic_dims_struct_v1 *dims = &transform->pre_transform_dimensions;
+                int j;
+
+                printf ("\tTransform type: %s (ID = %hhu)", adios_transform_plugin_desc(transform->transform_type), transform->transform_type);
+                printf ("\tPre-transform datatype: %s", adios_type_to_string_int(transform->pre_transform_type));
+                printf ("\tPre-transform dims (l:g:o): (");
+                for (j = 0; j < dims->count; j++)
+                {
+                    if (j != 0)
+                        printf (",");
+                    if (  dims->dims [j * 3 + 1]
+                        != 0
+                       )
+                    {
+                        printf ("%llu:%llu:%llu"
+                         ,dims->dims [j * 3 + 0]
+                         ,dims->dims [j * 3 + 1]
+                         ,dims->dims [j * 3 + 2]
+                               );
+                    }
+                    else
+                    {
+                        printf ("%llu"
+                         ,dims->dims [j * 3 + 0]
+                               );
+                    }
+                }
+                printf (")");
+            }
+
             printf ("\n");
         }
 
diff --git a/utils/bpls/Makefile.am b/utils/bpls/Makefile.am
index f770ded..ca45842 100644
--- a/utils/bpls/Makefile.am
+++ b/utils/bpls/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bpls/Makefile.in b/utils/bpls/Makefile.in
index f18d9d4..1016d7a 100644
--- a/utils/bpls/Makefile.in
+++ b/utils/bpls/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bpls$(EXEEXT)
 subdir = utils/bpls
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -114,12 +122,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -182,6 +199,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -254,7 +274,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -309,8 +338,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public
 AUTOMAKE_OPTIONS = no-dependencies
 bpls_SOURCES = bpls.c 
 bpls_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
diff --git a/utils/bpls/bpls.c b/utils/bpls/bpls.c
index 71c276a..fc9a400 100644
--- a/utils/bpls/bpls.c
+++ b/utils/bpls/bpls.c
@@ -58,6 +58,7 @@ bool output_xml;
 bool use_regexp;           // use varmasks as regular expressions
 bool sortnames;            // sort names before listing
 bool listattrs;            // do list attributes too
+bool listmeshes;           // do list meshes too
 bool attrsonly;            // do list attributes only
 bool readattrs;            // also read all attributes and print
 bool longopt;              // -l is turned on
@@ -66,6 +67,7 @@ bool noindex;              // do no print array indices with data
 bool printByteAsChar;      // print 8 bit integer arrays as string
 bool plot;                 // dump histogram related information
 bool hidden_attrs;         // show hidden attrs in BP file
+bool show_decomp;          // show decomposition of arrays
 
 // other global variables
 char *prgname; /* argv[0] */
@@ -94,17 +96,19 @@ struct option options[] = {
     {"timestep",             no_argument,          NULL,    't'},
     {"attrs",                no_argument,          NULL,    'a'},
     {"attrsonly",            no_argument,          NULL,    'A'},
+    {"meshes",               no_argument,          NULL,    'm'},
     {"long",                 no_argument,          NULL,    'l'},
     {"string",               no_argument,          NULL,    'S'},
     {"columns",              required_argument,    NULL,    'n'}, 
     {"format",               required_argument,    NULL,    'f'}, 
     {"hidden_attrs",         no_argument,          &hidden_attrs,    true}, 
+    {"decomp",               no_argument,          NULL,    'D'},
     //    {"time",                 required_argument,    NULL,    't'}, 
     {NULL,                   0,                    NULL,    0}
 };
 
 
-static const char *optstring = "hvepyrtaAldSg:o:x:s:c:n:f:";
+static const char *optstring = "hvepyrtaAmldSDg:o:x:s:c:n:f:";
 
 // help function
 void display_help() {
@@ -119,6 +123,7 @@ void display_help() {
             "                               min/max values of arrays (no overhead to get them!)\n"
             "  --attrs     | -a           List/match attributes too\n"
             "  --attrsonly | -A           List attributes only\n"
+            "  --meshes    | -m           List meshes\n"
             /*
             "  --sort      | -r           Sort names before listing\n"
             */
@@ -144,6 +149,7 @@ void display_help() {
             "  --format    | -f \"str\"     Format string to use for one data item in print\n"
             "                               instead of the default. E.g. \"%%6.3f\"\n"
             "  --hidden_attrs             Show hidden ADIOS attributes in the file\n"
+            "  --decomp    | -D           Show decomposition of variables as layed out in file\n"
             /*
                "  --time    | -t N [M]      # print data for timesteps N..M only (or only N)\n"
                "                              default is to print all available timesteps\n"
@@ -211,6 +217,9 @@ int main( int argc, char *argv[] ) {
                 longopt = true;
                 readattrs = true;
                 break;
+            case 'm':
+                listmeshes=true;
+                break;
             case 'n':
                 errno = 0;
                 tmp = strtol(optarg, (char **)NULL, 0);
@@ -244,6 +253,9 @@ int main( int argc, char *argv[] ) {
             case 'v':
                 verbose++;
                 break;
+            case 'D':
+                show_decomp = true;
+                break;
                 /*
                    case 't':
                    errno = 0;
@@ -355,6 +367,7 @@ void init_globals(void) {
     timestep             = false;
     sortnames            = false;
     listattrs            = false;
+    listmeshes           = false;
     attrsonly            = false;
     readattrs            = false;
     longopt              = false;
@@ -365,6 +378,7 @@ void init_globals(void) {
     hidden_attrs         = false;
     formatgiven          = false;
     printByteAsChar      = false;
+    show_decomp          = false;
     for (i=0; i<MAX_DIMS; i++) {
         istart[i]  = 0;
         icount[i]  = -1;  // read full var by default
@@ -399,11 +413,13 @@ void printSettings(void) {
     if (longopt)
         printf("      -l : show scalar values and min/max/avg of arrays\n");
     if (sortnames)
-        printf("      -t : sort names before listing\n");
+        printf("      -r : sort names before listing\n");
     if (attrsonly)
         printf("      -A : list attributes only\n");
     else if (listattrs)
         printf("      -a : list attributes too\n");
+    else if (listmeshes)
+        printf("      -m : list meshes too\n");
     if (dump)
         printf("      -d : dump matching variables and attributes\n");
     if (use_regexp)
@@ -412,6 +428,8 @@ void printSettings(void) {
         printf("      -f : dump using printf format \"%s\"\n", format);
     if (output_xml)
         printf("      -x : output data in XML format\n");
+    if (show_decomp)
+        printf("      -D : show decomposition of variables in the file\n");
     if (hidden_attrs)
         printf("         : show hidden attributes in the file\n");
 }
@@ -439,9 +457,13 @@ void print_file_size(uint64_t size)
 
 }
 
-// prototypes
-int print_data_hist(ADIOS_VARINFO * vi, char * varname);
-int print_data_characteristics(void * min, void * max, double * avg, double * std_dev, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
+
+static inline int ndigits (int n) 
+{
+    static char digitstr[32];
+    return snprintf (digitstr, 32, "%d", n);
+}
+
 
 int     nVarsMatched=0;
 
@@ -675,6 +697,12 @@ int doList_group (ADIOS_FILE *fp)
                     }
                 } // longopt && vi->statistics 
                 fprintf(outf,"\n");
+
+                if (show_decomp) {
+                    adios_inq_var_blockinfo (fp, vi);
+                    print_decomp(vi);
+                }
+
             } else {
                 // scalar
                 fprintf(outf,"  scalar");
@@ -684,6 +712,11 @@ int doList_group (ADIOS_FILE *fp)
                     matches = false; // already printed
                 }
                 fprintf(outf,"\n");
+
+                if (show_decomp) {
+                    adios_inq_var_blockinfo (fp, vi);
+                    print_decomp(vi);
+                }
             }
         }
 
@@ -713,21 +746,159 @@ int doList_group (ADIOS_FILE *fp)
     return 0;
 }                
 
+#define PRINT_ARRAY(str, ndim, dims, loopvar, format) \
+    fprintf(outf,"%s",str); \
+    if (ndim > 0) { \
+        fprintf(outf,"{"#format, dims[0]); \
+        for (loopvar=1; loopvar < ndim; loopvar++) { \
+            fprintf(outf,", "#format, dims[loopvar]); \
+        } \
+        fprintf(outf,"}\n"); \
+    } else { \
+        fprintf(outf,"empty\n"); \
+    }
+
+
+void printMeshes (ADIOS_FILE  *fp)
+{
+    int meshid,i,j;     // loop vars
+    if (fp->nmeshes==0) {
+        fprintf(outf, "Mesh info: There are no meshes defined in this file\n");
+        return;
+    }
+    fprintf(outf, "Mesh info: \n");
+    for (meshid=0; meshid < fp->nmeshes; meshid++) {
+        fprintf(outf, "  %s\n", fp->mesh_namelist[meshid]);
+        ADIOS_MESH *mi = adios_inq_mesh_byid (fp, meshid);
+        if (mi) {
+            if (meshid != mi->id)
+                fprintf(outf, "  bpls warning: meshid (=%d) != inquired mesh id (%d)\n", 
+                        meshid, mi->id);
+            if (strcmp (fp->mesh_namelist[meshid], mi->name))
+                fprintf(outf, "  bpls warning: mesh name in list (=\"%s\") != "
+                        "inquired mesh name (\"%s\")\n", 
+                        fp->mesh_namelist[meshid], mi->name);
+            fprintf(outf, "    type:         ");
+            switch (mi->type) {
+                case ADIOS_MESH_UNIFORM:
+                    fprintf(outf, "uniform\n");
+                    PRINT_ARRAY("    dimensions:   ", 
+                                 mi->uniform->num_dimensions, 
+                                 mi->uniform->dimensions, 
+                                 j, %lld)
+                    if (mi->uniform->origins) {
+                        PRINT_ARRAY("    origins:      ", 
+                                     mi->uniform->num_dimensions, 
+                                     mi->uniform->origins, 
+                                     j, %g) 
+                    }
+                    if (mi->uniform->spacings) {
+                        mi->uniform->spacings[0]=5.0;
+                        PRINT_ARRAY ("    spacings:     ", 
+                                     mi->uniform->num_dimensions, 
+                                     mi->uniform->spacings,
+                                     j, %g)
+                    }
+                    if (mi->uniform->maximums) {
+                        PRINT_ARRAY ("    maximums:     ", 
+                                     mi->uniform->num_dimensions, 
+                                     mi->uniform->maximums,
+                                     j, %g)
+                    }
+                    break;
+
+                case ADIOS_MESH_RECTILINEAR:
+                    fprintf(outf, "rectilinear\n");
+                    PRINT_ARRAY("    dimensions:   ", 
+                                mi->rectilinear->num_dimensions, 
+                                mi->rectilinear->dimensions, 
+                                j, %lld)
+                    if (mi->rectilinear->use_single_var) {
+                        fprintf(outf, "    coordinates:  single-var: \"%s\"\n", 
+                                mi->rectilinear->coordinates[0]);
+                    } else {
+                        fprintf(outf, "    coordinates:  multi-var: \"%s\"", 
+                                mi->rectilinear->coordinates[0]);
+                        for (i=1; i < mi->rectilinear->num_dimensions; i++) { 
+                            fprintf(outf,", \"%s\"", mi->rectilinear->coordinates[i]); 
+                        }
+                        fprintf(outf, "\n");
+                    }
+                    break;
+
+                case ADIOS_MESH_STRUCTURED:
+                    fprintf(outf, "structured\n");
+                    PRINT_ARRAY("    dimensions:   ", 
+                                mi->structured->num_dimensions, 
+                                mi->structured->dimensions, 
+                                j, %lld);
+                    if (mi->structured->use_single_var) {
+                        fprintf(outf, "    points:       single-var: \"%s\"\n", 
+                                mi->structured->points[0]);
+                    } else {
+                        fprintf(outf, "    points:       multi-var: \"%s\"", 
+                                mi->structured->points[0]);
+                        for (i=1; i < mi->structured->num_dimensions; i++) { 
+                            fprintf(outf,", \"%s\"", mi->structured->points[i]); 
+                        }
+                        fprintf(outf, "\n");
+                    }
+                    fprintf(outf, "    nspaces:      %d\n", mi->structured->nspaces);
+                    break;
+
+                case ADIOS_MESH_UNSTRUCTURED:
+                    fprintf(outf, "unstructured\n");
+                    if (mi->unstructured->nvar_points <= 1) {
+                        fprintf(outf, "    npoints:      %lld\n", mi->unstructured->npoints);
+                        fprintf(outf, "    points:       single-var: \"%s\"\n", 
+                                mi->unstructured->points[0]);
+                    } else {
+                        fprintf(outf, "    points:       multi-var: \"%s\"", 
+                                mi->unstructured->points[0]);
+                        for (i=1; i < mi->unstructured->nvar_points; i++) { 
+                            fprintf(outf,", \"%s\"", mi->unstructured->points[i]); 
+                        }
+                        fprintf(outf, "\n");
+                    }
+                    fprintf(outf, "    ncsets:       %d\n", mi->unstructured->ncsets);
+                    for (i=0; i < mi->unstructured->ncsets; i++) { 
+                        fprintf(outf, "    cell set %d:\n", i);
+                        fprintf(outf, "      cell type:  %d\n", mi->unstructured->ctypes[i]);
+                        fprintf(outf, "      ncells:     %d\n", mi->unstructured->ccounts[i]);
+                        fprintf(outf, "      cells var:  \"%s\"\n", mi->unstructured->cdata[i]);
+                    }
+                    fprintf(outf, "    nspaces:      %d\n", mi->unstructured->nspaces);
+                    break;
+
+                default:
+                    fprintf(outf, "undefined\n");
+
+            } 
+            fprintf(outf, "    time varying: %s\n", (mi->time_varying ? "yes" : "no") );
+            adios_free_meshinfo (mi);
+        }
+    }
+    fprintf(outf, "\n");
+}
 
-int doList(const char *path) {
+int doList(const char *path) 
+{
     ADIOS_FILE  *fp;
-    int     grpid;     // loop vars
+    int     grpid;
     int     status;
     int     mpi_comm_dummy=0;
     int     nGroupsMatched=0;
     int     nGroups; // number of groups
     char  **group_namelist;
     char    init_params[128];
+    int     adios_verbose=2;
 
     if (verbose>1) printf("\nADIOS BP open: read header info from %s\n", path);
 
     // initialize BP reader
-    strcpy (init_params, "verbose=2");
+    if (verbose>1) adios_verbose = 3; // print info lines
+    if (verbose>2) adios_verbose = 4; // print debug lines
+    sprintf (init_params, "verbose=%d", adios_verbose);
     if (hidden_attrs)
         strcat (init_params, ";show_hidden_attrs");
     status = adios_read_init_method (ADIOS_READ_METHOD_BP, mpi_comm_dummy, init_params);
@@ -739,7 +910,7 @@ int doList(const char *path) {
     // open the BP file
     fp = adios_read_open_file (path, ADIOS_READ_METHOD_BP, mpi_comm_dummy); 
     if (fp == NULL) {
-        fprintf(stderr, "Error: %s\n", adios_errmsg());
+        //fprintf(stderr, "Error: %s\n", adios_errmsg());
         bpexit(7, 0);
     }
 
@@ -755,6 +926,7 @@ int doList(const char *path) {
         printf ("  of groups:     %d\n", nGroups);
         printf ("  of variables:  %d\n", fp->nvars);
         printf ("  of attributes: %d\n", fp->nattrs);
+        printf ("  of meshes:     %d\n", fp->nmeshes);
         printf ("  time steps:    %d - %d\n", fp->current_step, fp->last_step);
         print_file_size(fp->file_size);
         printf ("  bp version:    %d\n", fp->version);
@@ -764,6 +936,10 @@ int doList(const char *path) {
         printf ("\n");
     }
 
+    // Print out the meshes in the file
+    if (listmeshes) {
+        printMeshes(fp);
+    }
 
     if (grpmask) {
         // each group has to be handled separately
@@ -785,7 +961,7 @@ int doList(const char *path) {
     } else {
         doList_group (fp);
     }
-
+    
     if (grpmask != NULL && nGroupsMatched == 0) {
         fprintf(stderr, "\nError: None of the groups matched the group mask you provided: %s\n", grpmask);
         return 4;
@@ -984,6 +1160,7 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
     int  status;            
     bool incdim;            // used in incremental reading in
     ADIOS_SELECTION * sel;  // boundnig box to read
+    int ndigits_dims[32];        // # of digits (to print) of each dimension 
 
     if (getTypeInfo(vi->type, &elemsize)) {
         fprintf(stderr, "Adios type %d (%s) not supported in bpls. var=%s\n", 
@@ -1087,9 +1264,12 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
 
 
     // init s and c
+    // and calculate ndigits_dims
     for (j=0; j<tdims; j++) {
         s[j]=start_t[j];
         c[j]=readn[j];
+
+        ndigits_dims[j] = ndigits (start_t[j]+count_t[j]-1); // -1: dim=100 results in 2 digits (0..99)
     }
 
     // read until read all 'nelems' elements
@@ -1132,7 +1312,7 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
         //if (verbose>2) printf("  read %lld bytes\n", bytes_read);
 
         // print slice
-        print_dataset(data, vi->type, s, c, tdims); 
+        print_dataset(data, vi->type, s, c, tdims, ndigits_dims); 
 
         // prepare for next read
         sum += actualreadn;
@@ -1509,7 +1689,7 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
 }
 
 int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype, 
-        uint64_t *s, uint64_t *c, int tdims)
+        uint64_t *s, uint64_t *c, int tdims, int *ndigits)
 {
     int i,item, steps;
     char idxstr[128], vstr[128], buf[16];
@@ -1531,9 +1711,9 @@ int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype,
         idxstr[0] = '\0'; // empty idx string
         if (nextcol == 0) {
             if (!noindex && tdims > 0) {
-                sprintf(idxstr,"    (%lld",ids[0]);
+                sprintf(idxstr,"    (%*lld",ndigits[0], ids[0]);
                 for (i=1; i<tdims; i++) {
-                    sprintf(buf,",%lld",ids[i]);
+                    sprintf(buf,",%*lld",ndigits[i],ids[i]);
                     strcat(idxstr, buf);
                 }
                 strcat(idxstr,")    ");
@@ -1589,6 +1769,50 @@ void print_endline(void)
 }
 
 
+int print_decomp(ADIOS_VARINFO *vi)
+{
+    /* Print block info */
+    int i,j,k;
+    int ndigits_nsteps = ndigits (vi->nsteps-1);
+    if (vi->ndim == 0) 
+    {
+        // scalars
+        for (i=0; i < vi->nsteps; i++) {
+            fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
+            fprintf(outf, "%d instances available\n", vi->nblocks[i]);
+        }
+        return 0;
+    } 
+    else 
+    {
+        // arrays
+        int ndigits_nblocks;
+        int ndigits_dims[32];
+        for (k=0; k < vi->ndim; k++) {
+            // get digit lengths for each dimension
+            ndigits_dims[k] = ndigits (vi->dims[k]-1);
+        }
+
+        for (i=0; i < vi->nsteps; i++) {
+            fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
+            fprintf(outf,"\n");
+            ndigits_nblocks = ndigits (vi->nblocks[i]-1);
+            for (j=0; j < vi->nblocks[i]; j++) {
+                fprintf(outf,"          block %*d: [", ndigits_nblocks, j);
+                for (k=0; k < vi->ndim; k++) {
+                    fprintf(outf, "%*lld:%*lld", 
+                            ndigits_dims[k],
+                            vi->blockinfo[j].start[k],
+                            ndigits_dims[k],
+                            vi->blockinfo[j].start[k] + vi->blockinfo[j].count[k]-1);
+                    if (k < vi->ndim-1)
+                        fprintf(outf, ", ");
+                }
+                fprintf(outf, "]\n");
+            }
+        }
+    }
+}
 
 // parse a string "0, 3; 027" into an integer array
 // of [0,3,27] 
diff --git a/utils/bpls/bpls.h b/utils/bpls/bpls.h
index 46f526d..b1a9db8 100644
--- a/utils/bpls/bpls.h
+++ b/utils/bpls/bpls.h
@@ -44,6 +44,9 @@ int  print_start(const char *fname);
 void print_slice_info(int ndim, uint64_t *dims, int timed, int nsteps, uint64_t *s, uint64_t *c);
 int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
 int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype, 
-               uint64_t *s, uint64_t *c, int tdims);  
+               uint64_t *s, uint64_t *c, int tdims, int* ndigits);  
 void print_endline(void);
 void print_stop(void);
+int print_data_hist(ADIOS_VARINFO * vi, char * varname);
+int print_data_characteristics(void * min, void * max, double * avg, double * std_dev, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
+int print_decomp(ADIOS_VARINFO *vi);
diff --git a/utils/bpsplit/Makefile.am b/utils/bpsplit/Makefile.am
index 094038c..935d8c9 100644
--- a/utils/bpsplit/Makefile.am
+++ b/utils/bpsplit/Makefile.am
@@ -1,5 +1,5 @@
 INCLUDES = $(all_includes)
-INCLUDES += -I$(top_builddir)/src -I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 
 AUTOMAKE_OPTIONS = no-dependencies
 
diff --git a/utils/bpsplit/Makefile.in b/utils/bpsplit/Makefile.in
index db19d9e..eb788e9 100644
--- a/utils/bpsplit/Makefile.in
+++ b/utils/bpsplit/Makefile.in
@@ -38,7 +38,11 @@ bin_PROGRAMS = bpsplit$(EXEEXT) bpappend$(EXEEXT) bpgettime$(EXEEXT)
 subdir = utils/bpsplit
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -130,12 +138,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 @USE_PARALLEL_COMPILER_TRUE at CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
@@ -200,6 +217,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -272,7 +292,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -327,8 +356,8 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public -I$(top_builddir)/src/core
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
 bpsplit_SOURCES = bpsplit.c
 bpsplit_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSLIB_INT_CPPFLAGS) $(ADIOSLIB_INT_CFLAGS)
diff --git a/utils/bpsplit/bpappend.c b/utils/bpsplit/bpappend.c
index 4d22eee..92a1749 100644
--- a/utils/bpsplit/bpappend.c
+++ b/utils/bpsplit/bpappend.c
@@ -49,8 +49,9 @@
 
 #define DIVIDER "========================================================\n"
 
-
+#ifndef bool
 typedef int bool;
+#endif
 #define true 1
 #define false 0
 
@@ -203,7 +204,7 @@ int read_indexes(char *filename, bool input) {
     
     // read and parse variable index
     adios_posix_read_vars_index (bp);
-    adios_parse_vars_index_v1 (bp, &vars_root);
+    adios_parse_vars_index_v1 (bp, &vars_root, NULL, NULL);
 
     // read and parse attribute index
     adios_posix_read_attributes_index (bp);
@@ -390,12 +391,20 @@ int recover(int f) {
         return 1;
     }
 
+    struct adios_index_struct_v1 * idx = adios_alloc_index_v1(0);
+    idx->pg_root = out_pg_root;
+    idx->vars_root = out_vars_root;
+    idx->attrs_root = out_attrs_root;
+
     // write old index into a buffer
     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset, index_start, 
-                          out_pg_root, out_vars_root, out_attrs_root);
+                          idx);
     if (verbose>1) fprintf(stderr, "  original index size %llu 0x%llx\n", buffer_offset, buffer_offset);
     adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
+    adios_clear_index_v1 (idx);
+    adios_free_index_v1 (idx);
+
     // write index buffer out
     if (verbose>1) fprintf(stderr, "  write %llu 0x%llx bytes of indexes...\n", buffer_offset, buffer_offset);
     bytes_written = write (f, buffer, buffer_offset);
@@ -495,13 +504,18 @@ int append_in_to_out( const char *fileout, const char *filein) {
     uint64_t buffer_offset = 0;
     uint64_t index_start =  in_bp->pg_index_offset + out_bp->pg_index_offset;
 
+    struct adios_index_struct_v1 * idx = adios_alloc_index_v1(0);
+    idx->pg_root = out_pg_root;
+    idx->vars_root = out_vars_root;
+    idx->attrs_root = out_attrs_root;
+
     if (verbose>1) printf("  index starts at %llu (0x%llx)\n", index_start, index_start);
 
     // merge in old indicies
-    adios_merge_index_v1 (&out_pg_root, &out_vars_root, &out_attrs_root,
+    adios_merge_index_v1 (idx,
                           in_pg_root, in_vars_root, in_attrs_root);
     adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset, index_start, 
-                          out_pg_root, out_vars_root, out_attrs_root);
+                          idx);
     if (verbose>1) printf("  index size %llu 0x%llx\n", buffer_offset, buffer_offset);
     adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
@@ -514,6 +528,8 @@ int append_in_to_out( const char *fileout, const char *filein) {
     // clean up
     free(buffer);
     close(f);
+    adios_clear_index_v1 (idx);
+    adios_free_index_v1 (idx);
 
     return 0;
 }
diff --git a/utils/bpsplit/bpgettime.c b/utils/bpsplit/bpgettime.c
index e8faf53..d1f951f 100644
--- a/utils/bpsplit/bpgettime.c
+++ b/utils/bpsplit/bpgettime.c
@@ -44,8 +44,9 @@
 
 #define DIVIDER "========================================================\n"
 
-
+#ifndef bool
 typedef int bool;
+#endif
 #define true 1
 #define false 0
 
diff --git a/utils/bpsplit/bpsplit.c b/utils/bpsplit/bpsplit.c
index 770e38e..1465af2 100644
--- a/utils/bpsplit/bpsplit.c
+++ b/utils/bpsplit/bpsplit.c
@@ -49,8 +49,9 @@
 
 #define DIVIDER "========================================================\n"
 
-
+#ifndef bool
 typedef int bool;
+#endif
 #define true 1
 #define false 0
 
@@ -203,12 +204,11 @@ int main( int argc, char *argv[] ) {
 // global vars for the functions below
 //   filein's data structs
 struct adios_bp_buffer_struct_v1           * in_bp         = 0;
+struct adios_index_struct_v1               * idx           = 0;
 struct adios_index_process_group_struct_v1 * in_pg_root    = 0;
-struct adios_index_var_struct_v1           * vars_root     = 0; // in-place processing will occur
-struct adios_index_attribute_struct_v1     * attrs_root    = 0; // in-place processing will occur
 //   fileout's data structs 
 struct adios_bp_buffer_struct_v1           * out_bp         = 0;
-struct adios_index_process_group_struct_v1 * out_pg_root    = 0;
+//struct adios_index_process_group_struct_v1 * out_pg_root    = 0; // use idx->pg_root
 uint64_t out_offset_start = 0;  // the beginning offset of group data in in_bp to write out to out_bp
 uint64_t out_offset_end = 0;    // the end offset of group data in in_bp to write out to out_bp
 //   aux variables to contain tail of index chains (for cleanup only)
@@ -246,11 +246,11 @@ int read_indexes(char *filename) {
     
     // read and parse variable index
     adios_posix_read_vars_index (in_bp);
-    adios_parse_vars_index_v1 (in_bp, &vars_root);
+    adios_parse_vars_index_v1 (in_bp, &idx->vars_root, NULL, NULL);
 
     // read and parse attribute index
     adios_posix_read_attributes_index (in_bp);
-    adios_parse_attributes_index_v1 (in_bp, &attrs_root);
+    adios_parse_attributes_index_v1 (in_bp, &idx->attrs_root);
 
     if (verbose>1) {
         printf (DIVIDER);
@@ -373,7 +373,7 @@ void split_pg_index( uint32_t from, uint32_t to) {
         if (section == 0 && pg->time_index >= from) {
             // reached from..to section
             // start out_pg_root index chain
-            out_pg_root = pg;
+            idx->pg_root = pg;
             // this is the starting offset from which data should be copied
             out_offset_start = pg->offset_in_file;
             // unlink previous->next pointer to this item
@@ -421,8 +421,8 @@ void split_pg_index( uint32_t from, uint32_t to) {
 void determine_pg_offsets() {
     // determine offsets
     if (verbose) printf("Determine process group offsets\n");
-    if (out_pg_root) {
-        out_offset_start = out_pg_root->offset_in_file;
+    if (idx->pg_root) {
+        out_offset_start = idx->pg_root->offset_in_file;
         if (tail_pg_root) 
             out_offset_end = tail_pg_root->offset_in_file; // end points to a byte which is not copied!
         else
@@ -441,9 +441,9 @@ void determine_pg_offsets() {
  *  Call after split_pg_index()
  */
 void weed_out_indexes(void) {
-    struct adios_index_var_struct_v1       * vg = vars_root;
+    struct adios_index_var_struct_v1       * vg = idx->vars_root;
     struct adios_index_var_struct_v1       * vg_prev = NULL;
-    struct adios_index_attribute_struct_v1 * ag = attrs_root;
+    struct adios_index_attribute_struct_v1 * ag = idx->attrs_root;
     struct adios_index_attribute_struct_v1 * ag_prev = NULL;
     int i, start, count;
     
@@ -476,7 +476,7 @@ void weed_out_indexes(void) {
             // no characteristics <=> this variable is not contained in the output slice
             // take it out from the chain
             if (vg_prev != NULL) vg_prev->next = vg->next;
-            else vars_root = vg->next;
+            else idx->vars_root = vg->next;
         } else {
             vg_prev = vg; // advance prev only if this variable is kept in chain
         }
@@ -512,7 +512,7 @@ void weed_out_indexes(void) {
             // no characteristics <=> this attribute is not contained in the output slice
             // take it out from the chain
             if (ag_prev != NULL) ag_prev->next = ag->next;
-            else attrs_root = ag->next;
+            else idx->attrs_root = ag->next;
         } else {
             ag_prev = ag; // advance prev only if this attribute is kept in chain
         }
@@ -581,8 +581,7 @@ int write_out( const char *fileout, const char *filein) {
     char * buffer = NULL;
     uint64_t buffer_size = 0;
     uint64_t buffer_offset = 0;
-    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset, bytes_copied,
-                          out_pg_root, vars_root, attrs_root);
+    adios_write_index_v1 (&buffer, &buffer_size, &buffer_offset, bytes_copied, idx);
     if (verbose>1) printf("  index size %llu 0x%llx\n", buffer_offset, buffer_offset);
     adios_write_version_v1 (&buffer, &buffer_size, &buffer_offset);
 
@@ -605,6 +604,8 @@ int bpsplit(char *filein, char *fileout, char *recordfile, int from_in, int to_i
     uint32_t maxtime = 1;   // at least there is time=1 (single group) in a bp file
     struct adios_bp_buffer_struct_v1 * b = 0;
 
+    idx = adios_alloc_index_v1(0);
+
     // open input file, read and parse indexes 
     excode = read_indexes( filein );
     if (excode) 
diff --git a/utils/gpp/Makefile.am b/utils/gpp/Makefile.am
index 3084eae..60f333d 100644
--- a/utils/gpp/Makefile.am
+++ b/utils/gpp/Makefile.am
@@ -1,2 +1,5 @@
 dist_bin_SCRIPTS = gpp.py ad_config.py type_mapper.py
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/gpp.py $(srcdir)/ad_config.py $(srcdir)/type_mapper.py $(builddir)
+
diff --git a/utils/gpp/Makefile.in b/utils/gpp/Makefile.in
index 98e7902..b531a47 100644
--- a/utils/gpp/Makefile.in
+++ b/utils/gpp/Makefile.in
@@ -38,7 +38,11 @@ subdir = utils/gpp
 DIST_COMMON = $(dist_bin_SCRIPTS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -113,12 +121,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -181,6 +198,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -253,7 +273,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -421,7 +450,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(SCRIPTS)
+all-am: Makefile $(SCRIPTS) all-local
 installdirs:
 	for dir in "$(DESTDIR)$(bindir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -519,18 +548,22 @@ uninstall-am: uninstall-dist_binSCRIPTS
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-	distclean distclean-generic distclean-libtool distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dist_binSCRIPTS \
-	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 pdf pdf-am \
-	ps ps-am uninstall uninstall-am uninstall-dist_binSCRIPTS
-
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am \
+	install-dist_binSCRIPTS 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 pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-dist_binSCRIPTS
+
+
+all-local:
+	test "$(srcdir)" = "$(builddir)" || cp $(srcdir)/gpp.py $(srcdir)/ad_config.py $(srcdir)/type_mapper.py $(builddir)
 
 # 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.
diff --git a/utils/gpp/ad_config.py b/utils/gpp/ad_config.py
index 577be79..e379124 100755
--- a/utils/gpp/ad_config.py
+++ b/utils/gpp/ad_config.py
@@ -65,7 +65,8 @@ class adiosGroup:
             if node.localName == 'var':
                 newvar = var (node, self, self.time_index)
                 self.vars.append (newvar)
-                self.vardict [newvar.get_name()] = newvar
+                #print 'Add to dict local var ['+newvar.get_fullpath()+']'
+                self.vardict [newvar.get_fullpath()] = newvar
                 self.vars_and_gwrites_and_attrs.append (newvar)
             #elif node.localName == 'attribute':
                 #handle attribute
@@ -78,7 +79,8 @@ class adiosGroup:
                     if gb_node.localName == 'var':
                         newvar = var (gb_node, self, self.time_index)
                         self.vars.append (newvar)
-                        self.vardict [newvar.get_name()] = newvar
+                        #print 'Add to dict global var ['+newvar.get_fullpath()+']'
+                        self.vardict [newvar.get_fullpath()] = newvar
                         self.vars_and_gwrites_and_attrs.append (newvar)
                     elif gb_node.localName == 'gwrite':
                         self.vars_and_gwrites_and_attrs.append (gwrite (node) )
@@ -99,9 +101,10 @@ class adiosGroup:
         return self.vars
 
     # Returns the variable from this group with the specified name, or None
-    def get_var (self, varname):
-        if self.vardict.has_key (varname):
-            return self.vardict [varname]
+    def get_var (self, varfullpath):
+        #print '          get_var('+varfullpath+')'
+        if self.vardict.has_key (varfullpath):
+            return self.vardict [varfullpath]
 
         return None
 
@@ -138,10 +141,25 @@ class var:
         self.time_index = time_index
         self.global_bounds_node = global_bounds_node
 
+    def get_path (self):
+        path = self.var_node.getAttribute ('path')
+        return path
+
     def get_name (self):
         name = self.var_node.getAttribute ('name')
         return name
 
+    def get_fullpath (self):
+        path = self.get_path()
+        name = self.get_name()
+        if (path == ''):
+            fullpath = name
+        elif (path == '/'):
+            fullpath = '/'+name
+        else:
+            fullpath = path + '/' + name
+        return fullpath
+
     def get_gwrite (self):
         gw = self.var_node.getAttribute ('gwrite')
 
@@ -166,8 +184,10 @@ class var:
             # place the dimensions in a list and remove the time-index if it is there.
             dims = filter (lambda x : x != self.time_index, self.var_node.getAttribute ('dimensions').split(',') )
             cleandims = []
+            #print '       get_dimensions of var '+self.get_fullpath()
             for d in dims:
 
+                #print '          dim "'+str(d)+'"'
                 if d.isdigit():
                     cleandims.append (d)
                     continue
@@ -176,7 +196,11 @@ class var:
                 # for that variable
                 dim_var = self.get_group().get_var (d)				
                 if dim_var != None:
+                    #print '            dim var found, get name...'
                     d = dim_var.get_gwrite()
+                #else:
+                    #print '            dim var NOT found'
+                    
 
                 cleandims.append (d)
             return cleandims
diff --git a/utils/gpp/gpp.py b/utils/gpp/gpp.py
index af27848..34b57a8 100755
--- a/utils/gpp/gpp.py
+++ b/utils/gpp/gpp.py
@@ -11,8 +11,13 @@ import type_mapper
 def checkXML (config_file, path):
     if path == '':
         adios_lint = 'adios_lint '
-    else:
+    elif os.path.exists (path+'/adios_lint'):
         adios_lint = path + '/adios_lint '
+    elif os.path.exists (path+'/../adios_lint/adios_lint'):
+        adios_lint = path+'/../adios_lint/adios_lint '
+    else:
+        adios_lint = 'adios_lint '
+
     rv = os.system (adios_lint + config_file)
     if rv == 0:
         return 'success'
@@ -53,15 +58,18 @@ def get_c_groupsize_code (group):
 
 
 def get_fortran_groupsize_code (group):
+    #print 'Get Fortran Groupsize code for group "'+group.get_name()+'"'
     groupsize_code_string = ''
     groupsize_code_string += 'adios_groupsize = '
     for v in group.get_vars():
+        #print '  count variable "'+v.get_fullpath()+'"'
         if (v.is_scalar() ):
             groupsize_code_string += ('%d' % type_mapper.get_size (v.get_type() ) + ' &\n                + ')
         else:
             groupsize_code_string += ('%d * ' % type_mapper.get_size (v.get_type() ) )
 
             for d in v.get_dimensions():
+                #print '  count dim "'+d+'"'
                 # need to check whether this is the timestep
                 groupsize_code_string += '(' + d + ') * '
 
@@ -74,6 +82,7 @@ def get_fortran_groupsize_code (group):
 
     groupsize_code_string += '\ncall adios_group_size (adios_handle, adios_groupsize, adios_totalsize, adios_err)'
 
+    #print 'Done Fortran Groupsize'
     return groupsize_code_string;
 
 
@@ -94,7 +103,7 @@ def get_fortran_write_statements (group):
         # Otherwise, the item must be a variable
         var = item
 
-        statements += '\ncall adios_write (adios_handle, "' + var.get_name() + '", ' + var.get_gwrite() + ', adios_err)'
+        statements += '\ncall adios_write (adios_handle, "' + var.get_fullpath() + '", ' + var.get_gwrite() + ', adios_err)'
 
     statements += '\n'
     return statements
@@ -125,7 +134,7 @@ def get_c_write_statements (group):
         else:
             var_prefix = '&'
 
-        statements += '\nadios_write (adios_handle, "' + var.get_name() + '", ' + var_prefix + var.get_gwrite() + ');'
+        statements += '\nadios_write (adios_handle, "' + var.get_fullpath() + '", ' + var_prefix + var.get_gwrite() + ');'
 
     statements += '\n'
     return statements
diff --git a/utils/skel/CMakeLists.txt b/utils/skel/CMakeLists.txt
index 051d326..a943792 100644
--- a/utils/skel/CMakeLists.txt
+++ b/utils/skel/CMakeLists.txt
@@ -7,9 +7,12 @@ install(PROGRAMS bin/skel bin/set_method.sh bin/skel_extract.py bin/skel_cat.py
 
 install(FILES lib/adios.py 
 	lib/argparse.py 
+    lib/skel_bpls.py
+    lib/skel_bpy.py
 	lib/skel_install.py 
-	lib/skel_makefile.py 
-	lib/skel_params.py 
+	lib/skel_makefile.py
+	lib/skel_params.py
+    lib/skel_replay.py
 	lib/skel_settings.py 
 	lib/skel_source.py 
 	lib/skel_submit.py 
@@ -23,6 +26,12 @@ install(FILES lib/adios.py
 install(FILES etc/templates/Makefile.default.tpl
 	etc/templates/submit_sith.tpl
 	etc/templates/submit_jaguar.tpl
+    etc/templates/Makefile.tmpl
+    etc/templates/source_write_c.tmpl
+    etc/templates/source_write_fortran.tmpl
+    etc/templates/xml.tmpl
+    etc/templates/replay_bp.tmpl
+    etc/templates/replay_yaml.tmpl
 	DESTINATION ${prefix}/etc/skel/templates)
 
 
diff --git a/utils/skel/Makefile.am b/utils/skel/Makefile.am
index b81e75e..90894e5 100644
--- a/utils/skel/Makefile.am
+++ b/utils/skel/Makefile.am
@@ -4,12 +4,26 @@ dist_bin_SCRIPTS = bin/skel bin/set_method.sh bin/skel_extract.py bin/skel_cat.p
 
 pythonlibdir=@libdir@/python
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || { \
+	 cp -r $(srcdir)/bin $(builddir); \
+	 for f in $(dist_pythonlib_DATA); do \
+	     test ! -f "$(srcdir)/$$f" || cp $(srcdir)/"$$f" $(builddir)/lib; \
+	 done; \
+	 for f in $(dist_template_DATA); do \
+	     test ! -f "$(srcdir)/$$f" || cp $(srcdir)/"$$f" $(builddir)/etc; \
+	 done; \
+	 cp -r $(srcdir)/etc/templates $(builddir)/etc; }
+
 dist_pythonlib_DATA=\
     lib/adios.py \
 	lib/argparse.py \
+    lib/skel_bpls.py \
+    lib/skel_bpy.py \
     lib/skel_install.py \
     lib/skel_makefile.py \
     lib/skel_params.py \
+    lib/skel_replay.py \
     lib/skel_settings.py \
     lib/skel_source.py \
     lib/skel_submit.py \
diff --git a/utils/skel/Makefile.in b/utils/skel/Makefile.in
index 8cb0ef8..dbce5b3 100644
--- a/utils/skel/Makefile.in
+++ b/utils/skel/Makefile.in
@@ -40,7 +40,11 @@ DIST_COMMON = $(dist_bin_SCRIPTS) $(dist_pythonlib_DATA) \
 	$(dist_template_DATA) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -50,14 +54,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -157,12 +165,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -225,6 +242,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -297,7 +317,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -358,9 +387,12 @@ pythonlibdir = @libdir@/python
 dist_pythonlib_DATA = \
     lib/adios.py \
 	lib/argparse.py \
+    lib/skel_bpls.py \
+    lib/skel_bpy.py \
     lib/skel_install.py \
     lib/skel_makefile.py \
     lib/skel_params.py \
+    lib/skel_replay.py \
     lib/skel_settings.py \
     lib/skel_source.py \
     lib/skel_submit.py \
@@ -692,7 +724,7 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(SCRIPTS) $(DATA)
+all-am: Makefile $(SCRIPTS) $(DATA) all-local
 installdirs: installdirs-recursive
 installdirs-am:
 	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pythonlibdir)" "$(DESTDIR)$(templatedir)"; do \
@@ -794,11 +826,11 @@ uninstall-am: uninstall-dist_binSCRIPTS uninstall-dist_pythonlibDATA \
 	install-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am check check-am clean clean-generic clean-libtool \
-	ctags ctags-recursive 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-dist_binSCRIPTS \
+	all all-am all-local check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive 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-dist_binSCRIPTS \
 	install-dist_pythonlibDATA install-dist_templateDATA \
 	install-dvi install-dvi-am install-exec install-exec-am \
 	install-html install-html-am install-info install-info-am \
@@ -811,6 +843,17 @@ uninstall-am: uninstall-dist_binSCRIPTS uninstall-dist_pythonlibDATA \
 	uninstall-dist_pythonlibDATA uninstall-dist_templateDATA
 
 
+all-local:
+	test "$(srcdir)" = "$(builddir)" || { \
+	 cp -r $(srcdir)/bin $(builddir); \
+	 for f in $(dist_pythonlib_DATA); do \
+	     test ! -f "$(srcdir)/$$f" || cp $(srcdir)/"$$f" $(builddir)/lib; \
+	 done; \
+	 for f in $(dist_template_DATA); do \
+	     test ! -f "$(srcdir)/$$f" || cp $(srcdir)/"$$f" $(builddir)/etc; \
+	 done; \
+	 cp -r $(srcdir)/etc/templates $(builddir)/etc; }
+
 # 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/utils/skel/bin/skel b/utils/skel/bin/skel
index 5059deb..08828bd 100755
--- a/utils/skel/bin/skel
+++ b/utils/skel/bin/skel
@@ -4,9 +4,14 @@ import sys
 import os.path
 
 # Make sure that the skel modules are available
-os.path.dirname(sys.argv[0])
+os.path.dirname(sys.argv[1])
+
+# For the installed skel
 sys.path.insert (0, os.path.dirname(sys.argv[0]) + '/../lib/python')
 
+# For the skel in the utils dir of the adios source
+sys.path.insert (0, os.path.dirname(sys.argv[0]) + '/../lib')
+
 import argparse
 
 import adios
@@ -15,30 +20,35 @@ import skel_settings
 import skel_install
 import skel_makefile
 import skel_params
+import skel_replay
 import skel_source
-#import skel_dwarf
 import skel_submit
 import skel_xml
 
-def parse_command_line():
+def get_parser():
 
     parser = argparse.ArgumentParser (
         formatter_class=argparse.RawDescriptionHelpFormatter,
+        prog='skel',
+        add_help=False,
         description='''\
 Skel: Create, run and analyze skeletal I/O applications
 -------------------------------------------------------
 Available subcommands include:
     skel install
+    skel help
     skel makefile
     skel params
     skel source
     skel submit
-    skel xml''')
+    skel xml
+        
+    Use skel help <subcommand> to see detailed options for each subcommand.''')
     parser.add_argument ('subcommand', metavar='subcommand', help='Skel command to execute')
     parser.add_argument ('project', metavar='project', help='Name of the skel project')
-    parser.add_argument ('-g', '--group', help='adios group (only valid for skel params)')
+    #parser.add_argument ('-g', '--group', help='adios group (only valid for skel params)')
 
-    return parser.parse_args()
+    return parser
 
 
 def main(argv=None):
@@ -49,13 +59,23 @@ def main(argv=None):
     if sys.argv[1] == 'install':
         return 0;
 
-    args = parse_command_line()
+    #args = parse_command_line()
+    parser = get_parser()
+    args, unknown = parser.parse_known_args()
+
+    # ignore .xml suffix if used (tab completion)
+    if args.project and args.project.endswith (".xml"):
+        args.project = args.project[:-4]
 
     if args.subcommand == 'install':
         return 0
 
     if args.subcommand == 'xml':
-        skel_xml.create_skel_xml (args.project)
+        skel_xml.create_skel_xml (args.project, parser)
+        return 0
+
+    if args.subcommand == 'replay':
+        skel_replay.do_replay_with_args (parser)
         return 0
 
     try:
@@ -65,31 +85,33 @@ def main(argv=None):
         return 1
 
     if args.subcommand == 'params':
-        outfilename = args.project + '_params.xml.default'
-        skel_params.generate_param_file (args.project, outfilename, config, args.group)
-        return 0
+        #outfilename = args.project + '_params.xml'
 
-    try:    
-        params = skelconf.skelConfig (args.project + '_params.xml')
-    except (IOError):
-        print "Error reading " + args.project + "_params.xml. Try running skel params " + args.project + " first,"
-        print "then copy the generated " + args.project + "_params.xml.default, and edit to suit your needs."
-        return 1
+        # Only proceed if outfilename does not already exist.
+        #if os.path.exists (outfilename):
+            #print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+            #return 999
 
-    if args.subcommand == 'makefile':
-        skel_makefile.generate_makefiles (params, config)
+        #skel_params.generate_param_file (args.project, outfilename, config, args.group)
+        skel_params.generate_param_file_with_args (config, parser)
         return 0
-
+    
+    
     if args.subcommand == 'source':
-        skel_source.create_sources (params, config, args.project)
+        #skel_source.create_sources (params, config, args.project)
+        skel_source.create_sources_with_args (config, parser)
+        return 0
+
+
+    if args.subcommand == 'makefile':
+        #skel_makefile.generate_makefiles (params, config)
+        skel_makefile.generate_makefiles_with_args (config, parser)
         return 0
 
-#    if args.subcommand == 'dwarf':
-#        skel_dwarf.create_dwarf (params, config, args.project)
-#        return 0
 
     if args.subcommand == 'submit':
-        skel_submit.generate_submit_scripts (params)
+        #skel_submit.generate_submit_scripts (params)
+        skel_submit.generate_submit_scripts_with_args (parser)
         return 0
 
     print 'Unknown subcommand, exiting.'
diff --git a/utils/skel/bin/skel_extract.py b/utils/skel/bin/skel_extract.py
index 6b34451..5e4edde 100755
--- a/utils/skel/bin/skel_extract.py
+++ b/utils/skel/bin/skel_extract.py
@@ -77,7 +77,7 @@ def extract (skel_output, dest, select, ranks):
 
 
 # Hilde's function for extracting to a format understood by the R script
-def extract_R (skel_output, select, ranks):
+def extract_R (skel_output, select, ranks, iteration):
  
     doc = xml.dom.minidom.parse (skel_output)
     #if dest == None or dest == '':
@@ -125,6 +125,8 @@ def extract_R (skel_output, select, ranks):
     outfile.write (method + '\n')
     outfile.write (numcores +'\n')
     outfile.write (header + '\n')
+    
+    # Replacing iter with the iteration argument passed in
     iter = 0
 
     for st in doc.getElementsByTagName ('adios_timing'):
@@ -137,8 +139,8 @@ def extract_R (skel_output, select, ranks):
             core = proc.getAttribute ('id')
             vals = proc.getAttribute ('vals').split(',')
             for field in selected_fields:
-                data = data + vals[keys.index(field)].strip(',')
-            data = str(iter)+" "+ core +" "+ data.rstrip (' ') + '\n'
+                data = data + vals[keys.index(field)].strip(',') + ' '
+            data = str(iteration)+" "+ core +" "+ data.rstrip (' ') + '\n'
             outfile.write (data)
         if ranks == 'all':
 
@@ -148,14 +150,26 @@ def extract_R (skel_output, select, ranks):
     
     outfile.close ()
 
+def parse_iteration (filename):
+    #assume filename ends with .xml
+    if not filename.endswith (".xml"):
+        print "Warning: filename does not meet expectations, should end with .xml"
+
+    filename = filename [:-4]
+
+    iteration = filename.rsplit ("_", 1)[1]
+
+    print iteration
 
+    return iteration
 
 def main ():
 
 
     args = parse_command_line()
     if (args.generate_R):
-        extract_R (args.skel_output, args.select, args.ranks)
+        iteration = parse_iteration (args.skel_output)
+        extract_R (args.skel_output, args.select, args.ranks, iteration)
     else:    
         extract (args.skel_output, args.dest, args.select, args.ranks)
 
diff --git a/utils/skel/etc/Makefile.in b/utils/skel/etc/Makefile.in
index f1b989c..f0c7034 100644
--- a/utils/skel/etc/Makefile.in
+++ b/utils/skel/etc/Makefile.in
@@ -37,7 +37,11 @@ host_triplet = @host@
 subdir = utils/skel/etc
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -47,14 +51,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -112,12 +120,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @MPICC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -180,6 +197,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -252,7 +272,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/utils/skel/etc/templates/Makefile.default.tpl b/utils/skel/etc/templates/Makefile.default.tpl
index 76518ae..f5ade84 100644
--- a/utils/skel/etc/templates/Makefile.default.tpl
+++ b/utils/skel/etc/templates/Makefile.default.tpl
@@ -4,11 +4,16 @@
 
 include $$INCLUDE$$
 
-ADIOS_DIR=`adios_config -d`
-LDFLAGS += `adios_config -l`
-CFLAGS += `adios_config -c`
-FCFLAGS += `adios_config -fc`          
-FCLIBS += `adios_config -fl` -L${ADIOS_DIR}/lib/skel -lskel
+#Use adios attached to skel, rather than adios in $PATH
+#ADIOS_DIR=`adios_config -d`
+ADIOS_DIR=$$ADIOS_BIN_DIR$$/..
+
+ADIOS_CONFIG=${ADIOS_DIR}/bin/adios_config
+
+LDFLAGS += `${ADIOS_CONFIG} -l` -L${ADIOS_DIR}/lib/skel -lskel 
+CFLAGS += `${ADIOS_CONFIG} -c`
+FCFLAGS += `${ADIOS_CONFIG} -fc`          
+FCLIBS += `${ADIOS_CONFIG} -fl` -L${ADIOS_DIR}/lib/skel -lskel
                
 APP=$$APP$$
 CTESTS=$$CTESTS$$
diff --git a/utils/skel/etc/templates/submit_sith.tpl b/utils/skel/etc/templates/submit_sith.tpl
index e503a4a..c9537b0 100644
--- a/utils/skel/etc/templates/submit_sith.tpl
+++ b/utils/skel/etc/templates/submit_sith.tpl
@@ -19,7 +19,7 @@ echo $$METHOD$$
 $$PRE_RM$$
 ./set_method.sh $$METHOD$$ $$APP$$_skel.xml.in $$APP$$_skel.xml 
 mpirun -n $$CORES_USED$$ ./$$EXEC$$
-mv $$APP$$_skel_time.xml $$APP$$_skel_time_${PBS_JOBID}_${i}.xml
+mv skel_time.xml $$APP$$_skel_time_${PBS_JOBID}_${i}.xml
 $$POST_RM$$
 done
 
diff --git a/utils/skel/lib/adios.py b/utils/skel/lib/adios.py
index f3c827a..0aed80d 100644
--- a/utils/skel/lib/adios.py
+++ b/utils/skel/lib/adios.py
@@ -84,6 +84,7 @@ class adiosGroup:
         return self.vardict [varname]
 
 
+
 class method:
     
     def __init__ (self, method_node):
@@ -111,6 +112,21 @@ class var:
         name = name.split ('(')[0]
         return name
 
+    def get_path (self):
+        path = self.var_node.getAttribute ('path')
+        return path
+
+    def get_fullpath (self):
+        path = self.get_path()
+        name = self.get_name()
+        if (path == ''):
+            fullpath = name
+        elif (path == '/'):
+            fullpath = '/'+name
+        else:
+            fullpath = path + '/' + name
+        return fullpath
+
     def get_gwrite (self):
         gw = self.var_node.getAttribute ('gwrite')
 
@@ -164,10 +180,28 @@ class var:
     def is_scalar (self):
         return self.get_dimensions() == None
 
+    # TODO: Implement this
+    def find_first_use (self):
+        # Loop through all of the vars in the group
+        for var in self.group.get_vars():
+            dim_num = 0;
+            if var.get_dimensions() is not None:
+                for dim in var.get_dimensions():
+                    # if this one uses this variable as a dimension, return the name and dim number
+                    if dim == self.get_name():
+                        return var.get_name(), dim_num
+                    dim_num = dim_num + 1
+
+        # None found, return None,None
+        return None,None
+
+
 class fortranFormatter:
     @staticmethod
     def get_write_line (var):
-        return '\n  call adios_write (adios_handle, "' + var.get_name() + '", ' + var.get_gwrite() + ', adios_error)'  
+        retval = '\n  call adios_write (adios_handle, "' + var.get_fullpath() + '", ' + var.get_gwrite() + ', adios_error)'  
+        #print retval
+        return retval
 
     @staticmethod
     def get_declaration (var, group_params):
@@ -246,7 +280,9 @@ class cFormatter:
         else:
             var_prefix = '&'
 
-        return '\nadios_write (adios_handle, "' + var.get_name() + '", ' + var_prefix + var.get_gwrite() + ');'  
+        retval = '\nadios_write (adios_handle, "' + var.get_fullpath() + '", ' + var_prefix + var.get_gwrite() + ');'  
+        #print retval
+        return retval
 
     @staticmethod
     def get_read_all_line (var):
diff --git a/utils/skel/lib/skel_bpls.py b/utils/skel/lib/skel_bpls.py
new file mode 100755
index 0000000..3b67f88
--- /dev/null
+++ b/utils/skel/lib/skel_bpls.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+
+import re
+
+class bpls:
+    def __init__ (self, file):
+
+        self.vars = {} # This will be a dictionary of dictionaries. The first level is 
+                       # Indexed by the variable names, and the second level has all of
+                       # the specific information for each variable (initially just type
+                       # and dimensions)
+
+        # For now, assume that the input is from a bpls call with no cl arguments given
+        # Can add more flexibility later by checking the output first and then parsing
+        # accordingly
+        for line in file:
+            var_dict = {}
+
+            tokens = line.split()
+
+            # The first item is the type
+            var_dict ['type'] = tokens[0]
+            
+            # Now parse the last item, which is either 'scalar' or a comma separated list of 
+            # integer dimensions wrapped in curly braces, i.e. {7, 8, 9}
+            if tokens[-1] == 'scalar':
+                var_dict ['dims'] = None
+            else:
+                start = line.rindex('{') + 1
+                end = line.rindex('}')
+                var_dict ['dims'] = line[start:end].split (', ')
+
+            # Now everything that is left, minus external whitespace, is the variable name.
+            # There is a small hole here which is that if the variable name ends with
+            # a space, there is no way to tell, since bpls fills with extra spaces to 
+            # align the columns. It is probably a bad idea to have variable names that
+            # end with spaces anyway, so I'm not going to worry about this right now.
+
+            line = line.strip()
+            start = line.index (' ') + 1 
+            if tokens[-1] == 'scalar':
+                end = -6
+            else:
+                end = line.rindex ('{')
+
+            var_dict ['name'] = line[start:end].strip()
+
+
+            # Put this var in the top level map according to its name
+            self.vars [var_dict['name'] ] = var_dict
+
+
+    def get_vars (self):
+        return self.vars.keys()
+
+
+    def get_dims (self, var):
+        print "getting dims for %s" % var
+        if var not in self.vars.keys():
+            return None
+        return self.vars[var]['dims']
+
+
+
+
+def main(argv=None):
+
+
+#    args = parse_command_line()
+
+    test = open ("gts.bpls")
+
+    b = bpls (test)
+
+    for var in b.get_vars():
+        print '%s    %s' % (var, b.get_dims (var) ) 
+        
+
+if __name__ == "__main__":
+    main()
+
+
+
diff --git a/utils/skel/lib/skel_bpy.py b/utils/skel/lib/skel_bpy.py
new file mode 100755
index 0000000..f7d89a0
--- /dev/null
+++ b/utils/skel/lib/skel_bpy.py
@@ -0,0 +1,276 @@
+#!/usr/bin/env python
+
+import yaml
+
+import sys
+
+
+# A representation of a bp file that is stored in a yaml document
+class skel_bpy:
+    def __init__ (self, filename):
+        stream = file (filename, 'r')
+        self.doc = yaml.load(stream)
+
+        #print self.doc
+
+        self.vars = {}
+        for v in self.doc['variables']:
+            name = v ['name']
+            self.vars [name] = var (name, v)
+            #print "Added variable %s\n" % name
+
+    def get_num_procs (self):
+        return self.doc['procs']
+
+    def get_steps (self):
+        return self.doc.get('steps', 1)
+
+    def get_vars (self):
+        return filter (lambda x: not x.get_type() ==  'string', self.vars.values() )
+
+    def get_var_dict (self):
+        return self.vars
+
+    def get_var (self, name):
+        return self.vars[name]
+
+    def get_var_names (self):
+        return self.vars.keys()
+
+    def get_language (self):
+        return self.doc['lang']
+
+    def get_group_name (self):
+        return self.doc['group']
+
+    def get_method (self):
+        ret_val = self.doc.get ('method', None)
+        if ret_val:
+            return ret_val
+        return "POSIX" # default method
+
+class var:
+    def __init__ (self, name, vardict):
+        self.name = name
+        self.vardict = vardict
+
+    def get_name (self):
+        return self.name
+
+    def get_safe_name (self):
+        # Remove slashes
+        return '_slash_'.join(self.get_name().split('/'))
+
+    def get_type (self):
+        return self.vardict['type']
+
+    def get_lang_type (self, lang):
+        #print "getting type for lang"
+        if lang == 'C' or lang == 'c':
+            return self.get_c_type()
+        else:
+            return self.get_fortran_type()
+          
+
+    def get_fortran_type (self):
+
+        self.ftypes = {
+            'string' : 'string',
+            'byte' : 'integer*1',
+            'integer*1' : 'integer*1',
+            'short' : 'integer*2',
+            'integer*2' : 'integer*2',
+            'integer' : 'integer*4',
+            'integer*4' : 'integer*4',
+            'long' : 'integer*8',
+            'long long' : 'integer*8',
+            'integer*8' : 'integer*8',
+            'unsigned byte' : 'unsigned integer*1',
+            'unsigned integer*1' : 'unsigned integer*1',
+            'unsigned short' : 'unsigned integer*2',
+            'unsigned integer*2' : 'unsigned integer*2',
+            'unsigned integer' : 'unsigned integer*4',
+            'unsigned integer*4' : 'unsigned integer*4',
+            'unsigned long' : 'unsigned integer*8',
+            'unsigned integer*8' : 'unsigned integer*8',
+            'float' : 'real*4',
+            'real' : 'real*4',
+            'real*4' : 'real*4',
+            'unsigned float' : 'unsigned real*4',
+            'unsigned real' : 'unsigned real*4',
+            'unsigned real*4' : 'unsigned real*4',
+            'double' : 'real*8',
+            'real*8' : 'real*8',
+            'unsigned double' : 'unsigned real*8',
+            'unsigned real*8' : 'unsigned real*8',
+            'complex' : 'complex',
+            'double complex' : 'double complex'
+        }
+
+        return self.ftypes.get(self.get_type(), "UNKNOWN_TYPE")
+
+    def get_c_type (self):
+        self.ftypes = {
+            'string' : 'string',
+            'byte' : 'unsigned char',
+            'integer*1' : 'char',
+            'short' : 'short',
+            'integer*2' : 'short',
+            'integer' : 'int',
+            'integer*4' : 'int',
+            'long' : 'long',
+            'long long' : 'long',
+            'integer*8' : 'long',
+            'unsigned byte' : 'unsigned byte',
+            'unsigned integer*1' : 'unsigned byte',
+            'unsigned short' : 'unsigned short',
+            'unsigned integer*2' : 'unsigned short',
+            'unsigned integer' : 'unsigned integer',
+            'unsigned integer*4' : 'unsigned integer',
+            'unsigned long' : 'unsigned long',
+            'unsigned integer*8' : 'unsigned long',
+            'float' : 'float',
+            'real' : 'float',
+            'real*4' : 'float',
+            'unsigned float' : 'unsigned float',
+            'unsigned real' : 'unsigned float',
+            'unsigned real*4' : 'unsigned float',
+            'double' : 'double',
+            'real*8' : 'double',
+            'unsigned double' : 'unsigned double',
+            'unsigned real*8' : 'unsigned double',
+            'complex' : 'complex',
+            'double complex' : 'double complex'
+        }
+
+        return self.ftypes.get(self.get_type(), "UNKNOWN_TYPE")
+
+    def get_dims (self):
+        if self.vardict['dims'] == 'scalar':
+            return None
+        else:
+            return self.vardict['dims']
+
+    def get_dims_str (self):
+        if self.vardict['dims'] == 'scalar':
+            return ''
+        else:
+            return ','.join(str (d) for d in self.vardict['dims'])
+
+    def get_ndims (self):
+        if self.get_dims() is None:
+            return 0
+        else:
+            return len (self.get_dims()) 
+    
+    # For strings...
+    def get_len (self):
+        return self.vardict ['len']
+
+
+    # This gives the size of one element of this type
+    def get_unit_size (self):
+
+        #print "Checking size of %s\n" % self.get_type()
+
+        type = self.get_type()
+
+        type_sizes = {
+
+            'string' : 1,
+            'byte' : 1,
+            'integer*1' : 1,
+            'short' : 2,
+            'integer*2' : 2,
+            'integer' : 4,
+            'integer*4' : 4,
+            'long' : 8,
+            'long long' : 8,
+            'integer*8' : 8,
+            'unsigned byte' : 1,
+            'unsigned integer*1' : 1,
+            'unsigned short' : 2,
+            'unsigned integer*2' : 2,
+            'unsigned integer' : 4,
+            'unsigned integer*4' : 4,
+            'unsigned long' : 8,
+            'unsigned integer*8' : 8,
+            'float' : 4,
+            'real' : 4,
+            'real*4' : 4,
+            'unsigned float' : 4,
+            'unsigned real' : 4,
+            'unsigned real*4' : 4,
+            'double' : 8,
+            'real*8' : 8,
+            'unsigned double' : 8,
+            'unsigned real*8' : 8,
+            'complex' : 8,
+            'double complex' : 16
+
+        }
+        size = type_sizes.get (type, None)
+        if size is not None:
+            return "%i" % size
+        else:
+            print "Unknown type: %s in get_unit_size()" % self.get_type()
+            sys.exit()
+
+
+    # This gives the size of a scalar or an array
+    def get_size (self):
+        if self.vardict['dims'] == 'scalar':
+            return self.get_unit_size()
+        else:
+            return "%s * %s" % (self.get_unit_size(), '*'.join (str(x) for x in self.get_dims() ) ) 
+
+    def get_global_dims (self):
+        return self.vardict.get ('global_dims', None)
+
+    def get_global_dims_str (self):
+        gd = self.get_global_dims()
+        if gd is None:
+            return ""
+        else:
+            return ",".join (str(glob_dim) for glob_dim in gd)
+
+    def get_offsets (self):
+        return self.vardict.get ('offsets', None)
+
+    def get_offsets_str (self):
+        o = self.get_offsets()
+        if o is None:
+            return ""
+        else:
+            return ",".join (str(off) for off in o)
+
+    def has_global_bounds (self):
+        return self.get_global_dims() is not None 
+
+    def get_value (self):
+
+        # Look for a single value first
+        val = self.vardict.get ('value', None)
+        if not val is None:
+            return val
+
+        # Multiple values not currently handled by template, just return first one.
+        vals = self.vardict.get('values', None)
+        if vals is None or length (vals) < 1:
+            return None
+        return vals[0]['val']
+
+def main(argv=None):
+    b = skel_bpy ("test.yaml")
+    print "Num Procs is %d\n" % b.get_num_procs()
+
+    vardict = b.get_vars()
+    print vardict
+
+    for vname in vardict:
+        v = vardict [vname]
+        print "%s: %s, %s\n" % (v.get_name(), v.get_type(), v.get_dims() )
+
+
+if __name__ == "__main__":
+    main()
diff --git a/utils/skel/lib/skel_makefile.py b/utils/skel/lib/skel_makefile.py
index b43bb07..b89c305 100644
--- a/utils/skel/lib/skel_makefile.py
+++ b/utils/skel/lib/skel_makefile.py
@@ -6,9 +6,72 @@ import sys
 
 import adios
 import skelconf
+import skel_bpy
 import skel_settings
 
 
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel makefile 
+            create a makefile for building a skeletal application''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to store I/O pattern')
+    parser.add_argument ('-b', '--bp-file', dest='bpfile', help='bp file to extract I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+
+def generate_makefiles_with_args (config, parent_parser):
+    args = pparse_command_line (parent_parser)
+
+    if args.yamlfile:
+        generate_makefile_from_yaml (args)
+    else:
+
+        try:
+            params = skelconf.skelConfig (args.project + '_params.xml')
+        except (IOError):
+            print "Error reading " + args.project + "_params.xml. Try running skel params " + args.project + " first,"
+            print "then check that " + args.project + "_params.xml exists."
+            return
+
+        generate_makefiles (params, config)
+
+
+def generate_makefile_from_yaml (args):
+
+    bpy = skel_bpy.skel_bpy (args.yamlfile)
+
+    template_file_name = "~/.skel/templates/Makefile.tmpl"
+    outfilename = "Makefile"
+
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
+    skel_file = open (outfilename, 'w')
+
+
+    # Now for the Cheetah magic:
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser(template_file_name), 'r')
+    t = Template(file=template_file)
+
+    t.bpy = bpy
+    t.project = args.project
+    t.bpfile = args.bpfile
+    skel_file.write (str(t) )
+ 
+
 
 def generate_makefiles (params, config):
     lang = config.get_host_language()
@@ -34,9 +97,12 @@ def generate_makefiles_fortran (params):
 
     include_statement = "" + os.path.dirname (sys.argv[0]) + '/../etc/skel/compiler_fragment.mk'
 
+    bindir = os.path.abspath(os.path.dirname(sys.argv[0]))        
+
     for template_line in makefile_template:
 
         # Fill in any replacement vars in this line...
+        template_line = template_line.replace ('$$ADIOS_BIN_DIR$$', bindir)
         template_line = template_line.replace ('$$APP$$', params.get_application () )
         template_line = template_line.replace ('$$INCLUDE$$', include_statement)
         template_line = template_line.replace ('$$TARGET$$', platform)
@@ -74,10 +140,13 @@ def generate_makefiles_c (params):
     makefile_template = open(os.path.expanduser(makefile_template_name), 'r')
 
     include_statement = "" + os.path.dirname (sys.argv[0]) + '/../etc/skel/compiler_fragment.mk'
+    
+    bindir = os.path.abspath(os.path.dirname(sys.argv[0]))        
 
     for template_line in makefile_template:
 
         # Fill in any replacement vars in this line...
+        template_line = template_line.replace ('$$ADIOS_BIN_DIR$$', bindir)
         template_line = template_line.replace ('$$APP$$', params.get_application () )
         template_line = template_line.replace ('$$INCLUDE$$', include_statement)
         template_line = template_line.replace ('$$TARGET$$', platform)
diff --git a/utils/skel/lib/skel_params.py b/utils/skel/lib/skel_params.py
index ca807d7..337f203 100644
--- a/utils/skel/lib/skel_params.py
+++ b/utils/skel/lib/skel_params.py
@@ -5,12 +5,50 @@ import argparse
 
 import adios
 import skel_settings
+import skel_bpls
 
+# Command line parsing is chained together. This is stage two. The first stage happens in ../bin/skel
+def pparse_command_line (parent_parser):
 
-def generate_param_file (app, outfile, config, groupname):
+    parser = argparse.ArgumentParser (
+                parents=[parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel params
+            create a parameter file to define skeletal application behavior''')
+
+    parser.add_argument ('-g', '--group', help='adios group')
+    parser.add_argument ('-b', '--bpls', help='file containing bpls output')
+
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing params file')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+def generate_param_file_with_args (config, parent_parser):
+    args = pparse_command_line (parent_parser)
+    
+    outfilename = args.project + '_params.xml'
+
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
+    generate_param_file (args.project, outfilename, config, args.group, args.bpls)
+
+
+def generate_param_file (app, outfile, config, groupname, bplsfile=None):
 
     param_file = open (outfile, 'w')
 
+    if bplsfile is not None:
+        print "Using bpls data in %s" % bplsfile
+        bpdata = skel_bpls.bpls (open (bplsfile, 'r') )
+
     #Write the file header
     param_file.write ('<?xml version="1.0"?>')
     param_file.write ('\n<skel-config application="' + app + '">')
@@ -38,7 +76,23 @@ def generate_param_file (app, outfile, config, groupname):
 
         for var in group.get_vars():
             if var.is_scalar():
-                all_scalars.add ('\n    <scalar name="' + var.get_name() + '" type="' + var.get_type() + '" value="128" />')
+
+                scalar_value = None
+
+                first_use_name, first_use_dim_num = var.find_first_use () # Get the name and dimension number of the first array that uses this scalar, or None if it is not used
+                if first_use_name is not None:
+                    dims = bpdata.get_dims (first_use_name)
+                    if dims is None:
+                        # Try adding a leading slash to deal with the way that bpls reports variable names without one
+                        dims = bpdata.get_dims ("/%s" % first_use_name)
+                    if dims is not None:
+                        scalar_value = dims[first_use_dim_num]
+                    
+
+                if scalar_value is None:
+                    scalar_value = 0 # Should be used only for variables that do not appear in any array dimensions
+
+                all_scalars.add ('\n    <scalar name="' + var.get_name() + '" type="' + var.get_type() + '" value="%s" />' % scalar_value)
             else:
                 dims = var.get_dimensions()
                 dim_str ='dims="'
@@ -71,7 +125,7 @@ def generate_param_file (app, outfile, config, groupname):
     param_file.close()
 
 
-
+# TODO: Get rid of this in favor of chained version, above.
 def parse_command_line():
 
     parser = argparse.ArgumentParser (description='Create a parameter file for the given skel project')
@@ -92,6 +146,11 @@ def main(argv=None):
     # Determine outfile name
     outfilename = args.project + '_params.xml.default'
 
+    # Only proceed if outfilename does not already exist.
+    if os.path.exists (outfilename):
+        print "%s exists, aborting. Delete the file or use '-f' to overwrite."
+        return 999
+
     generate_param_file (args.project, outfilename, config, args.group)
         
 
diff --git a/utils/skel/lib/skel_replay.py b/utils/skel/lib/skel_replay.py
new file mode 100644
index 0000000..79058e7
--- /dev/null
+++ b/utils/skel/lib/skel_replay.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+import argparse
+import os
+import stat
+import subprocess
+import sys
+
+import adios
+import skelconf
+import skel_bpy
+import skel_settings
+
+
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel makefile 
+            create a makefile for building a skeletal application''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to load I/O pattern')
+    parser.add_argument ('-b', '--bp-file', dest='bpfile', help='bp file to extract I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source files')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+
+def do_replay_with_args (parent_parser):
+    args = pparse_command_line (parent_parser)
+
+    if args.bpfile:
+        do_replay_from_bpfile (args)
+        return
+
+    if args.yamlfile:
+        do_replay_from_yaml (args)
+        return
+
+    print "No bp file or yaml file specified, exiting"
+    return
+
+#    else:
+#        try:
+#            params = skelconf.skelConfig (args.project + '_params.xml')
+#        except (IOError):
+#            print "Error reading " + args.project + "_params.xml. Try running skel params " + args.project + " first,"
+#            print "then check that " + args.project + "_params.xml exists."
+#            return
+
+#        generate_makefiles (params, config)
+
+
+
+
+def do_replay_from_bpfile (args):
+    print "Replaying using %s" % args.bpfile
+    
+    # First, call skeldump to get the yamlfile
+    sdcmd = "skeldump %s > %s.yaml" % (args.bpfile, args.project)
+    print (sdcmd)
+    os.system (sdcmd)
+
+    # Now just do the replay from the yamlfile
+    args.yamlfile = "%s.yaml" % args.project
+    do_replay_from_yaml (args)
+
+
+
+def do_replay_from_yaml (args):
+    print "Replaying using %s" % args.yamlfile
+
+    replay_file_name = "%s_replay.sh" % args.project
+    replay_file = open (replay_file_name, "w")
+    bpy = skel_bpy.skel_bpy (args.yamlfile)
+
+    # Generate replay_yaml.sh shell script
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser("~/.skel/templates/replay_yaml.tmpl"), 'r')
+    t = Template(file=template_file)
+    t.bpy = bpy
+
+    # No, I don't like these either.
+    t.yamlfile = args.yamlfile
+    t.project = args.project
+    t.force = args.force
+
+    replay_file.write (str(t) )
+
+    replay_file.close()
+
+    # Adjust the permissions of the replay script to make it runnable by user
+    os.chmod (replay_file_name, stat.S_IXUSR | stat.S_IWUSR | stat.S_IRUSR)
+
+    # Run it
+    subprocess.check_call ("./%s" % replay_file_name)
+
+
+
+
diff --git a/utils/skel/lib/skel_source.py b/utils/skel/lib/skel_source.py
index 88c5cc7..4929ae0 100644
--- a/utils/skel/lib/skel_source.py
+++ b/utils/skel/lib/skel_source.py
@@ -5,6 +5,7 @@ import argparse
 
 import adios
 import skelconf
+import skel_bpy
 import skel_settings
 
 
@@ -63,7 +64,7 @@ def generate_c_write (outfile, config, params, test):
         c_file.write ('\nMPI_Barrier (MPI_COMM_WORLD);')
         c_file.write ('\nskel_init_timer -= MPI_Wtime();')
 
-        c_file.write ('\n\nadios_init ("' + config.get_filename() + '");')
+        c_file.write ('\n\nadios_init ("' + config.get_filename() + '", MPI_COMM_WORLD);')
 
         c_file.write ('\nskel_init_timer += MPI_Wtime();')
 
@@ -171,7 +172,7 @@ def generate_c_write (outfile, config, params, test):
             c_file.write ('\n\n adios_timing_write_xml (adios_handle, "' + params.get_application() + '_skel_time.xml");')
 
         else:
-            c_file.write ('\n\n skel_write_coarse_xml_data ();')
+            c_file.write ('\n\n skel_write_coarse_xml_data (skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer);')
 
 
         c_file.write ('\ndouble skel_total_init, skel_total_open, skel_total_access, skel_total_close, skel_total_total;')
@@ -191,17 +192,6 @@ def generate_c_write (outfile, config, params, test):
 
 
 
-# Need to check whether A, compiled with timing support, and B, timing enabled.
-# If A and B, skip other reporting and use adios_timing, otherwise produce xml here.
-
-
-
-        if measure.use_adios_timing():
-            print "Use adios timing"
-        else:
-            print "Don't use adios timing"
-
-
             # Detailed reporting disabled, use adios timing instead.
 
             #c_file.write ('\n    fprintf (stdout, "rank, %i, open: %f, access %f, close %f, total %f\\n", skel_mpi_rank, skel_open_timer, skel_access_timer, skel_close_timer, skel_total_timer);')
@@ -651,8 +641,79 @@ def generate_c_read_all (outfile, config, params, test):
     #end: generate_c_read_all
 
 
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel source 
+            create source code to access the I/O pattern for the target skeletal application''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
+def create_source_from_yaml (args, config):
+    #print "Using yaml file"
+
+    # Determine the target language
+    if config.host_language == "C" or config.host_language =="c":
+        filetype = ".c"
+        template_file_name = "~/.skel/templates/source_write_c.tmpl"
+    else:
+        filetype = ".f90"
+        template_file_name = "~/.skel/templates/source_write_fortran.tmpl"
+
+    bpy = skel_bpy.skel_bpy (args.yamlfile)
+
+    # Determine outfile name
+
+    #print bpy.get_group_name()
+
+    extension = '_skel_' + bpy.get_group_name()
+    outfilename = args.project + extension + filetype
+
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
+    skel_file = open (outfilename, 'w')
+
+
+    # Now for the Cheetah magic:
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser(template_file_name), 'r')
+    t = Template(file=template_file)
+
+    t.bpy = bpy
+    t.project = args.project
+    skel_file.write (str(t) )
 
-def create_sources (params, config, project):
+
+def create_sources_with_args (config, parent_parser):
+
+    args = pparse_command_line (parent_parser)
+
+    if args.yamlfile is not None:
+        create_source_from_yaml(args, config)
+    else:
+        create_source_from_xml (args, config)
+
+
+def create_source_from_xml (args, config):
+
+    try:
+        params = skelconf.skelConfig (args.project + '_params.xml')
+    except (IOError):
+        print "Error reading " + args.project + "_params.xml. Try running skel params " + args.project + " first,"
+        print "then check that " + args.project + "_params.xml exists."
+        return  
 
     # Determine the target language
     if config.host_language == "C" or config.host_language =="c":
@@ -668,7 +729,7 @@ def create_sources (params, config, project):
 
             # Determine outfile name
             extension = '_skel_' + test.get_group_name()
-            outfilename = project + extension + filetype
+            outfilename = args.project + extension + filetype
 
             generate (outfilename, config, params, test)
 
@@ -682,7 +743,6 @@ def parse_command_line():
     return parser.parse_args()
 
 
-
 def main(argv=None):
 
     skel_settings.create_settings_dir_if_needed()
@@ -701,3 +761,4 @@ if __name__ == "__main__":
     main()
 
  
+
diff --git a/utils/skel/lib/skel_submit.py b/utils/skel/lib/skel_submit.py
index 5e6569a..5c406aa 100644
--- a/utils/skel/lib/skel_submit.py
+++ b/utils/skel/lib/skel_submit.py
@@ -5,13 +5,14 @@ import os
 
 import skelconf
 import adios
+import skel_bpy
 import skel_settings
 
 
 # To produce submit scripts, we'll work from a template. There will
 # be two types of replacement, simple variables, and macros (for the
 # tests)
-def generate_submit_scripts (params):
+def generate_submit_scripts_from_xml (params):
 
     settings = skel_settings.skel_settings()
 
@@ -112,6 +113,74 @@ def submit_line_template_replace (template_line, params, batch, test, settings):
     return template_line
 
 
+def generate_submit_scripts_from_yaml (args):
+    #print "Generating submission script using yaml file"
+
+    bpy = skel_bpy.skel_bpy (args.yamlfile)
+
+    outfilename = "submit.pbs"
+    template_file_name = "~/.skel/templates/submit_sith.tmpl"
+
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
+    skel_file = open (outfilename, 'w')
+
+    # Now for the Cheetah magic:
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser(template_file_name), 'r')
+    t = Template(file=template_file)
+
+    settings = skel_settings.skel_settings()
+
+    t.bpy = bpy
+    t.project = args.project
+    t.target = settings.get_submit_target()
+    t.account = settings.get_account()
+    t.job_name = "skel_%s_%d" % (args.project, bpy.get_num_procs() )
+    t.walltime = "1:00:00"
+    t.iteration_count = 1
+    t.executable = "%s_skel_%s" % (t.project, bpy.get_group_name() )
+
+    skel_file.write (str(t) )
+
+
+def generate_submit_scripts_with_args (parent_parser):
+
+    args = pparse_command_line (parent_parser)
+
+    if args.yamlfile is not None:
+        generate_submit_scripts_from_yaml(args)
+    else:
+        try:
+            params = skelconf.skelConfig (args.project + '_params.xml')
+        except (IOError):
+            print "Error reading " + args.project + "_params.xml. Try running skel params " + args.project + " first,"
+            print "then check that " + args.project + "_params.xml exists."
+            return 1
+
+        generate_submit_scripts_from_xml (params)
+
+
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel source 
+            create source code to access the I/O pattern for the target skeletal application''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing source file')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
 def parse_command_line():
 
     parser = argparse.ArgumentParser (description='Create submission scripts for the given skel project')
@@ -130,7 +199,7 @@ def main(argv=None):
     params = skelconf.skelConfig (args.project + '_params.xml')
 
     #generate_makefiles_c (params)
-    generate_submit_scripts (params)
+    generate_submit_scripts_from_xml (params)
 
 
 
diff --git a/utils/skel/lib/skel_xml.py b/utils/skel/lib/skel_xml.py
index 1377d14..7e6855d 100644
--- a/utils/skel/lib/skel_xml.py
+++ b/utils/skel/lib/skel_xml.py
@@ -1,11 +1,30 @@
 #!/usr/bin/env python
 
 import argparse
+import os
 import xml.dom.minidom
 
+import skel_bpy
 import skel_settings
 
 
+def pparse_command_line (parent_parser):
+    parser = argparse.ArgumentParser (
+                parents = [parent_parser],
+                formatter_class=argparse.RawDescriptionHelpFormatter,
+                prog='skel',
+                add_help=False,
+                description='''\
+        skel xml
+            create an xml file to define the I/O pattern for the target skeletal application''')
+
+    parser.add_argument ('-y', '--yaml-file', dest='yamlfile', help='yaml file to use for I/O pattern')
+    parser.add_argument ('-f', '--force', dest='force', action='store_true', help='overwrite existing XML file')
+    parser.set_defaults(force=False)
+
+    return parser.parse_args()
+
+
 def parse_command_line():
     parser = argparse.ArgumentParser (description='Rewrite elements of the adios config file that would produce invalid syntax in the generated code, e.g. gwrite attributes containing + or %')
     parser.add_argument ('project', metavar='project', help='Name of the skel project')
@@ -32,29 +51,73 @@ def cleanse (str):
 
 
 
-def create_skel_xml (project):
+def create_skel_xml (project, parent_parser):
+
+    args = pparse_command_line (parent_parser)
+    if args.yamlfile is not None:
+        create_from_yaml (project, args)
+    else:
+        create_from_xml (project, args)
+
+
+def create_from_yaml (project,args):
+    #print "using yaml file"
 
     outfilename = project + '_skel.xml'
 
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
     skel_file = open (outfilename, 'w')
 
+    bpy = skel_bpy.skel_bpy (args.yamlfile)
+
+
+    # Okay, it's time to try out Cheetah.
+    from Cheetah.Template import Template
+    template_file = open (os.path.expanduser("~/.skel/templates/xml.tmpl"), 'r')
+    t = Template(file=template_file)
+    t.bpy = bpy
+    skel_file.write (str(t) )
+    # All done. That was easy.
+
+
+def create_from_xml (project, args):
+
+    outfilename = project + '_skel.xml'
+
+    # Only proceed if outfilename does not already exist, or if -f was used
+    if os.path.exists (outfilename) and not args.force:
+        print "%s exists, aborting. Delete the file or use -f to overwrite." % outfilename
+        return 999
+
+    skel_file = open (outfilename, 'w')
+
+    
+
+
+
     doc = xml.dom.minidom.parse (project + '.xml')
-  
+ 
+    # TODO: remove this application specific kludge.
     #remove diagnostic groups (xgc1)
-
     groups = doc.getElementsByTagName ('adios-group')
     for g in groups:
         if g.getAttribute('name').startswith ('diag'):
             # remove this group
             doc.getElementsByTagName ('adios-config')[0].removeChild(g)
-
     methods = doc.getElementsByTagName ('method')
     for m in methods:
         if m.getAttribute ('group').startswith ('diag'):
             # remove this method
             doc.getElementsByTagName ('adios-config')[0].removeChild(m)
 
+
+
     for m in methods:
+        # TODO: Before adding this node, we should remove any text that is already here...
         token = doc.createTextNode ('***skel-parameters***')
         m.appendChild (token)
 
diff --git a/utils/skel/src/Makefile.in b/utils/skel/src/Makefile.in
index 4f127f1..d8da02a 100644
--- a/utils/skel/src/Makefile.in
+++ b/utils/skel/src/Makefile.in
@@ -40,7 +40,11 @@ subdir = utils/skel/src
 DIST_COMMON = $(library_include_HEADERS) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -50,14 +54,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -139,12 +147,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = $(MPICC)
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -207,6 +224,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -279,7 +299,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
diff --git a/utils/skel/src/skel_xml_output.c b/utils/skel/src/skel_xml_output.c
index 2f19692..2f2dd1e 100644
--- a/utils/skel/src/skel_xml_output.c
+++ b/utils/skel/src/skel_xml_output.c
@@ -21,7 +21,7 @@ int skel_write_coarse_xml_data (double open_time, double write_time, double clos
  */
 int common_skel_write_coarse_xml_data (double open_time, double write_time, double close_time, double total_time)
 {
-    char* filename = "gts_skel_time.xml";
+    char* filename = "skel_time.xml";
 
     int size, rank, i;
     MPI_Comm_size (MPI_COMM_WORLD, &size);
diff --git a/utils/skeldump/CMakeLists.txt b/utils/skeldump/CMakeLists.txt
new file mode 100644
index 0000000..031da20
--- /dev/null
+++ b/utils/skeldump/CMakeLists.txt
@@ -0,0 +1,13 @@
+include_directories(${PROJECT_SOURCE_DIR}/src)
+include_directories(${PROJECT_SOURCE_DIR}/src/core)
+include_directories(${PROJECT_BINARY_DIR})
+include_directories(${PROJECT_SOURCE_DIR}/src/public)
+link_directories(${PROJECT_BINARY_DIR}/src)
+link_directories(${PROJECT_BINARY_DIR}/src/core)
+
+add_executable(skeldump skeldump.c)
+#target_link_libraries(skeldump adios_internal_nompi ${ADIOSLIB_INT_LDADD})
+target_link_libraries(skeldump adiosread_nompi ${ADIOSREADLIB_SEQ_LDADD})
+set_target_properties(skeldump PROPERTIES COMPILE_FLAGS "${ADIOSLIB_EXTRA_CPPFLAGS} ${ADIOSLIB_INT_CPPFLAGS} ${ADIOSLIB_INT_CFLAGS}")
+
+install(PROGRAMS ${CMAKE_BINARY_DIR}/utils/skeldump/skeldump DESTINATION ${bindir})
diff --git a/utils/skeldump/Makefile.am b/utils/skeldump/Makefile.am
new file mode 100644
index 0000000..9dc9c6d
--- /dev/null
+++ b/utils/skeldump/Makefile.am
@@ -0,0 +1,17 @@
+INCLUDES = $(all_includes)
+INCLUDES += -I$(top_srcdir)/src -I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
+
+AUTOMAKE_OPTIONS = no-dependencies
+
+bin_PROGRAMS = skeldump 
+
+skeldump_SOURCES = skeldump.c 
+skeldump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
+skeldump_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
+skeldump_LDADD = $(top_builddir)/src/libadiosread_nompi.a 
+skeldump_LDADD += $(ADIOSREADLIB_SEQ_LDADD)
+
+EXTRA_DIST = skeldump.h
+#CC=$(MPICC)
+#CXX=$(MPICXX)
+
diff --git a/utils/bpls/Makefile.in b/utils/skeldump/Makefile.in
similarity index 87%
copy from utils/bpls/Makefile.in
copy to utils/skeldump/Makefile.in
index f18d9d4..1fa5514 100644
--- a/utils/bpls/Makefile.in
+++ b/utils/skeldump/Makefile.in
@@ -34,11 +34,15 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = bpls$(EXEEXT)
-subdir = utils/bpls
+bin_PROGRAMS = skeldump$(EXEEXT)
+subdir = utils/skeldump
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/config/ac_alacrity.m4 \
+	$(top_srcdir)/config/ac_aplod.m4 \
+	$(top_srcdir)/config/ac_bgq.m4 \
+	$(top_srcdir)/config/ac_bzip2.m4 \
+	$(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_cray_ugni.m4 \
 	$(top_srcdir)/config/ac_dataspaces.m4 \
 	$(top_srcdir)/config/ac_datatap.m4 \
@@ -48,14 +52,18 @@ am__aclocal_m4_deps = $(top_srcdir)/config/ac_cray_pmi.m4 \
 	$(top_srcdir)/config/ac_flexpath.m4 \
 	$(top_srcdir)/config/ac_hdf5.m4 \
 	$(top_srcdir)/config/ac_infiniband.m4 \
+	$(top_srcdir)/config/ac_isobar.m4 \
 	$(top_srcdir)/config/ac_lustre.m4 \
 	$(top_srcdir)/config/ac_mxml.m4 \
 	$(top_srcdir)/config/ac_nc4par.m4 \
+	$(top_srcdir)/config/ac_ncsu_timer.m4 \
 	$(top_srcdir)/config/ac_netcdf.m4 \
 	$(top_srcdir)/config/ac_nssi.m4 \
 	$(top_srcdir)/config/ac_pablo.m4 \
 	$(top_srcdir)/config/ac_phdf5.m4 \
 	$(top_srcdir)/config/ac_portals.m4 \
+	$(top_srcdir)/config/ac_szip.m4 \
+	$(top_srcdir)/config/ac_zlib.m4 \
 	$(top_srcdir)/config/acx_mpi.m4 \
 	$(top_srcdir)/config/acx_pthread.m4 \
 	$(top_srcdir)/config/cercs.m4 $(top_srcdir)/configure.ac
@@ -67,13 +75,13 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am_bpls_OBJECTS = bpls-bpls.$(OBJEXT)
-bpls_OBJECTS = $(am_bpls_OBJECTS)
+am_skeldump_OBJECTS = skeldump-skeldump.$(OBJEXT)
+skeldump_OBJECTS = $(am_skeldump_OBJECTS)
 am__DEPENDENCIES_1 =
-bpls_DEPENDENCIES = $(top_builddir)/src/libadiosread_nompi.a \
+skeldump_DEPENDENCIES = $(top_builddir)/src/libadiosread_nompi.a \
 	$(am__DEPENDENCIES_1)
-bpls_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bpls_LDFLAGS) \
+skeldump_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(skeldump_LDFLAGS) \
 	$(LDFLAGS) -o $@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp =
@@ -87,8 +95,8 @@ CCLD = $(CC)
 LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
-SOURCES = $(bpls_SOURCES)
-DIST_SOURCES = $(bpls_SOURCES)
+SOURCES = $(skeldump_SOURCES)
+DIST_SOURCES = $(skeldump_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -114,12 +122,21 @@ ADIOSREADLIB_SEQ_CFLAGS = @ADIOSREADLIB_SEQ_CFLAGS@
 ADIOSREADLIB_SEQ_CPPFLAGS = @ADIOSREADLIB_SEQ_CPPFLAGS@
 ADIOSREADLIB_SEQ_LDADD = @ADIOSREADLIB_SEQ_LDADD@
 ADIOSREADLIB_SEQ_LDFLAGS = @ADIOSREADLIB_SEQ_LDFLAGS@
+ALACRITY_CPPFLAGS = @ALACRITY_CPPFLAGS@
+ALACRITY_LDFLAGS = @ALACRITY_LDFLAGS@
+ALACRITY_LIBS = @ALACRITY_LIBS@
 AMTAR = @AMTAR@
+APLOD_CPPFLAGS = @APLOD_CPPFLAGS@
+APLOD_LDFLAGS = @APLOD_LDFLAGS@
+APLOD_LIBS = @APLOD_LIBS@
 AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BZIP2_CPPFLAGS = @BZIP2_CPPFLAGS@
+BZIP2_LDFLAGS = @BZIP2_LDFLAGS@
+BZIP2_LIBS = @BZIP2_LIBS@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
@@ -182,6 +199,9 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ISOBAR_CPPFLAGS = @ISOBAR_CPPFLAGS@
+ISOBAR_LDFLAGS = @ISOBAR_LDFLAGS@
+ISOBAR_LIBS = @ISOBAR_LIBS@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -254,7 +274,16 @@ SHELL = @SHELL@
 SKEL_HAVE_ADIOS_TIMING = @SKEL_HAVE_ADIOS_TIMING@
 SKEL_TIMING = @SKEL_TIMING@
 STRIP = @STRIP@
+SZIP_CPPFLAGS = @SZIP_CPPFLAGS@
+SZIP_LDFLAGS = @SZIP_LDFLAGS@
+SZIP_LIBS = @SZIP_LIBS@
+TIMER_CPPFLAGS = @TIMER_CPPFLAGS@
+TIMER_LDFLAGS = @TIMER_LDFLAGS@
+TIMER_LIBS = @TIMER_LIBS@
 VERSION = @VERSION@
+ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@
+ZLIB_LDFLAGS = @ZLIB_LDFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -309,15 +338,15 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = $(all_includes) -I$(top_builddir)/src \
-	-I$(top_builddir)/src/public
+INCLUDES = $(all_includes) -I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/public -I$(top_srcdir)/src/core
 AUTOMAKE_OPTIONS = no-dependencies
-bpls_SOURCES = bpls.c 
-bpls_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
-bpls_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
-bpls_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
+skeldump_SOURCES = skeldump.c 
+skeldump_CPPFLAGS = $(ADIOSLIB_EXTRA_CPPFLAGS) $(ADIOSREADLIB_SEQ_CPPFLAGS) $(ADIOSREADLIB_SEQ_CFLAGS)
+skeldump_LDFLAGS = $(ADIOSREADLIB_SEQ_LDFLAGS) 
+skeldump_LDADD = $(top_builddir)/src/libadiosread_nompi.a \
 	$(ADIOSREADLIB_SEQ_LDADD)
-EXTRA_DIST = bpls.h
+EXTRA_DIST = skeldump.h
 all: all-am
 
 .SUFFIXES:
@@ -331,9 +360,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/bpls/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/skeldump/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu utils/bpls/Makefile
+	  $(AUTOMAKE) --gnu utils/skeldump/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -395,9 +424,9 @@ clean-binPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-bpls$(EXEEXT): $(bpls_OBJECTS) $(bpls_DEPENDENCIES) 
-	@rm -f bpls$(EXEEXT)
-	$(bpls_LINK) $(bpls_OBJECTS) $(bpls_LDADD) $(LIBS)
+skeldump$(EXEEXT): $(skeldump_OBJECTS) $(skeldump_DEPENDENCIES) 
+	@rm -f skeldump$(EXEEXT)
+	$(skeldump_LINK) $(skeldump_OBJECTS) $(skeldump_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -414,11 +443,11 @@ distclean-compile:
 .c.lo:
 	$(LTCOMPILE) -c -o $@ $<
 
-bpls-bpls.o: bpls.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpls_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpls-bpls.o `test -f 'bpls.c' || echo '$(srcdir)/'`bpls.c
+skeldump-skeldump.o: skeldump.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(skeldump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o skeldump-skeldump.o `test -f 'skeldump.c' || echo '$(srcdir)/'`skeldump.c
 
-bpls-bpls.obj: bpls.c
-	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bpls_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bpls-bpls.obj `if test -f 'bpls.c'; then $(CYGPATH_W) 'bpls.c'; else $(CYGPATH_W) '$(srcdir)/bpls.c'; fi`
+skeldump-skeldump.obj: skeldump.c
+	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(skeldump_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o skeldump-skeldump.obj `if test -f 'skeldump.c'; then $(CYGPATH_W) 'skeldump.c'; else $(CYGPATH_W) '$(srcdir)/skeldump.c'; fi`
 
 mostlyclean-libtool:
 	-rm -f *.lo
diff --git a/utils/bpls/bpls.c b/utils/skeldump/skeldump.c
similarity index 91%
copy from utils/bpls/bpls.c
copy to utils/skeldump/skeldump.c
index 71c276a..1916464 100644
--- a/utils/bpls/bpls.c
+++ b/utils/skeldump/skeldump.c
@@ -6,9 +6,12 @@
  */
 
 /* 
- * List the content of a BP file.
+ * Extract metadata needed by skel to recreate I/O pattern of a BP file.
+ *   This is a prototype version that contains much unnecessary stuff that
+ *   is leftover from bpls but not needed here. It should be cleaned up 
+ *   eventually.
  *
- * Author: Norbert Podhorszki, pnorbert at ornl.gov
+ * Adapted from bpls.c
  *
  **/
 
@@ -31,10 +34,12 @@
 #include <regex.h>    // regular expression matching
 #include <fnmatch.h>  // shell pattern matching
 
-#include "bpls.h"
+
+#include "skeldump.h"
+#include "bp_utils.h"
 #include "adios_read.h"
 #include "adios_types.h"
-
+ 
 
 #ifdef DMALLOC
 #include "dmalloc.h"
@@ -66,6 +71,7 @@ bool noindex;              // do no print array indices with data
 bool printByteAsChar;      // print 8 bit integer arrays as string
 bool plot;                 // dump histogram related information
 bool hidden_attrs;         // show hidden attrs in BP file
+bool show_decomp;          // show decomposition of arrays
 
 // other global variables
 char *prgname; /* argv[0] */
@@ -99,12 +105,13 @@ struct option options[] = {
     {"columns",              required_argument,    NULL,    'n'}, 
     {"format",               required_argument,    NULL,    'f'}, 
     {"hidden_attrs",         no_argument,          &hidden_attrs,    true}, 
+    {"decomp",               no_argument,          NULL,    'D'},
     //    {"time",                 required_argument,    NULL,    't'}, 
     {NULL,                   0,                    NULL,    0}
 };
 
 
-static const char *optstring = "hvepyrtaAldSg:o:x:s:c:n:f:";
+static const char *optstring = "hvepyrtaAldSDg:o:x:s:c:n:f:";
 
 // help function
 void display_help() {
@@ -144,6 +151,7 @@ void display_help() {
             "  --format    | -f \"str\"     Format string to use for one data item in print\n"
             "                               instead of the default. E.g. \"%%6.3f\"\n"
             "  --hidden_attrs             Show hidden ADIOS attributes in the file\n"
+            "  --decomp    | -D           Show decomposition of variables as layed out in file\n"
             /*
                "  --time    | -t N [M]      # print data for timesteps N..M only (or only N)\n"
                "                              default is to print all available timesteps\n"
@@ -244,6 +252,9 @@ int main( int argc, char *argv[] ) {
             case 'v':
                 verbose++;
                 break;
+            case 'D':
+                show_decomp = true;
+                break;
                 /*
                    case 't':
                    errno = 0;
@@ -365,6 +376,7 @@ void init_globals(void) {
     hidden_attrs         = false;
     formatgiven          = false;
     printByteAsChar      = false;
+    show_decomp          = false;
     for (i=0; i<MAX_DIMS; i++) {
         istart[i]  = 0;
         icount[i]  = -1;  // read full var by default
@@ -399,7 +411,7 @@ void printSettings(void) {
     if (longopt)
         printf("      -l : show scalar values and min/max/avg of arrays\n");
     if (sortnames)
-        printf("      -t : sort names before listing\n");
+        printf("      -r : sort names before listing\n");
     if (attrsonly)
         printf("      -A : list attributes only\n");
     else if (listattrs)
@@ -412,6 +424,8 @@ void printSettings(void) {
         printf("      -f : dump using printf format \"%s\"\n", format);
     if (output_xml)
         printf("      -x : output data in XML format\n");
+    if (show_decomp)
+        printf("      -D : show decomposition of variables in the file\n");
     if (hidden_attrs)
         printf("         : show hidden attributes in the file\n");
 }
@@ -439,9 +453,13 @@ void print_file_size(uint64_t size)
 
 }
 
-// prototypes
-int print_data_hist(ADIOS_VARINFO * vi, char * varname);
-int print_data_characteristics(void * min, void * max, double * avg, double * std_dev, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
+
+static inline int ndigits (int n) 
+{
+    static char digitstr[32];
+    return snprintf (digitstr, 32, "%d", n);
+}
+
 
 int     nVarsMatched=0;
 
@@ -515,7 +533,22 @@ int doList_group (ADIOS_FILE *fp)
         if (len > maxtypelen) maxtypelen = len;
     }
 
+    /* LANGUAGE */
+    // Let's peek at the first pg to see what language was used to create this file.
+    // Assume the file is homogenous.
+#if 1    
+    BP_PROC * p = (BP_PROC *) fp->fh;
+    BP_FILE * fh = (BP_FILE *) p->fh;
+    fprintf (outf, "lang: %s\n", 
+             fh->pgs_root->adios_host_language_fortran==adios_flag_yes?"Fortran":"C");
+#endif
+
+    fprintf (outf, "procs: %i\n", fh->mfooter.pgs_count);
+    fprintf (outf, "group: group1\n");
+
+
     /* VARIABLES */
+    fprintf (outf,"variables: [\n");
     for (n=0; n<nNames; n++) {
         matches = false;
         if (isVar[n])  {
@@ -534,10 +567,17 @@ int doList_group (ADIOS_FILE *fp)
 
         if (matches) {
             nVarsMatched++;
+            fprintf (outf, "  {\n");
 
             // print definition of variable
-            fprintf(outf,"%c %-*s  %-*s", commentchar, maxtypelen, 
-                    adios_type_to_string(vartype), maxlen, names[n]); 
+            fprintf (outf, "    name: \"%s\",\n", names[n] );
+            fprintf (outf, "    type: %s,\n", adios_type_to_string(vartype) );
+            if (vartype == adios_string)
+            {
+                fprintf (outf, "    len: %i,\n", 1024);
+            }
+            // fprintf(outf,"%c %-*s  %-*s", commentchar, maxtypelen, 
+            //        adios_type_to_string(vartype), maxlen, names[n]); 
             if (!isVar[n]) {
                 // list (and print) attribute
                 if (readattrs || dump) {
@@ -555,15 +595,25 @@ int doList_group (ADIOS_FILE *fp)
                 // array
                 //fprintf(outf,"  {%s%d", (vi->timedim==0 ? "T-": ""),vi->dims[0]);
 
-                fprintf(outf,"  ");
+                //fprintf(outf,"    ");
                 if (timed) 
                     fprintf(outf, "%d*", vi->nsteps);
+
+
+                adios_inq_var_blockinfo (fp, vi);
+                fprintf(outf, "    dims: ");
                 if (vi->ndim > 0) {
-                    fprintf(outf,"{%lld", vi->dims[0]);
+                    if (vi->blockinfo)
+                        fprintf(outf,"[%lld", vi->blockinfo[0].count[0]);
+                    else
+                        fprintf(outf,"[%lld", vi->dims[0]);
                     for (j=1; j < vi->ndim; j++) {
-                        fprintf(outf,", %lld", vi->dims[j]);
+                        if (vi->blockinfo)
+                            fprintf(outf,", %lld", vi->blockinfo[0].count[j]);
+                        else
+                            fprintf(outf,", %lld", vi->dims[j]);
                     }
-                    fprintf(outf,"}");
+                    fprintf(outf,"]");
                 } else {
                     fprintf(outf,"scalar");
                 }
@@ -675,16 +725,33 @@ int doList_group (ADIOS_FILE *fp)
                     }
                 } // longopt && vi->statistics 
                 fprintf(outf,"\n");
+
+                if (show_decomp) {
+                    adios_inq_var_blockinfo (fp, vi);
+                    print_decomp(vi);
+                }
+
             } else {
                 // scalar
-                fprintf(outf,"  scalar");
+                fprintf(outf,"    dims: scalar");
+                if (vi->value) {
+                    fprintf (outf, ",\n    value: \"");
+                    print_data (vi->value, 0, vartype, false);
+                    fprintf (outf, "\"");
+                }
                 if (longopt && vi->value) {
                     fprintf(outf," = ");
                     print_data(vi->value, 0, vartype, false); 
                     matches = false; // already printed
                 }
                 fprintf(outf,"\n");
+
+                if (show_decomp) {
+                    adios_inq_var_blockinfo (fp, vi);
+                    print_decomp(vi);
+                }
             }
+            fprintf (outf, "  },\n");
         }
 
         if (matches && dump) {
@@ -701,8 +768,10 @@ int doList_group (ADIOS_FILE *fp)
         //else
         if (!isVar[n])
             free(value);
+
     }
     /* Free ADIOS_VARINFOs */
+    fprintf (outf, "]\n");
     for (n=0; n<nNames; n++) {
         if (isVar[n])  {
             adios_free_varinfo(vis[n]);
@@ -984,6 +1053,7 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
     int  status;            
     bool incdim;            // used in incremental reading in
     ADIOS_SELECTION * sel;  // boundnig box to read
+    int ndigits_dims[32];        // # of digits (to print) of each dimension 
 
     if (getTypeInfo(vi->type, &elemsize)) {
         fprintf(stderr, "Adios type %d (%s) not supported in bpls. var=%s\n", 
@@ -1087,9 +1157,12 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
 
 
     // init s and c
+    // and calculate ndigits_dims
     for (j=0; j<tdims; j++) {
         s[j]=start_t[j];
         c[j]=readn[j];
+
+        ndigits_dims[j] = ndigits (start_t[j]+count_t[j]-1); // -1: dim=100 results in 2 digits (0..99)
     }
 
     // read until read all 'nelems' elements
@@ -1132,7 +1205,7 @@ int readVar(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, bool timed)
         //if (verbose>2) printf("  read %lld bytes\n", bytes_read);
 
         // print slice
-        print_dataset(data, vi->type, s, c, tdims); 
+        print_dataset(data, vi->type, s, c, tdims, ndigits_dims); 
 
         // prepare for next read
         sum += actualreadn;
@@ -1458,7 +1531,7 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
             fprintf(outf,(f ? format : "%hhd "), ((signed char *) data)[item]);
             break;
         case adios_string:
-            fprintf(outf,(f ? format : "\"%s\""), ((char *) data)+item);
+            fprintf(outf,(f ? format : "%s"), ((char *) data)+item);
             break;
 
         case adios_unsigned_short:  
@@ -1509,7 +1582,7 @@ int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool all
 }
 
 int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype, 
-        uint64_t *s, uint64_t *c, int tdims)
+        uint64_t *s, uint64_t *c, int tdims, int *ndigits)
 {
     int i,item, steps;
     char idxstr[128], vstr[128], buf[16];
@@ -1531,9 +1604,9 @@ int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype,
         idxstr[0] = '\0'; // empty idx string
         if (nextcol == 0) {
             if (!noindex && tdims > 0) {
-                sprintf(idxstr,"    (%lld",ids[0]);
+                sprintf(idxstr,"    (%*lld",ndigits[0], ids[0]);
                 for (i=1; i<tdims; i++) {
-                    sprintf(buf,",%lld",ids[i]);
+                    sprintf(buf,",%*lld",ndigits[i],ids[i]);
                     strcat(idxstr, buf);
                 }
                 strcat(idxstr,")    ");
@@ -1589,6 +1662,50 @@ void print_endline(void)
 }
 
 
+int print_decomp(ADIOS_VARINFO *vi)
+{
+    /* Print block info */
+    int i,j,k;
+    int ndigits_nsteps = ndigits (vi->nsteps-1);
+    if (vi->ndim == 0) 
+    {
+        // scalars
+        for (i=0; i < vi->nsteps; i++) {
+            fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
+            fprintf(outf, "%d instances available\n", vi->nblocks[i]);
+        }
+        return 0;
+    } 
+    else 
+    {
+        // arrays
+        int ndigits_nblocks;
+        int ndigits_dims[32];
+        for (k=0; k < vi->ndim; k++) {
+            // get digit lengths for each dimension
+            ndigits_dims[k] = ndigits (vi->dims[k]-1);
+        }
+
+        for (i=0; i < vi->nsteps; i++) {
+            fprintf(outf, "        step %*d: ", ndigits_nsteps, i);
+            fprintf(outf,"\n");
+            ndigits_nblocks = ndigits (vi->nblocks[i]-1);
+            for (j=0; j < vi->nblocks[i]; j++) {
+                fprintf(outf,"          block %*d: [", ndigits_nblocks, j);
+                for (k=0; k < vi->ndim; k++) {
+                    fprintf(outf, "%*lld:%*lld", 
+                            ndigits_dims[k],
+                            vi->blockinfo[j].start[k],
+                            ndigits_dims[k],
+                            vi->blockinfo[j].start[k] + vi->blockinfo[j].count[k]-1);
+                    if (k < vi->ndim-1)
+                        fprintf(outf, ", ");
+                }
+                fprintf(outf, "]\n");
+            }
+        }
+    }
+}
 
 // parse a string "0, 3; 027" into an integer array
 // of [0,3,27] 
diff --git a/utils/bpls/bpls.h b/utils/skeldump/skeldump.h
similarity index 72%
copy from utils/bpls/bpls.h
copy to utils/skeldump/skeldump.h
index 46f526d..ccee001 100644
--- a/utils/bpls/bpls.h
+++ b/utils/skeldump/skeldump.h
@@ -5,20 +5,27 @@
  * Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.
  */
 
+#ifndef __SKELDUMP_H__
+#define __SKELDUMP_H__
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
 #include <stdint.h>
 #include "adios_read.h"
 
-/* definitions for bpls.c */
+/* definitions for skeldump.c */
 #define myfree(p) if (p) { free(p); p=NULL; }
 
 #ifndef HAVE_STRNDUP
 #  define strndup(str,len) strdup(str)
 #endif
 
-typedef int bool;
-#define false 0
-#define true  1
+//typedef int bool;
+//#define false 0
+//#define true  1
 
 #define CUT_TO_BYTE(x) (x < 0 ? 0 : (x > 255 ? 255 : x))
 
@@ -44,6 +51,17 @@ int  print_start(const char *fname);
 void print_slice_info(int ndim, uint64_t *dims, int timed, int nsteps, uint64_t *s, uint64_t *c);
 int print_data(void *data, int item, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
 int print_dataset(void *data, enum ADIOS_DATATYPES adiosvartype, 
-               uint64_t *s, uint64_t *c, int tdims);  
+               uint64_t *s, uint64_t *c, int tdims, int* ndigits);  
 void print_endline(void);
 void print_stop(void);
+int print_data_hist(ADIOS_VARINFO * vi, char * varname);
+int print_data_characteristics(void * min, void * max, double * avg, double * std_dev, enum ADIOS_DATATYPES adiosvartype, bool allowformat);
+int print_decomp(ADIOS_VARINFO *vi);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __BP_UTILS_H__
+
diff --git a/wrappers/numpy/README b/wrappers/numpy/README
index e745cb2..412ccf6 100644
--- a/wrappers/numpy/README
+++ b/wrappers/numpy/README
@@ -5,7 +5,7 @@ This directory contains the codes for the ADIOS python/numpy wrapper
 to to call the native ADIOS library. This module is built by Cython.
 
 
-== Build == 
+== Build with CMake == 
 
 This program can be built with CMake (http://www.cmake.org/). You may
 want to a build directory and run cmake pointing the source directory
@@ -35,3 +35,18 @@ $ make test
 If you need a verbose output, type the following
 
 $ ctest -V
+
+== Build with Python == 
+
+This program also can be build and installed by using python's
+standard package distribution method. For example,
+
+$ python setup.py build
+will compile adios python module. Once successfully completed, type
+
+$ python setup.py install 
+Or,
+$ python setup.py install --user
+to install ADIOS module in python's default package directory or user
+local directory.
+
diff --git a/wrappers/numpy/adios.cpp b/wrappers/numpy/adios.cpp
new file mode 100644
index 0000000..40270c0
--- /dev/null
+++ b/wrappers/numpy/adios.cpp
@@ -0,0 +1,16287 @@
+/* Generated by Cython 0.19.1 on Tue Jul 16 14:56:11 2013 */
+
+#define PY_SSIZE_T_CLEAN
+#ifndef CYTHON_USE_PYLONG_INTERNALS
+#ifdef PYLONG_BITS_IN_DIGIT
+#define CYTHON_USE_PYLONG_INTERNALS 0
+#else
+#include "pyconfig.h"
+#ifdef PYLONG_BITS_IN_DIGIT
+#define CYTHON_USE_PYLONG_INTERNALS 1
+#else
+#define CYTHON_USE_PYLONG_INTERNALS 0
+#endif
+#endif
+#endif
+#include "Python.h"
+#ifndef Py_PYTHON_H
+    #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02040000
+    #error Cython requires Python 2.4+.
+#else
+#include <stddef.h> /* For offsetof */
+#ifndef offsetof
+#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+  #ifndef __fastcall
+    #define __fastcall
+  #endif
+#endif
+#ifndef DL_IMPORT
+  #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+  #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+#define CYTHON_COMPILING_IN_PYPY 1
+#define CYTHON_COMPILING_IN_CPYTHON 0
+#else
+#define CYTHON_COMPILING_IN_PYPY 0
+#define CYTHON_COMPILING_IN_CPYTHON 1
+#endif
+#if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;
+  #define PY_SSIZE_T_MAX INT_MAX
+  #define PY_SSIZE_T_MIN INT_MIN
+  #define PY_FORMAT_SIZE_T ""
+  #define CYTHON_FORMAT_SSIZE_T ""
+  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
+  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
+                                (PyErr_Format(PyExc_TypeError, \
+                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
+                                 (PyObject*)0))
+  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
+                                  !PyComplex_Check(o))
+  #define PyIndex_Check __Pyx_PyIndex_Check
+  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
+  #define __PYX_BUILD_PY_SSIZE_T "i"
+#else
+  #define __PYX_BUILD_PY_SSIZE_T "n"
+  #define CYTHON_FORMAT_SSIZE_T "z"
+  #define __Pyx_PyIndex_Check PyIndex_Check
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
+  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define PyVarObject_HEAD_INIT(type, size) \
+          PyObject_HEAD_INIT(type) size,
+  #define PyType_Modified(t)
+  typedef struct {
+     void *buf;
+     PyObject *obj;
+     Py_ssize_t len;
+     Py_ssize_t itemsize;
+     int readonly;
+     int ndim;
+     char *format;
+     Py_ssize_t *shape;
+     Py_ssize_t *strides;
+     Py_ssize_t *suboffsets;
+     void *internal;
+  } Py_buffer;
+  #define PyBUF_SIMPLE 0
+  #define PyBUF_WRITABLE 0x0001
+  #define PyBUF_FORMAT 0x0004
+  #define PyBUF_ND 0x0008
+  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
+  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
+  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
+  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
+#endif
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#endif
+#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
+  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define Py_TPFLAGS_CHECKTYPES 0
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_TPFLAGS_HAVE_VERSION_TAG 0
+#endif
+#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+  #define CYTHON_PEP393_ENABLED 1
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
+                                              0 : _PyUnicode_Ready((PyObject *)(op)))
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+#else
+  #define CYTHON_PEP393_ENABLED 0
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyStringObject               PyUnicodeObject
+  #define PyString_Type                PyUnicode_Type
+  #define PyString_Check               PyUnicode_Check
+  #define PyString_CheckExact          PyUnicode_CheckExact
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define PyBytesObject                PyStringObject
+  #define PyBytes_Type                 PyString_Type
+  #define PyBytes_Check                PyString_Check
+  #define PyBytes_CheckExact           PyString_CheckExact
+  #define PyBytes_FromString           PyString_FromString
+  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
+  #define PyBytes_FromFormat           PyString_FromFormat
+  #define PyBytes_DecodeEscape         PyString_DecodeEscape
+  #define PyBytes_AsString             PyString_AsString
+  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
+  #define PyBytes_Size                 PyString_Size
+  #define PyBytes_AS_STRING            PyString_AS_STRING
+  #define PyBytes_GET_SIZE             PyString_GET_SIZE
+  #define PyBytes_Repr                 PyString_Repr
+  #define PyBytes_Concat               PyString_Concat
+  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+  #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \
+                                         PyString_Check(obj) || PyUnicode_Check(obj))
+  #define __Pyx_PyBaseString_CheckExact(obj) (Py_TYPE(obj) == &PyBaseString_Type)
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
+  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
+#endif
+#ifndef PySet_CheckExact
+  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
+#endif
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#if PY_MAJOR_VERSION >= 3
+  #define PyIntObject                  PyLongObject
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBoolObject                 PyLongObject
+#endif
+#if PY_VERSION_HEX < 0x03020000
+  typedef long Py_hash_t;
+  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
+#else
+  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
+#endif
+#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
+  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
+  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
+  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
+#else
+  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
+        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
+            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
+  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
+        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
+            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
+  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
+        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
+        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
+            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
+#endif
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
+#else
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
+#endif
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_NAMESTR(n) ((char *)(n))
+  #define __Pyx_DOCSTR(n)  ((char *)(n))
+#else
+  #define __Pyx_NAMESTR(n) (n)
+  #define __Pyx_DOCSTR(n)  (n)
+#endif
+#ifndef CYTHON_INLINE
+  #if defined(__GNUC__)
+    #define CYTHON_INLINE __inline__
+  #elif defined(_MSC_VER)
+    #define CYTHON_INLINE __inline
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_INLINE inline
+  #else
+    #define CYTHON_INLINE
+  #endif
+#endif
+#ifndef CYTHON_RESTRICT
+  #if defined(__GNUC__)
+    #define CYTHON_RESTRICT __restrict__
+  #elif defined(_MSC_VER)
+    #define CYTHON_RESTRICT __restrict
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_RESTRICT restrict
+  #else
+    #define CYTHON_RESTRICT
+  #endif
+#endif
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+  /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and
+   a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is
+   a quiet NaN. */
+  float value;
+  memset(&value, 0xFF, sizeof(value));
+  return value;
+}
+#endif
+
+
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
+
+#ifndef __PYX_EXTERN_C
+  #ifdef __cplusplus
+    #define __PYX_EXTERN_C extern "C"
+  #else
+    #define __PYX_EXTERN_C extern
+  #endif
+#endif
+
+#if defined(WIN32) || defined(MS_WINDOWS)
+#define _USE_MATH_DEFINES
+#endif
+#include <math.h>
+#define __PYX_HAVE__adios
+#define __PYX_HAVE_API__adios
+#include "string.h"
+#include "stdio.h"
+#include "stdlib.h"
+#include "numpy/arrayobject.h"
+#include "numpy/ufuncobject.h"
+#include "mpi.h"
+#include "stdint.h"
+#include "adios_types.h"
+#include "adios.h"
+#include "adios_read.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif /* _OPENMP */
+
+#ifdef PYREX_WITHOUT_ASSERTIONS
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
+                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyBytes_FromString        PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*);
+#if PY_MAJOR_VERSION < 3
+    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyObject_AsUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromUString(s)  __Pyx_PyObject_FromString((char*)s)
+#define __Pyx_PyBytes_FromUString(s)   __Pyx_PyBytes_FromString((char*)s)
+#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((char*)s)
+#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s)
+#if PY_MAJOR_VERSION < 3
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
+{
+    const Py_UNICODE *u_end = u;
+    while (*u_end++) ;
+    return u_end - u - 1;
+}
+#else
+#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
+#endif
+#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
+#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params() {
+    PyObject* sys = NULL;
+    PyObject* default_encoding = NULL;
+    PyObject* ascii_chars_u = NULL;
+    PyObject* ascii_chars_b = NULL;
+    sys = PyImport_ImportModule("sys");
+    if (sys == NULL) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+    if (default_encoding == NULL) goto bad;
+    if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) {
+        __Pyx_sys_getdefaultencoding_not_ascii = 0;
+    } else {
+        const char* default_encoding_c = PyBytes_AS_STRING(default_encoding);
+        char ascii_chars[128];
+        int c;
+        for (c = 0; c < 128; c++) {
+            ascii_chars[c] = c;
+        }
+        __Pyx_sys_getdefaultencoding_not_ascii = 1;
+        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+        if (ascii_chars_u == NULL) goto bad;
+        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+        if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+            PyErr_Format(
+                PyExc_ValueError,
+                "This module compiled with c_string_encoding=ascii, but default encoding '%s' is not a superset of ascii.",
+                default_encoding_c);
+            goto bad;
+        }
+    }
+    Py_XDECREF(sys);
+    Py_XDECREF(default_encoding);
+    Py_XDECREF(ascii_chars_u);
+    Py_XDECREF(ascii_chars_b);
+    return 0;
+bad:
+    Py_XDECREF(sys);
+    Py_XDECREF(default_encoding);
+    Py_XDECREF(ascii_chars_u);
+    Py_XDECREF(ascii_chars_b);
+    return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params() {
+    PyObject* sys = NULL;
+    PyObject* default_encoding = NULL;
+    char* default_encoding_c;
+    sys = PyImport_ImportModule("sys");
+    if (sys == NULL) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+    if (default_encoding == NULL) goto bad;
+    default_encoding_c = PyBytes_AS_STRING(default_encoding);
+    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c));
+    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+    Py_DECREF(sys);
+    Py_DECREF(default_encoding);
+    return 0;
+bad:
+    Py_XDECREF(sys);
+    Py_XDECREF(default_encoding);
+    return -1;
+}
+#endif
+#endif
+
+
+#ifdef __GNUC__
+  /* Test for GCC > 2.95 */
+  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
+    #define likely(x)   __builtin_expect(!!(x), 1)
+    #define unlikely(x) __builtin_expect(!!(x), 0)
+  #else /* __GNUC__ > 2 ... */
+    #define likely(x)   (x)
+    #define unlikely(x) (x)
+  #endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+  #define likely(x)   (x)
+  #define unlikely(x) (x)
+#endif /* __GNUC__ */
+
+static PyObject *__pyx_m;
+static PyObject *__pyx_d;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+
+#if !defined(CYTHON_CCOMPLEX)
+  #if defined(__cplusplus)
+    #define CYTHON_CCOMPLEX 1
+  #elif defined(_Complex_I)
+    #define CYTHON_CCOMPLEX 1
+  #else
+    #define CYTHON_CCOMPLEX 0
+  #endif
+#endif
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    #include <complex>
+  #else
+    #include <complex.h>
+  #endif
+#endif
+#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
+  #undef _Complex_I
+  #define _Complex_I 1.0fj
+#endif
+
+
+static const char *__pyx_f[] = {
+  "adios.pyx",
+  "numpy.pxd",
+  "type.pxd",
+  "MPI.pxd",
+};
+
+/* "numpy.pxd":723
+ * # in Cython to enable them only on the right systems.
+ * 
+ * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_int16      int16_t
+ * ctypedef npy_int32      int32_t
+ */
+typedef npy_int8 __pyx_t_5numpy_int8_t;
+
+/* "numpy.pxd":724
+ * 
+ * ctypedef npy_int8       int8_t
+ * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_int32      int32_t
+ * ctypedef npy_int64      int64_t
+ */
+typedef npy_int16 __pyx_t_5numpy_int16_t;
+
+/* "numpy.pxd":725
+ * ctypedef npy_int8       int8_t
+ * ctypedef npy_int16      int16_t
+ * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_int64      int64_t
+ * #ctypedef npy_int96      int96_t
+ */
+typedef npy_int32 __pyx_t_5numpy_int32_t;
+
+/* "numpy.pxd":726
+ * ctypedef npy_int16      int16_t
+ * ctypedef npy_int32      int32_t
+ * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
+ * #ctypedef npy_int96      int96_t
+ * #ctypedef npy_int128     int128_t
+ */
+typedef npy_int64 __pyx_t_5numpy_int64_t;
+
+/* "numpy.pxd":730
+ * #ctypedef npy_int128     int128_t
+ * 
+ * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_uint16     uint16_t
+ * ctypedef npy_uint32     uint32_t
+ */
+typedef npy_uint8 __pyx_t_5numpy_uint8_t;
+
+/* "numpy.pxd":731
+ * 
+ * ctypedef npy_uint8      uint8_t
+ * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_uint32     uint32_t
+ * ctypedef npy_uint64     uint64_t
+ */
+typedef npy_uint16 __pyx_t_5numpy_uint16_t;
+
+/* "numpy.pxd":732
+ * ctypedef npy_uint8      uint8_t
+ * ctypedef npy_uint16     uint16_t
+ * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_uint64     uint64_t
+ * #ctypedef npy_uint96     uint96_t
+ */
+typedef npy_uint32 __pyx_t_5numpy_uint32_t;
+
+/* "numpy.pxd":733
+ * ctypedef npy_uint16     uint16_t
+ * ctypedef npy_uint32     uint32_t
+ * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
+ * #ctypedef npy_uint96     uint96_t
+ * #ctypedef npy_uint128    uint128_t
+ */
+typedef npy_uint64 __pyx_t_5numpy_uint64_t;
+
+/* "numpy.pxd":737
+ * #ctypedef npy_uint128    uint128_t
+ * 
+ * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_float64    float64_t
+ * #ctypedef npy_float80    float80_t
+ */
+typedef npy_float32 __pyx_t_5numpy_float32_t;
+
+/* "numpy.pxd":738
+ * 
+ * ctypedef npy_float32    float32_t
+ * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
+ * #ctypedef npy_float80    float80_t
+ * #ctypedef npy_float128   float128_t
+ */
+typedef npy_float64 __pyx_t_5numpy_float64_t;
+
+/* "numpy.pxd":747
+ * # The int types are mapped a bit surprising --
+ * # numpy.int corresponds to 'l' and numpy.long to 'q'
+ * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_longlong   long_t
+ * ctypedef npy_longlong   longlong_t
+ */
+typedef npy_long __pyx_t_5numpy_int_t;
+
+/* "numpy.pxd":748
+ * # numpy.int corresponds to 'l' and numpy.long to 'q'
+ * ctypedef npy_long       int_t
+ * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_longlong   longlong_t
+ * 
+ */
+typedef npy_longlong __pyx_t_5numpy_long_t;
+
+/* "numpy.pxd":749
+ * ctypedef npy_long       int_t
+ * ctypedef npy_longlong   long_t
+ * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef npy_ulong      uint_t
+ */
+typedef npy_longlong __pyx_t_5numpy_longlong_t;
+
+/* "numpy.pxd":751
+ * ctypedef npy_longlong   longlong_t
+ * 
+ * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_ulonglong  ulong_t
+ * ctypedef npy_ulonglong  ulonglong_t
+ */
+typedef npy_ulong __pyx_t_5numpy_uint_t;
+
+/* "numpy.pxd":752
+ * 
+ * ctypedef npy_ulong      uint_t
+ * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_ulonglong  ulonglong_t
+ * 
+ */
+typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
+
+/* "numpy.pxd":753
+ * ctypedef npy_ulong      uint_t
+ * ctypedef npy_ulonglong  ulong_t
+ * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef npy_intp       intp_t
+ */
+typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
+
+/* "numpy.pxd":755
+ * ctypedef npy_ulonglong  ulonglong_t
+ * 
+ * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_uintp      uintp_t
+ * 
+ */
+typedef npy_intp __pyx_t_5numpy_intp_t;
+
+/* "numpy.pxd":756
+ * 
+ * ctypedef npy_intp       intp_t
+ * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef npy_double     float_t
+ */
+typedef npy_uintp __pyx_t_5numpy_uintp_t;
+
+/* "numpy.pxd":758
+ * ctypedef npy_uintp      uintp_t
+ * 
+ * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_double     double_t
+ * ctypedef npy_longdouble longdouble_t
+ */
+typedef npy_double __pyx_t_5numpy_float_t;
+
+/* "numpy.pxd":759
+ * 
+ * ctypedef npy_double     float_t
+ * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_longdouble longdouble_t
+ * 
+ */
+typedef npy_double __pyx_t_5numpy_double_t;
+
+/* "numpy.pxd":760
+ * ctypedef npy_double     float_t
+ * ctypedef npy_double     double_t
+ * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef npy_cfloat      cfloat_t
+ */
+typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    typedef ::std::complex< float > __pyx_t_float_complex;
+  #else
+    typedef float _Complex __pyx_t_float_complex;
+  #endif
+#else
+    typedef struct { float real, imag; } __pyx_t_float_complex;
+#endif
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    typedef ::std::complex< double > __pyx_t_double_complex;
+  #else
+    typedef double _Complex __pyx_t_double_complex;
+  #endif
+#else
+    typedef struct { double real, imag; } __pyx_t_double_complex;
+#endif
+
+
+/*--- Type declarations ---*/
+struct PyMPIErrhandlerObject;
+struct PyMPIGroupObject;
+struct PyMPICommObject;
+struct PyMPIIntercommObject;
+struct PyMPIIntracommObject;
+struct PyMPIDistgraphcommObject;
+struct __pyx_obj_5adios_AdiosFile;
+struct PyMPIRequestObject;
+struct PyMPIGrequestObject;
+struct PyMPIWinObject;
+struct PyMPIDatatypeObject;
+struct __pyx_obj_5adios_AdiosVariable;
+struct PyMPIFileObject;
+struct PyMPIGraphcommObject;
+struct PyMPIPrequestObject;
+struct PyMPIInfoObject;
+struct __pyx_obj_5adios_AdiosGroup;
+struct PyMPICartcommObject;
+struct PyMPIStatusObject;
+struct PyMPIOpObject;
+
+/* "numpy.pxd":762
+ * ctypedef npy_longdouble longdouble_t
+ * 
+ * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_cdouble     cdouble_t
+ * ctypedef npy_clongdouble clongdouble_t
+ */
+typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
+
+/* "numpy.pxd":763
+ * 
+ * ctypedef npy_cfloat      cfloat_t
+ * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
+ * ctypedef npy_clongdouble clongdouble_t
+ * 
+ */
+typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
+
+/* "numpy.pxd":764
+ * ctypedef npy_cfloat      cfloat_t
+ * ctypedef npy_cdouble     cdouble_t
+ * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
+ * 
+ * ctypedef npy_cdouble     complex_t
+ */
+typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
+
+/* "numpy.pxd":766
+ * ctypedef npy_clongdouble clongdouble_t
+ * 
+ * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew1(a):
+ */
+typedef npy_cdouble __pyx_t_5numpy_complex_t;
+struct __pyx_opt_args_5adios_init;
+struct __pyx_opt_args_5adios_open;
+struct __pyx_opt_args_5adios_finalize;
+struct __pyx_opt_args_5adios_init_noxml;
+struct __pyx_opt_args_5adios_13AdiosVariable_read;
+
+/* "adios.pyx":211
+ * ## ==========
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ */
+struct __pyx_opt_args_5adios_init {
+  int __pyx_n;
+  struct PyMPICommObject *comm;
+};
+
+/* "adios.pyx":214
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+struct __pyx_opt_args_5adios_open {
+  int __pyx_n;
+  struct PyMPICommObject *comm;
+};
+
+/* "adios.pyx":255
+ *     return adios_close(fd_p)
+ * 
+ * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ *     return adios_finalize(mype)
+ * 
+ */
+struct __pyx_opt_args_5adios_finalize {
+  int __pyx_n;
+  int mype;
+};
+
+/* "adios.pyx":261
+ * ## ADIOS No-XML API
+ * ## ==========
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ */
+struct __pyx_opt_args_5adios_init_noxml {
+  int __pyx_n;
+  struct PyMPICommObject *comm;
+};
+
+/* "adios.pyx":567
+ *         self.vp = NULL
+ * 
+ *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
+ *         cdef type ntype = adios2nptype(self.vp.type)
+ *         assert ntype is not None, 'Data type is not supported yet'
+ */
+struct __pyx_opt_args_5adios_13AdiosVariable_read {
+  int __pyx_n;
+  PyObject *offset;
+  PyObject *count;
+};
+
+/* "mpi4py/MPI.pxd":106
+ *     cdef int      flags
+ * 
+ * ctypedef public api class Errhandler [             # <<<<<<<<<<<<<<
+ *     type   PyMPIErrhandler_Type,
+ *     object PyMPIErrhandlerObject,
+ */
+struct PyMPIErrhandlerObject {
+  PyObject_HEAD
+  MPI_Errhandler ob_mpi;
+  int flags;
+};
+typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;
+
+/* "mpi4py/MPI.pxd":92
+ *     cdef int    ob_usrid
+ * 
+ * ctypedef public api class Group [             # <<<<<<<<<<<<<<
+ *     type   PyMPIGroup_Type,
+ *     object PyMPIGroupObject,
+ */
+struct PyMPIGroupObject {
+  PyObject_HEAD
+  MPI_Group ob_mpi;
+  int flags;
+};
+typedef struct PyMPIGroupObject PyMPIGroupObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;
+
+/* "mpi4py/MPI.pxd":113
+ *     cdef int            flags
+ * 
+ * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
+ *     type   PyMPIComm_Type,
+ *     object PyMPICommObject,
+ */
+struct PyMPICommObject {
+  PyObject_HEAD
+  MPI_Comm ob_mpi;
+  int flags;
+};
+typedef struct PyMPICommObject PyMPICommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;
+
+/* "mpi4py/MPI.pxd":144
+ *     pass
+ * 
+ * ctypedef public api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIIntercomm_Type,
+ *     object PyMPIIntercommObject,
+ */
+struct PyMPIIntercommObject {
+  struct PyMPICommObject __pyx_base;
+};
+typedef struct PyMPIIntercommObject PyMPIIntercommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;
+
+/* "mpi4py/MPI.pxd":120
+ *     cdef int      flags
+ * 
+ * ctypedef public api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIIntracomm_Type,
+ *     object PyMPIIntracommObject,
+ */
+struct PyMPIIntracommObject {
+  struct PyMPICommObject __pyx_base;
+};
+typedef struct PyMPIIntracommObject PyMPIIntracommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;
+
+/* "mpi4py/MPI.pxd":138
+ *     pass
+ * 
+ * ctypedef public api class Distgraphcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIDistgraphcomm_Type,
+ *     object PyMPIDistgraphcommObject,
+ */
+struct PyMPIDistgraphcommObject {
+  struct PyMPIIntracommObject __pyx_base;
+};
+typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;
+
+/* "adios.pyx":423
+ * ## ==========
+ * 
+ * cdef class AdiosFile:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cpdef ADIOS_FILE * fp
+ */
+struct __pyx_obj_5adios_AdiosFile {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtab;
+  ADIOS_FILE *fp;
+  PyObject *name;
+  int groups_count;
+  int vars_count;
+  int attrs_count;
+  int tidx_start;
+  int ntimesteps;
+  int version;
+  int file_size;
+  int endianness;
+  PyObject *group;
+};
+
+
+/* "mpi4py/MPI.pxd":63
+ *     cdef int          flags
+ * 
+ * ctypedef public api class Request [             # <<<<<<<<<<<<<<
+ *     type   PyMPIRequest_Type,
+ *     object PyMPIRequestObject,
+ */
+struct PyMPIRequestObject {
+  PyObject_HEAD
+  MPI_Request ob_mpi;
+  int flags;
+  PyObject *ob_buf;
+};
+typedef struct PyMPIRequestObject PyMPIRequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;
+
+/* "mpi4py/MPI.pxd":77
+ *     pass
+ * 
+ * ctypedef public api class Grequest(Request) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIGrequest_Type,
+ *     object PyMPIGrequestObject,
+ */
+struct PyMPIGrequestObject {
+  struct PyMPIRequestObject __pyx_base;
+  MPI_Request ob_grequest;
+};
+typedef struct PyMPIGrequestObject PyMPIGrequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;
+
+/* "mpi4py/MPI.pxd":150
+ *     pass
+ * 
+ * ctypedef public api class Win [             # <<<<<<<<<<<<<<
+ *     type   PyMPIWin_Type,
+ *     object PyMPIWinObject,
+ */
+struct PyMPIWinObject {
+  PyObject_HEAD
+  MPI_Win ob_mpi;
+  int flags;
+};
+typedef struct PyMPIWinObject PyMPIWinObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;
+
+/* "mpi4py/MPI.pxd":56
+ *     cdef int        flags
+ * 
+ * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
+ *     type   PyMPIDatatype_Type,
+ *     object PyMPIDatatypeObject,
+ */
+struct PyMPIDatatypeObject {
+  PyObject_HEAD
+  MPI_Datatype ob_mpi;
+  int flags;
+};
+typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;
+
+/* "adios.pyx":529
+ *         printAdiosGroup(self.gp)
+ * 
+ * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cdef AdiosGroup group
+ */
+struct __pyx_obj_5adios_AdiosVariable {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtab;
+  struct __pyx_obj_5adios_AdiosGroup *group;
+  ADIOS_VARINFO *vp;
+  PyObject *name;
+  int varid;
+  PyObject *type;
+  int ndim;
+  PyObject *dims;
+  int timedim;
+  int characteristics_count;
+};
+
+
+/* "mpi4py/MPI.pxd":157
+ *     cdef int     flags
+ * 
+ * ctypedef public api class File [             # <<<<<<<<<<<<<<
+ *     type   PyMPIFile_Type,
+ *     object PyMPIFileObject,
+ */
+struct PyMPIFileObject {
+  PyObject_HEAD
+  MPI_File ob_mpi;
+  int flags;
+};
+typedef struct PyMPIFileObject PyMPIFileObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;
+
+/* "mpi4py/MPI.pxd":132
+ *     pass
+ * 
+ * ctypedef public api class Graphcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIGraphcomm_Type,
+ *     object PyMPIGraphcommObject,
+ */
+struct PyMPIGraphcommObject {
+  struct PyMPIIntracommObject __pyx_base;
+};
+typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;
+
+/* "mpi4py/MPI.pxd":71
+ *     cdef object      ob_buf
+ * 
+ * ctypedef public api class Prequest(Request) [             # <<<<<<<<<<<<<<
+ *     type   PyMPIPrequest_Type,
+ *     object PyMPIPrequestObject,
+ */
+struct PyMPIPrequestObject {
+  struct PyMPIRequestObject __pyx_base;
+};
+typedef struct PyMPIPrequestObject PyMPIPrequestObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;
+
+/* "mpi4py/MPI.pxd":99
+ *     cdef int       flags
+ * 
+ * ctypedef public api class Info [             # <<<<<<<<<<<<<<
+ *     type   PyMPIInfo_Type,
+ *     object PyMPIInfoObject,
+ */
+struct PyMPIInfoObject {
+  PyObject_HEAD
+  MPI_Info ob_mpi;
+  int flags;
+};
+typedef struct PyMPIInfoObject PyMPIInfoObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;
+
+/* "adios.pyx":479
+ * 
+ * 
+ * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cdef AdiosFile file
+ */
+struct __pyx_obj_5adios_AdiosGroup {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtab;
+  struct __pyx_obj_5adios_AdiosFile *file;
+  ADIOS_GROUP *gp;
+  PyObject *name;
+  int grpid;
+  int vars_count;
+  int attrs_count;
+  int timestep;
+  int lasttimestep;
+  PyObject *var;
+};
+
+
+/* "mpi4py/MPI.pxd":126
+ *     pass
+ * 
+ * ctypedef public api class Cartcomm(Intracomm) [             # <<<<<<<<<<<<<<
+ *     type   PyMPICartcomm_Type,
+ *     object PyMPICartcommObject,
+ */
+struct PyMPICartcommObject {
+  struct PyMPIIntracommObject __pyx_base;
+};
+typedef struct PyMPICartcommObject PyMPICartcommObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;
+
+/* "mpi4py/MPI.pxd":49
+ *     ctypedef MPI_Offset Offset "MPI_Offset"
+ * 
+ * ctypedef public api class Status [             # <<<<<<<<<<<<<<
+ *     type   PyMPIStatus_Type,
+ *     object PyMPIStatusObject,
+ */
+struct PyMPIStatusObject {
+  PyObject_HEAD
+  MPI_Status ob_mpi;
+  int flags;
+};
+typedef struct PyMPIStatusObject PyMPIStatusObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;
+
+/* "mpi4py/MPI.pxd":83
+ *     cdef MPI_Request ob_grequest
+ * 
+ * ctypedef public api class Op [             # <<<<<<<<<<<<<<
+ *     type   PyMPIOp_Type,
+ *     object PyMPIOpObject,
+ */
+struct PyMPIOpObject {
+  PyObject_HEAD
+  MPI_Op ob_mpi;
+  int flags;
+  PyObject *(*ob_func)(PyObject *, PyObject *);
+  int ob_usrid;
+};
+typedef struct PyMPIOpObject PyMPIOpObject;
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;
+
+
+/* "adios.pyx":479
+ * 
+ * 
+ * cdef class AdiosGroup:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cdef AdiosFile file
+ */
+
+struct __pyx_vtabstruct_5adios_AdiosGroup {
+  PyObject *(*close)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
+  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch);
+};
+static struct __pyx_vtabstruct_5adios_AdiosGroup *__pyx_vtabptr_5adios_AdiosGroup;
+
+
+/* "adios.pyx":423
+ * ## ==========
+ * 
+ * cdef class AdiosFile:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cpdef ADIOS_FILE * fp
+ */
+
+struct __pyx_vtabstruct_5adios_AdiosFile {
+  PyObject *(*close)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
+  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch);
+};
+static struct __pyx_vtabstruct_5adios_AdiosFile *__pyx_vtabptr_5adios_AdiosFile;
+
+
+/* "adios.pyx":529
+ *         printAdiosGroup(self.gp)
+ * 
+ * cdef class AdiosVariable:             # <<<<<<<<<<<<<<
+ *     """ Private Memeber """
+ *     cdef AdiosGroup group
+ */
+
+struct __pyx_vtabstruct_5adios_AdiosVariable {
+  PyObject *(*close)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
+  PyObject *(*read)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args);
+  PyObject *(*printself)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch);
+};
+static struct __pyx_vtabstruct_5adios_AdiosVariable *__pyx_vtabptr_5adios_AdiosVariable;
+#ifndef CYTHON_REFNANNY
+  #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+  typedef struct {
+    void (*INCREF)(void*, PyObject*, int);
+    void (*DECREF)(void*, PyObject*, int);
+    void (*GOTREF)(void*, PyObject*, int);
+    void (*GIVEREF)(void*, PyObject*, int);
+    void* (*SetupContext)(const char*, int, const char*);
+    void (*FinishContext)(void**);
+  } __Pyx_RefNannyAPIStruct;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
+  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+          if (acquire_gil) { \
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+              PyGILState_Release(__pyx_gilstate_save); \
+          } else { \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+          }
+#else
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+  #define __Pyx_RefNannyFinishContext() \
+          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
+  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
+  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
+  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
+#else
+  #define __Pyx_RefNannyDeclarations
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)
+  #define __Pyx_RefNannyFinishContext()
+  #define __Pyx_INCREF(r) Py_INCREF(r)
+  #define __Pyx_DECREF(r) Py_DECREF(r)
+  #define __Pyx_GOTREF(r)
+  #define __Pyx_GIVEREF(r)
+  #define __Pyx_XINCREF(r) Py_XINCREF(r)
+  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+  #define __Pyx_XGOTREF(r)
+  #define __Pyx_XGIVEREF(r)
+#endif /* CYTHON_REFNANNY */
+#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
+    PyTypeObject* tp = Py_TYPE(obj);
+    if (likely(tp->tp_getattro))
+        return tp->tp_getattro(obj, attr_name);
+#if PY_MAJOR_VERSION < 3
+    if (likely(tp->tp_getattr))
+        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
+#endif
+    return PyObject_GetAttr(obj, attr_name);
+}
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/
+
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
+    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
+    const char* function_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact); /*proto*/
+
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
+
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static void __Pyx_WriteUnraisable(const char *name, int clineno,
+                                  int lineno, const char *filename); /*proto*/
+
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
+    PyListObject* L = (PyListObject*) list;
+    Py_ssize_t len = Py_SIZE(list);
+    if (likely(L->allocated > len)) {
+        Py_INCREF(x);
+        PyList_SET_ITEM(list, len, x);
+        Py_SIZE(list) = len+1;
+        return 0;
+    }
+    return PyList_Append(list, x);
+}
+#else
+#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
+#endif
+
+#define __Pyx_GetItemInt(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
+    (((size) <= sizeof(Py_ssize_t)) ? \
+    __Pyx_GetItemInt_Fast(o, i, is_list, wraparound, boundscheck) : \
+    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+#define __Pyx_GetItemInt_List(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
+    (((size) <= sizeof(Py_ssize_t)) ? \
+    __Pyx_GetItemInt_List_Fast(o, i, wraparound, boundscheck) : \
+    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func, is_list, wraparound, boundscheck) \
+    (((size) <= sizeof(Py_ssize_t)) ? \
+    __Pyx_GetItemInt_Tuple_Fast(o, i, wraparound, boundscheck) : \
+    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck);
+
+#if PY_MAJOR_VERSION >= 3
+static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/
+#else
+#define __Pyx_PyDict_Values(d) PyDict_Values(d)
+#endif
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
+
+static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
+
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
+
+static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases); /*proto*/
+
+static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
+                                   PyObject *qualname, PyObject *modname); /*proto*/
+
+static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject *);
+
+static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject *);
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t);
+
+static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/
+#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
+static PyObject* __pyx_print = 0;
+static PyObject* __pyx_print_kwargs = 0;
+#endif
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t);
+
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    #define __Pyx_CREAL(z) ((z).real())
+    #define __Pyx_CIMAG(z) ((z).imag())
+  #else
+    #define __Pyx_CREAL(z) (__real__(z))
+    #define __Pyx_CIMAG(z) (__imag__(z))
+  #endif
+#else
+    #define __Pyx_CREAL(z) ((z).real)
+    #define __Pyx_CIMAG(z) ((z).imag)
+#endif
+#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
+    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
+    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
+#else
+    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
+    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
+#endif
+
+static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
+
+#if CYTHON_CCOMPLEX
+    #define __Pyx_c_eqf(a, b)   ((a)==(b))
+    #define __Pyx_c_sumf(a, b)  ((a)+(b))
+    #define __Pyx_c_difff(a, b) ((a)-(b))
+    #define __Pyx_c_prodf(a, b) ((a)*(b))
+    #define __Pyx_c_quotf(a, b) ((a)/(b))
+    #define __Pyx_c_negf(a)     (-(a))
+  #ifdef __cplusplus
+    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
+    #define __Pyx_c_conjf(z)    (::std::conj(z))
+    #if 1
+        #define __Pyx_c_absf(z)     (::std::abs(z))
+        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
+    #endif
+  #else
+    #define __Pyx_c_is_zerof(z) ((z)==0)
+    #define __Pyx_c_conjf(z)    (conjf(z))
+    #if 1
+        #define __Pyx_c_absf(z)     (cabsf(z))
+        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
+    #endif
+ #endif
+#else
+    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
+    #if 1
+        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
+    #endif
+#endif
+
+static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
+
+#if CYTHON_CCOMPLEX
+    #define __Pyx_c_eq(a, b)   ((a)==(b))
+    #define __Pyx_c_sum(a, b)  ((a)+(b))
+    #define __Pyx_c_diff(a, b) ((a)-(b))
+    #define __Pyx_c_prod(a, b) ((a)*(b))
+    #define __Pyx_c_quot(a, b) ((a)/(b))
+    #define __Pyx_c_neg(a)     (-(a))
+  #ifdef __cplusplus
+    #define __Pyx_c_is_zero(z) ((z)==(double)0)
+    #define __Pyx_c_conj(z)    (::std::conj(z))
+    #if 1
+        #define __Pyx_c_abs(z)     (::std::abs(z))
+        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
+    #endif
+  #else
+    #define __Pyx_c_is_zero(z) ((z)==0)
+    #define __Pyx_c_conj(z)    (conj(z))
+    #if 1
+        #define __Pyx_c_abs(z)     (cabs(z))
+        #define __Pyx_c_pow(a, b)  (cpow(a, b))
+    #endif
+ #endif
+#else
+    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
+    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
+    #if 1
+        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
+    #endif
+#endif
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
+
+static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
+
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
+
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
+
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
+
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
+
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
+
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
+
+static int __Pyx_check_binary_version(void);
+
+#if !defined(__Pyx_PyIdentifier_FromString)
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
+#else
+  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
+#endif
+#endif
+
+static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
+
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
+
+typedef struct {
+    int code_line;
+    PyCodeObject* code_object;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+    int count;
+    int max_count;
+    __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+
+
+/* Module declarations from 'cpython.buffer' */
+
+/* Module declarations from 'cpython.ref' */
+
+/* Module declarations from 'libc.string' */
+
+/* Module declarations from 'libc.stdio' */
+
+/* Module declarations from 'cpython.object' */
+
+/* Module declarations from '__builtin__' */
+
+/* Module declarations from 'cpython.type' */
+static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
+
+/* Module declarations from 'libc.stdlib' */
+
+/* Module declarations from 'numpy' */
+
+/* Module declarations from 'numpy' */
+static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
+static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
+static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
+static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
+static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
+static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
+
+/* Module declarations from 'mpi4py.MPI' */
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Status = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Datatype = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Request = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Prequest = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Grequest = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Op = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Group = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Info = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Errhandler = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Comm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intracomm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Cartcomm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Graphcomm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Distgraphcomm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intercomm = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Win = 0;
+static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_File = 0;
+
+/* Module declarations from 'cython' */
+
+/* Module declarations from 'libc.stdint' */
+
+/* Module declarations from 'adios' */
+static PyTypeObject *__pyx_ptype_5adios_AdiosFile = 0;
+static PyTypeObject *__pyx_ptype_5adios_AdiosGroup = 0;
+static PyTypeObject *__pyx_ptype_5adios_AdiosVariable = 0;
+static PyObject *__pyx_f_5adios_init(char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args); /*proto*/
+static int64_t __pyx_f_5adios_open(char *, char *, char *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args); /*proto*/
+static int64_t __pyx_f_5adios_set_group_size(int64_t, uint64_t, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_write(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_write_int(int64_t, char *, int, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_write_long(int64_t, char *, long, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_write_float(int64_t, char *, float, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_read(int64_t, char *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_close(int64_t, int __pyx_skip_dispatch); /*proto*/
+static PyObject *__pyx_f_5adios_finalize(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_finalize *__pyx_optional_args); /*proto*/
+static int __pyx_f_5adios_init_noxml(int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init_noxml *__pyx_optional_args); /*proto*/
+static int __pyx_f_5adios_allocate_buffer(int, uint64_t, int __pyx_skip_dispatch); /*proto*/
+static int64_t __pyx_f_5adios_declare_group(char *, char *, int, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_define_var(int64_t, char *, char *, int, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_define_attribute(int64_t, char *, char *, int, char *, char *, int __pyx_skip_dispatch); /*proto*/
+static int __pyx_f_5adios_select_method(int64_t, char *, char *, char *, int __pyx_skip_dispatch); /*proto*/
+static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES, int __pyx_skip_dispatch); /*proto*/
+static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *); /*proto*/
+static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *); /*proto*/
+static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *); /*proto*/
+#define __Pyx_MODULE_NAME "adios"
+int __pyx_module_is_main_adios = 0;
+
+/* Implementation of 'adios' */
+static PyObject *__pyx_builtin_object;
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_RuntimeError;
+static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size); /* proto */
+static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val); /* proto */
+static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p); /* proto */
+static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype); /* proto */
+static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size); /* proto */
+static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats); /* proto */
+static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets); /* proto */
+static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var); /* proto */
+static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path); /* proto */
+static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t); /* proto */
+static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self); /* proto */
+static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
+static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static char __pyx_k_3[] = "Only contiguous arrays are supported.";
+static char __pyx_k_4[] = "Reading ... ";
+static char __pyx_k_5[] = "(bytes)";
+static char __pyx_k_7[] = "%15s : %lu";
+static char __pyx_k_8[] = "%15s : %d";
+static char __pyx_k_9[] = "%15s : %s";
+static char __pyx_k_11[] = "Not an open file";
+static char __pyx_k_12[] = "/";
+static char __pyx_k_14[] = "=== AdiosFile ===";
+static char __pyx_k_15[] = "Not an open group";
+static char __pyx_k_16[] = "=== AdiosGroup ===";
+static char __pyx_k_17[] = "Data type is not supported yet";
+static char __pyx_k_19[] = "Offset dimension mismatch";
+static char __pyx_k_20[] = "Count dimension mismatch.";
+static char __pyx_k_21[] = "Count is larger than shape.";
+static char __pyx_k_22[] = "[WARNING] bytes read :";
+static char __pyx_k_23[] = "=== AdiosVariable ===";
+static char __pyx_k_24[] = "ndarray is not C contiguous";
+static char __pyx_k_26[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_28[] = "Non-native byte order not supported";
+static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_31[] = "Format string allocated too short, see comment in numpy.pxd";
+static char __pyx_k_34[] = "Format string allocated too short.";
+static char __pyx_k_36[] = "\n ADIOS is freely available under the terms of the BSD license described\n in the COPYING file in the top level directory of this source distribution.\n\n Copyright (c) 2008 - 2009.  UT-BATTELLE, LLC. All rights reserved.\n";
+static char __pyx_k_37[] = "mpi4py.MPI";
+static char __pyx_k_38[] = "*";
+static char __pyx_k__B[] = "B";
+static char __pyx_k__H[] = "H";
+static char __pyx_k__I[] = "I";
+static char __pyx_k__L[] = "L";
+static char __pyx_k__O[] = "O";
+static char __pyx_k__Q[] = "Q";
+static char __pyx_k__b[] = "b";
+static char __pyx_k__d[] = "d";
+static char __pyx_k__f[] = "f";
+static char __pyx_k__g[] = "g";
+static char __pyx_k__h[] = "h";
+static char __pyx_k__i[] = "i";
+static char __pyx_k__l[] = "l";
+static char __pyx_k__q[] = "q";
+static char __pyx_k__NO[] = "NO";
+static char __pyx_k__Zd[] = "Zd";
+static char __pyx_k__Zf[] = "Zf";
+static char __pyx_k__Zg[] = "Zg";
+static char __pyx_k__fh[] = "fh";
+static char __pyx_k__fp[] = "fp";
+static char __pyx_k__gh[] = "gh";
+static char __pyx_k__gp[] = "gp";
+static char __pyx_k__np[] = "np";
+static char __pyx_k__vp[] = "vp";
+static char __pyx_k__MPI[] = "MPI";
+static char __pyx_k__NOW[] = "NOW";
+static char __pyx_k__YES[] = "YES";
+static char __pyx_k__all[] = "all";
+static char __pyx_k__end[] = "end";
+static char __pyx_k__val[] = "val";
+static char __pyx_k__var[] = "var";
+static char __pyx_k__FLAG[] = "FLAG";
+static char __pyx_k__byte[] = "byte";
+static char __pyx_k__comm[] = "comm";
+static char __pyx_k__copy[] = "copy";
+static char __pyx_k__dims[] = "dims";
+static char __pyx_k__fd_p[] = "fd_p";
+static char __pyx_k__file[] = "file";
+static char __pyx_k__fill[] = "fill";
+static char __pyx_k__int8[] = "int8";
+static char __pyx_k__long[] = "long";
+static char __pyx_k__mode[] = "mode";
+static char __pyx_k__mype[] = "mype";
+static char __pyx_k__name[] = "name";
+static char __pyx_k__ndim[] = "ndim";
+static char __pyx_k__path[] = "path";
+static char __pyx_k__read[] = "read";
+static char __pyx_k__real[] = "real";
+static char __pyx_k__size[] = "size";
+static char __pyx_k__type[] = "type";
+static char __pyx_k__when[] = "when";
+static char __pyx_k__LATER[] = "LATER";
+static char __pyx_k__adios[] = "adios";
+static char __pyx_k__array[] = "array";
+static char __pyx_k__close[] = "close";
+static char __pyx_k__count[] = "count";
+static char __pyx_k__dtype[] = "dtype";
+static char __pyx_k__flags[] = "flags";
+static char __pyx_k__fname[] = "fname";
+static char __pyx_k__group[] = "group";
+static char __pyx_k__grpid[] = "grpid";
+static char __pyx_k__int16[] = "int16";
+static char __pyx_k__int32[] = "int32";
+static char __pyx_k__int64[] = "int64";
+static char __pyx_k__numpy[] = "numpy";
+static char __pyx_k__print[] = "print";
+static char __pyx_k__range[] = "range";
+static char __pyx_k__short[] = "short";
+static char __pyx_k__split[] = "split";
+static char __pyx_k__stats[] = "stats";
+static char __pyx_k__uint8[] = "uint8";
+static char __pyx_k__value[] = "value";
+static char __pyx_k__varid[] = "varid";
+static char __pyx_k__zeros[] = "zeros";
+static char __pyx_k__config[] = "config";
+static char __pyx_k__double[] = "double";
+static char __pyx_k__method[] = "method";
+static char __pyx_k__object[] = "object";
+static char __pyx_k__offset[] = "offset";
+static char __pyx_k__string[] = "string";
+static char __pyx_k__uint16[] = "uint16";
+static char __pyx_k__uint32[] = "uint32";
+static char __pyx_k__uint64[] = "uint64";
+static char __pyx_k__values[] = "values";
+static char __pyx_k__UNKNOWN[] = "UNKNOWN";
+static char __pyx_k__complex[] = "complex";
+static char __pyx_k__float32[] = "float32";
+static char __pyx_k__float64[] = "float64";
+static char __pyx_k__integer[] = "integer";
+static char __pyx_k__timedim[] = "timedim";
+static char __pyx_k__unknown[] = "unknown";
+static char __pyx_k__version[] = "version";
+static char __pyx_k__DATATYPE[] = "DATATYPE";
+static char __pyx_k____main__[] = "__main__";
+static char __pyx_k____test__[] = "__test__";
+static char __pyx_k__float128[] = "float128";
+static char __pyx_k__group_id[] = "group_id";
+static char __pyx_k__itemsize[] = "itemsize";
+static char __pyx_k____class__[] = "__class__";
+static char __pyx_k__base_path[] = "base_path";
+static char __pyx_k__complex64[] = "complex64";
+static char __pyx_k__data_size[] = "data_size";
+static char __pyx_k__file_size[] = "file_size";
+static char __pyx_k__printself[] = "printself";
+static char __pyx_k__COMM_WORLD[] = "COMM_WORLD";
+static char __pyx_k__ValueError[] = "ValueError";
+static char __pyx_k____import__[] = "__import__";
+static char __pyx_k____module__[] = "__module__";
+static char __pyx_k__complex128[] = "complex128";
+static char __pyx_k__contiguous[] = "contiguous";
+static char __pyx_k__dimensions[] = "dimensions";
+static char __pyx_k__endianness[] = "endianness";
+static char __pyx_k__group_name[] = "group_name";
+static char __pyx_k__ntimesteps[] = "ntimesteps";
+static char __pyx_k__parameters[] = "parameters";
+static char __pyx_k__tidx_start[] = "tidx_start";
+static char __pyx_k__time_index[] = "time_index";
+static char __pyx_k__vars_count[] = "vars_count";
+static char __pyx_k__attrs_count[] = "attrs_count";
+static char __pyx_k__buffer_size[] = "buffer_size";
+static char __pyx_k__long_double[] = "long_double";
+static char __pyx_k__RuntimeError[] = "RuntimeError";
+static char __pyx_k____qualname__[] = "__qualname__";
+static char __pyx_k__groups_count[] = "groups_count";
+static char __pyx_k__var_namelist[] = "var_namelist";
+static char __pyx_k____metaclass__[] = "__metaclass__";
+static char __pyx_k__attr_namelist[] = "attr_namelist";
+static char __pyx_k__local_offsets[] = "local_offsets";
+static char __pyx_k__unsigned_byte[] = "unsigned_byte";
+static char __pyx_k__unsigned_long[] = "unsigned_long";
+static char __pyx_k____pyx_vtable__[] = "__pyx_vtable__";
+static char __pyx_k__double_complex[] = "double_complex";
+static char __pyx_k__group_namelist[] = "group_namelist";
+static char __pyx_k__unsigned_short[] = "unsigned_short";
+static char __pyx_k__unsigned_integer[] = "unsigned_integer";
+static char __pyx_k__BUFFER_ALLOC_WHEN[] = "BUFFER_ALLOC_WHEN";
+static char __pyx_k__global_dimensions[] = "global_dimensions";
+static PyObject *__pyx_kp_s_11;
+static PyObject *__pyx_kp_s_12;
+static PyObject *__pyx_kp_s_14;
+static PyObject *__pyx_kp_s_15;
+static PyObject *__pyx_kp_s_16;
+static PyObject *__pyx_kp_s_17;
+static PyObject *__pyx_kp_s_19;
+static PyObject *__pyx_kp_s_20;
+static PyObject *__pyx_kp_s_21;
+static PyObject *__pyx_kp_s_22;
+static PyObject *__pyx_kp_s_23;
+static PyObject *__pyx_kp_u_24;
+static PyObject *__pyx_kp_u_26;
+static PyObject *__pyx_kp_u_28;
+static PyObject *__pyx_kp_s_3;
+static PyObject *__pyx_kp_u_30;
+static PyObject *__pyx_kp_u_31;
+static PyObject *__pyx_kp_u_34;
+static PyObject *__pyx_n_s_37;
+static PyObject *__pyx_n_s_38;
+static PyObject *__pyx_kp_s_4;
+static PyObject *__pyx_kp_s_5;
+static PyObject *__pyx_kp_s_7;
+static PyObject *__pyx_kp_s_8;
+static PyObject *__pyx_kp_s_9;
+static PyObject *__pyx_n_s__BUFFER_ALLOC_WHEN;
+static PyObject *__pyx_n_s__COMM_WORLD;
+static PyObject *__pyx_n_s__DATATYPE;
+static PyObject *__pyx_n_s__FLAG;
+static PyObject *__pyx_n_s__LATER;
+static PyObject *__pyx_n_s__MPI;
+static PyObject *__pyx_n_s__NO;
+static PyObject *__pyx_n_s__NOW;
+static PyObject *__pyx_n_s__RuntimeError;
+static PyObject *__pyx_n_s__UNKNOWN;
+static PyObject *__pyx_n_s__ValueError;
+static PyObject *__pyx_n_s__YES;
+static PyObject *__pyx_n_s____class__;
+static PyObject *__pyx_n_s____import__;
+static PyObject *__pyx_n_s____main__;
+static PyObject *__pyx_n_s____metaclass__;
+static PyObject *__pyx_n_s____module__;
+static PyObject *__pyx_n_s____pyx_vtable__;
+static PyObject *__pyx_n_s____qualname__;
+static PyObject *__pyx_n_s____test__;
+static PyObject *__pyx_n_s__adios;
+static PyObject *__pyx_n_s__all;
+static PyObject *__pyx_n_s__array;
+static PyObject *__pyx_n_s__attr_namelist;
+static PyObject *__pyx_n_s__attrs_count;
+static PyObject *__pyx_n_s__base_path;
+static PyObject *__pyx_n_s__buffer_size;
+static PyObject *__pyx_n_s__byte;
+static PyObject *__pyx_n_s__close;
+static PyObject *__pyx_n_s__comm;
+static PyObject *__pyx_n_s__complex;
+static PyObject *__pyx_n_s__complex128;
+static PyObject *__pyx_n_s__complex64;
+static PyObject *__pyx_n_s__config;
+static PyObject *__pyx_n_s__contiguous;
+static PyObject *__pyx_n_s__copy;
+static PyObject *__pyx_n_s__count;
+static PyObject *__pyx_n_s__data_size;
+static PyObject *__pyx_n_s__dimensions;
+static PyObject *__pyx_n_s__dims;
+static PyObject *__pyx_n_s__double;
+static PyObject *__pyx_n_s__double_complex;
+static PyObject *__pyx_n_s__dtype;
+static PyObject *__pyx_n_s__end;
+static PyObject *__pyx_n_s__endianness;
+static PyObject *__pyx_n_s__fd_p;
+static PyObject *__pyx_n_s__fh;
+static PyObject *__pyx_n_s__file;
+static PyObject *__pyx_n_s__file_size;
+static PyObject *__pyx_n_s__fill;
+static PyObject *__pyx_n_s__flags;
+static PyObject *__pyx_n_s__float128;
+static PyObject *__pyx_n_s__float32;
+static PyObject *__pyx_n_s__float64;
+static PyObject *__pyx_n_s__fname;
+static PyObject *__pyx_n_s__fp;
+static PyObject *__pyx_n_s__gh;
+static PyObject *__pyx_n_s__global_dimensions;
+static PyObject *__pyx_n_s__gp;
+static PyObject *__pyx_n_s__group;
+static PyObject *__pyx_n_s__group_id;
+static PyObject *__pyx_n_s__group_name;
+static PyObject *__pyx_n_s__group_namelist;
+static PyObject *__pyx_n_s__groups_count;
+static PyObject *__pyx_n_s__grpid;
+static PyObject *__pyx_n_s__int16;
+static PyObject *__pyx_n_s__int32;
+static PyObject *__pyx_n_s__int64;
+static PyObject *__pyx_n_s__int8;
+static PyObject *__pyx_n_s__integer;
+static PyObject *__pyx_n_s__itemsize;
+static PyObject *__pyx_n_s__local_offsets;
+static PyObject *__pyx_n_s__long;
+static PyObject *__pyx_n_s__long_double;
+static PyObject *__pyx_n_s__method;
+static PyObject *__pyx_n_s__mode;
+static PyObject *__pyx_n_s__mype;
+static PyObject *__pyx_n_s__name;
+static PyObject *__pyx_n_s__ndim;
+static PyObject *__pyx_n_s__np;
+static PyObject *__pyx_n_s__ntimesteps;
+static PyObject *__pyx_n_s__numpy;
+static PyObject *__pyx_n_s__object;
+static PyObject *__pyx_n_s__offset;
+static PyObject *__pyx_n_s__parameters;
+static PyObject *__pyx_n_s__path;
+static PyObject *__pyx_n_s__print;
+static PyObject *__pyx_n_s__printself;
+static PyObject *__pyx_n_s__range;
+static PyObject *__pyx_n_s__read;
+static PyObject *__pyx_n_s__real;
+static PyObject *__pyx_n_s__short;
+static PyObject *__pyx_n_s__size;
+static PyObject *__pyx_n_s__split;
+static PyObject *__pyx_n_s__stats;
+static PyObject *__pyx_n_s__string;
+static PyObject *__pyx_n_s__tidx_start;
+static PyObject *__pyx_n_s__time_index;
+static PyObject *__pyx_n_s__timedim;
+static PyObject *__pyx_n_s__type;
+static PyObject *__pyx_n_s__uint16;
+static PyObject *__pyx_n_s__uint32;
+static PyObject *__pyx_n_s__uint64;
+static PyObject *__pyx_n_s__uint8;
+static PyObject *__pyx_n_s__unknown;
+static PyObject *__pyx_n_s__unsigned_byte;
+static PyObject *__pyx_n_s__unsigned_integer;
+static PyObject *__pyx_n_s__unsigned_long;
+static PyObject *__pyx_n_s__unsigned_short;
+static PyObject *__pyx_n_s__val;
+static PyObject *__pyx_n_s__value;
+static PyObject *__pyx_n_s__values;
+static PyObject *__pyx_n_s__var;
+static PyObject *__pyx_n_s__var_namelist;
+static PyObject *__pyx_n_s__varid;
+static PyObject *__pyx_n_s__vars_count;
+static PyObject *__pyx_n_s__version;
+static PyObject *__pyx_n_s__vp;
+static PyObject *__pyx_n_s__when;
+static PyObject *__pyx_n_s__zeros;
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_2;
+static PyObject *__pyx_int_4;
+static PyObject *__pyx_int_5;
+static PyObject *__pyx_int_6;
+static PyObject *__pyx_int_7;
+static PyObject *__pyx_int_9;
+static PyObject *__pyx_int_neg_1;
+static PyObject *__pyx_int_10;
+static PyObject *__pyx_int_11;
+static PyObject *__pyx_int_15;
+static PyObject *__pyx_int_50;
+static PyObject *__pyx_int_51;
+static PyObject *__pyx_int_52;
+static PyObject *__pyx_int_54;
+static struct PyMPICommObject *__pyx_k_1;
+static struct PyMPICommObject *__pyx_k_2;
+static struct PyMPICommObject *__pyx_k_6;
+static struct PyMPICommObject *__pyx_k_10;
+static PyObject *__pyx_k_tuple_13;
+static PyObject *__pyx_k_tuple_18;
+static PyObject *__pyx_k_tuple_25;
+static PyObject *__pyx_k_tuple_27;
+static PyObject *__pyx_k_tuple_29;
+static PyObject *__pyx_k_tuple_32;
+static PyObject *__pyx_k_tuple_33;
+static PyObject *__pyx_k_tuple_35;
+
+/* "adios.pyx":211
+ * ## ==========
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_5adios_init(char *__pyx_v_config, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k_1;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("init", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_comm = __pyx_optional_args->comm;
+    }
+  }
+
+  /* "adios.pyx":212
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):
+ *     return adios_init(config, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int64_t open(char * group_name,
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(adios_init(__pyx_v_config, __pyx_v_comm->ob_mpi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_1init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_config;
+  struct PyMPICommObject *__pyx_v_comm = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("init (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__config,&__pyx_n_s__comm,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)__pyx_k_1;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__config)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_config = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_config) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("init", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_init(__pyx_self, __pyx_v_config, __pyx_v_comm);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":211
+ * ## ==========
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_init(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_config, struct PyMPICommObject *__pyx_v_comm) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_init __pyx_t_2;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("init", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2.__pyx_n = 1;
+  __pyx_t_2.comm = __pyx_v_comm;
+  __pyx_t_1 = __pyx_f_5adios_init(__pyx_v_config, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":214
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+
+static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int64_t __pyx_f_5adios_open(char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_open *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k_2;
+  int64_t __pyx_v_fd;
+  CYTHON_UNUSED int __pyx_v_result;
+  int64_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("open", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_comm = __pyx_optional_args->comm;
+    }
+  }
+
+  /* "adios.pyx":220
+ *     cdef int64_t fd
+ *     cdef int result
+ *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ *     return fd
+ * 
+ */
+  __pyx_v_result = adios_open((&__pyx_v_fd), __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm->ob_mpi);
+
+  /* "adios.pyx":221
+ *     cdef int result
+ *     result = adios_open(&fd, group_name, name, mode, comm.ob_mpi)
+ *     return fd             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):
+ */
+  __pyx_r = __pyx_v_fd;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_3open(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_group_name;
+  char *__pyx_v_name;
+  char *__pyx_v_mode;
+  struct PyMPICommObject *__pyx_v_comm = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("open (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_name,&__pyx_n_s__name,&__pyx_n_s__mode,&__pyx_n_s__comm,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[3] = (PyObject *)__pyx_k_2;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_group_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_group_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_mode = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_mode) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_comm = ((struct PyMPICommObject *)values[3]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("open", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_2open(__pyx_self, __pyx_v_group_name, __pyx_v_name, __pyx_v_mode, __pyx_v_comm);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":214
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ * cpdef int64_t open(char * group_name,             # <<<<<<<<<<<<<<
+ *                    char * name,
+ *                    char * mode,
+ */
+
+static PyObject *__pyx_pf_5adios_2open(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_group_name, char *__pyx_v_name, char *__pyx_v_mode, struct PyMPICommObject *__pyx_v_comm) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int64_t __pyx_t_1;
+  struct __pyx_opt_args_5adios_open __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("open", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2.__pyx_n = 1;
+  __pyx_t_2.comm = __pyx_v_comm;
+  __pyx_t_1 = __pyx_f_5adios_open(__pyx_v_group_name, __pyx_v_name, __pyx_v_mode, 0, &__pyx_t_2); 
+  __pyx_t_3 = __Pyx_PyInt_to_py_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("adios.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":223
+ *     return fd
+ * 
+ * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
+ *     cdef uint64_t total_size
+ *     cdef int result
+ */
+
+static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int64_t __pyx_f_5adios_set_group_size(int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  uint64_t __pyx_v_total_size;
+  CYTHON_UNUSED int __pyx_v_result;
+  int64_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("set_group_size", 0);
+
+  /* "adios.pyx":226
+ *     cdef uint64_t total_size
+ *     cdef int result
+ *     result = adios_group_size(fd_p, data_size, &total_size)             # <<<<<<<<<<<<<<
+ *     return total_size
+ * 
+ */
+  __pyx_v_result = adios_group_size(__pyx_v_fd_p, __pyx_v_data_size, (&__pyx_v_total_size));
+
+  /* "adios.pyx":227
+ *     cdef int result
+ *     result = adios_group_size(fd_p, data_size, &total_size)
+ *     return total_size             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):
+ */
+  __pyx_r = __pyx_v_total_size;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_5set_group_size(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  uint64_t __pyx_v_data_size;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("set_group_size (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__data_size,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data_size)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_group_size") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_data_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_data_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("set_group_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_4set_group_size(__pyx_self, __pyx_v_fd_p, __pyx_v_data_size);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":223
+ *     return fd
+ * 
+ * cpdef int64_t set_group_size(int64_t fd_p, uint64_t data_size):             # <<<<<<<<<<<<<<
+ *     cdef uint64_t total_size
+ *     cdef int result
+ */
+
+static PyObject *__pyx_pf_5adios_4set_group_size(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, uint64_t __pyx_v_data_size) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("set_group_size", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_f_5adios_set_group_size(__pyx_v_fd_p, __pyx_v_data_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.set_group_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":229
+ *     return total_size
+ * 
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:
+ */
+
+static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_write(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  PyArrayObject *__pyx_v_val_ = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write", 0);
+
+  /* "adios.pyx":231
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:             # <<<<<<<<<<<<<<
+ *         val_ = val
+ *     else:
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "adios.pyx":232
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:
+ *         val_ = val             # <<<<<<<<<<<<<<
+ *     else:
+ *         val_ = np.array(val, copy=True)
+ */
+    __Pyx_INCREF(((PyObject *)__pyx_v_val));
+    __pyx_v_val_ = __pyx_v_val;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "adios.pyx":234
+ *         val_ = val
+ *     else:
+ *         val_ = np.array(val, copy=True)             # <<<<<<<<<<<<<<
+ * 
+ *     return adios_write (fd_p, name, <void *> val_.data)
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(((PyObject *)__pyx_v_val));
+    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_val));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_val));
+    __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    __pyx_t_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__copy), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_val_ = ((PyArrayObject *)__pyx_t_5);
+    __pyx_t_5 = 0;
+  }
+  __pyx_L3:;
+
+  /* "adios.pyx":236
+ *         val_ = np.array(val, copy=True)
+ * 
+ *     return adios_write (fd_p, name, <void *> val_.data)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):
+ */
+  __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val_->data));
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_WriteUnraisable("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_val_);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_7write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  char *__pyx_v_name;
+  PyArrayObject *__pyx_v_val = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = ((PyArrayObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("write", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_6write(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":229
+ *     return total_size
+ * 
+ * cpdef int write (int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray val_
+ *     if val.flags.contiguous:
+ */
+
+static PyObject *__pyx_pf_5adios_6write(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_write(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":238
+ *     return adios_write (fd_p, name, <void *> val_.data)
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_write_int(int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_int", 0);
+
+  /* "adios.pyx":239
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):
+ *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):
+ */
+  __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_9write_int(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  char *__pyx_v_name;
+  int __pyx_v_val;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_int (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_int") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_val == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("write_int", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_8write_int(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":238
+ *     return adios_write (fd_p, name, <void *> val_.data)
+ * 
+ * cpdef int write_int (int64_t fd_p, char * name, int val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_8write_int(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, int __pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_int", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_write_int(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.write_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":241
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_write_long(int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_long", 0);
+
+  /* "adios.pyx":242
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):
+ *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):
+ */
+  __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_11write_long(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  char *__pyx_v_name;
+  long __pyx_v_val;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_long (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_long") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __Pyx_PyInt_AsLong(values[2]); if (unlikely((__pyx_v_val == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("write_long", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_10write_long(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":241
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_long (int64_t fd_p, char * name, long val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_10write_long(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, long __pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_long", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_write_long(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.write_long", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":244
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_write_float(int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_float", 0);
+
+  /* "adios.pyx":245
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):
+ *     return adios_write (fd_p, name, &val)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
+ */
+  __pyx_r = adios_write(__pyx_v_fd_p, __pyx_v_name, (&__pyx_v_val));
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_13write_float(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  char *__pyx_v_name;
+  float __pyx_v_val;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("write_float (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_float") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_val == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("write_float", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_12write_float(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":244
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int write_float (int64_t fd_p, char * name, float val):             # <<<<<<<<<<<<<<
+ *     return adios_write (fd_p, name, &val)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_12write_float(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, float __pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("write_float", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_write_float(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.write_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":247
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ */
+
+static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_read(int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  uint64_t __pyx_t_5;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read", 0);
+
+  /* "adios.pyx":248
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'             # <<<<<<<<<<<<<<
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__flags); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__contiguous); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (unlikely(!__pyx_t_3)) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_3));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":249
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"             # <<<<<<<<<<<<<<
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ * 
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_4));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_kp_s_4));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_4);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_5));
+  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_kp_s_5));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5));
+  __pyx_t_4 = 0;
+  if (__Pyx_Print(0, ((PyObject *)__pyx_t_1), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":250
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int close(int64_t fd_p):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__itemsize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_val), __pyx_n_s__size); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_5 = __Pyx_PyInt_from_py_uint64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = adios_read(__pyx_v_fd_p, __pyx_v_name, ((void *)__pyx_v_val->data), __pyx_t_5);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_WriteUnraisable("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_15read(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_fd_p;
+  char *__pyx_v_name;
+  PyArrayObject *__pyx_v_val = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fd_p,&__pyx_n_s__name,&__pyx_n_s__val,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd_p)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_val = ((PyArrayObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("read", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), __pyx_ptype_5numpy_ndarray, 1, "val", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_14read(__pyx_self, __pyx_v_fd_p, __pyx_v_name, __pyx_v_val);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":247
+ *     return adios_write (fd_p, name, &val)
+ * 
+ * cpdef int read(int64_t fd_p, char * name, np.ndarray val):             # <<<<<<<<<<<<<<
+ *     assert val.flags.contiguous, 'Only contiguous arrays are supported.'
+ *     print "Reading ... ", val.itemsize * val.size, "(bytes)"
+ */
+
+static PyObject *__pyx_pf_5adios_14read(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p, char *__pyx_v_name, PyArrayObject *__pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_read(__pyx_v_fd_p, __pyx_v_name, __pyx_v_val, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":252
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ * 
+ * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
+ *     return adios_close(fd_p)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
+static int __pyx_f_5adios_close(int64_t __pyx_v_fd_p, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("close", 0);
+
+  /* "adios.pyx":253
+ * 
+ * cpdef int close(int64_t fd_p):
+ *     return adios_close(fd_p)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef finalize(int mype = 0):
+ */
+  __pyx_r = adios_close(__pyx_v_fd_p);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p); /*proto*/
+static PyObject *__pyx_pw_5adios_17close(PyObject *__pyx_self, PyObject *__pyx_arg_fd_p) {
+  int64_t __pyx_v_fd_p;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("close (wrapper)", 0);
+  assert(__pyx_arg_fd_p); {
+    __pyx_v_fd_p = __Pyx_PyInt_from_py_int64_t(__pyx_arg_fd_p); if (unlikely((__pyx_v_fd_p == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_16close(__pyx_self, ((int64_t)__pyx_v_fd_p));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":252
+ *     return adios_read(fd_p, name, <void *> val.data, val.itemsize * val.size)
+ * 
+ * cpdef int close(int64_t fd_p):             # <<<<<<<<<<<<<<
+ *     return adios_close(fd_p)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_16close(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_fd_p) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_close(__pyx_v_fd_p, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":255
+ *     return adios_close(fd_p)
+ * 
+ * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ *     return adios_finalize(mype)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_5adios_finalize(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_finalize *__pyx_optional_args) {
+  int __pyx_v_mype = ((int)0);
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("finalize", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_mype = __pyx_optional_args->mype;
+    }
+  }
+
+  /* "adios.pyx":256
+ * 
+ * cpdef finalize(int mype = 0):
+ *     return adios_finalize(mype)             # <<<<<<<<<<<<<<
+ * 
+ * ## ==========
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(adios_finalize(__pyx_v_mype)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_19finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_mype;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("finalize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__mype,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mype);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finalize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    if (values[0]) {
+      __pyx_v_mype = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_mype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    } else {
+      __pyx_v_mype = ((int)0);
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("finalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_18finalize(__pyx_self, __pyx_v_mype);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":255
+ *     return adios_close(fd_p)
+ * 
+ * cpdef finalize(int mype = 0):             # <<<<<<<<<<<<<<
+ *     return adios_finalize(mype)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_18finalize(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_mype) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_finalize __pyx_t_2;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("finalize", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2.__pyx_n = 1;
+  __pyx_t_2.mype = __pyx_v_mype;
+  __pyx_t_1 = __pyx_f_5adios_finalize(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":261
+ * ## ADIOS No-XML API
+ * ## ==========
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ */
+
+static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_init_noxml(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_init_noxml *__pyx_optional_args) {
+  struct PyMPICommObject *__pyx_v_comm = __pyx_k_6;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("init_noxml", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_comm = __pyx_optional_args->comm;
+    }
+  }
+
+  /* "adios.pyx":262
+ * ## ==========
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):
+ *     return adios_init_noxml(comm.ob_mpi)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int allocate_buffer(int when,
+ */
+  __pyx_r = adios_init_noxml(__pyx_v_comm->ob_mpi);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_21init_noxml(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyMPICommObject *__pyx_v_comm = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("init_noxml (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__comm,0};
+    PyObject* values[1] = {0};
+    values[0] = (PyObject *)__pyx_k_6;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init_noxml") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("init_noxml", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_20init_noxml(__pyx_self, __pyx_v_comm);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":261
+ * ## ADIOS No-XML API
+ * ## ==========
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_20init_noxml(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  struct __pyx_opt_args_5adios_init_noxml __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("init_noxml", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2.__pyx_n = 1;
+  __pyx_t_2.comm = __pyx_v_comm;
+  __pyx_t_1 = __pyx_f_5adios_init_noxml(0, &__pyx_t_2); 
+  __pyx_t_3 = PyInt_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("adios.init_noxml", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":264
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
+ *                           uint64_t buffer_size):
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
+ */
+
+static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_allocate_buffer(int __pyx_v_when, uint64_t __pyx_v_buffer_size, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("allocate_buffer", 0);
+
+  /* "adios.pyx":267
+ *                           uint64_t buffer_size):
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
+ *                                  buffer_size)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int64_t declare_group(char * name,
+ */
+  __pyx_r = adios_allocate_buffer(((ADIOS_BUFFER_ALLOC_WHEN)__pyx_v_when), __pyx_v_buffer_size);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_23allocate_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_when;
+  uint64_t __pyx_v_buffer_size;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("allocate_buffer (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__when,&__pyx_n_s__buffer_size,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffer_size)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate_buffer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_when = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_when == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_buffer_size = __Pyx_PyInt_from_py_uint64_t(values[1]); if (unlikely((__pyx_v_buffer_size == (uint64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("allocate_buffer", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_22allocate_buffer(__pyx_self, __pyx_v_when, __pyx_v_buffer_size);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":264
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ * cpdef int allocate_buffer(int when,             # <<<<<<<<<<<<<<
+ *                           uint64_t buffer_size):
+ *     return adios_allocate_buffer(<ADIOS_BUFFER_ALLOC_WHEN> when,
+ */
+
+static PyObject *__pyx_pf_5adios_22allocate_buffer(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_when, uint64_t __pyx_v_buffer_size) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("allocate_buffer", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_allocate_buffer(__pyx_v_when, __pyx_v_buffer_size, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":269
+ *                                  buffer_size)
+ * 
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index,
+ *                             int stats):
+ */
+
+static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int64_t __pyx_f_5adios_declare_group(char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int64_t __pyx_v_id;
+  int64_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("declare_group", 0);
+
+  /* "adios.pyx":272
+ *                             char * time_index,
+ *                             int stats):
+ *     cdef int64_t id = 0             # <<<<<<<<<<<<<<
+ *     adios_declare_group (&id,
+ *                          name,
+ */
+  __pyx_v_id = 0;
+
+  /* "adios.pyx":276
+ *                          name,
+ *                          time_index,
+ *                          <ADIOS_FLAG> stats)             # <<<<<<<<<<<<<<
+ *     return id
+ * 
+ */
+  adios_declare_group((&__pyx_v_id), __pyx_v_name, __pyx_v_time_index, ((ADIOS_FLAG)__pyx_v_stats));
+
+  /* "adios.pyx":277
+ *                          time_index,
+ *                          <ADIOS_FLAG> stats)
+ *     return id             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int define_var(int64_t group_id,
+ */
+  __pyx_r = __pyx_v_id;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_25declare_group(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_name;
+  char *__pyx_v_time_index;
+  int __pyx_v_stats;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("declare_group (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__name,&__pyx_n_s__time_index,&__pyx_n_s__stats,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__time_index)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__stats)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "declare_group") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_name = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_time_index = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_time_index) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_stats = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_stats == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("declare_group", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_24declare_group(__pyx_self, __pyx_v_name, __pyx_v_time_index, __pyx_v_stats);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":269
+ *                                  buffer_size)
+ * 
+ * cpdef int64_t declare_group(char * name,             # <<<<<<<<<<<<<<
+ *                             char * time_index,
+ *                             int stats):
+ */
+
+static PyObject *__pyx_pf_5adios_24declare_group(CYTHON_UNUSED PyObject *__pyx_self, char *__pyx_v_name, char *__pyx_v_time_index, int __pyx_v_stats) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("declare_group", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_f_5adios_declare_group(__pyx_v_name, __pyx_v_time_index, __pyx_v_stats, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.declare_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":279
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+
+static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_define_var(int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("define_var", 0);
+
+  /* "adios.pyx":291
+ *                             dimensions,
+ *                             global_dimensions,
+ *                             local_offsets)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int define_attribute (int64_t group,
+ */
+  __pyx_r = adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_27define_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_group_id;
+  char *__pyx_v_name;
+  char *__pyx_v_path;
+  int __pyx_v_type;
+  char *__pyx_v_dimensions;
+  char *__pyx_v_global_dimensions;
+  char *__pyx_v_local_offsets;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("define_var (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group_id,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__dimensions,&__pyx_n_s__global_dimensions,&__pyx_n_s__local_offsets,0};
+    PyObject* values[7] = {0,0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group_id)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dimensions)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  5:
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__global_dimensions)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  6:
+        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__local_offsets)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+    }
+    __pyx_v_group_id = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group_id == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_dimensions = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_global_dimensions = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_global_dimensions) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_local_offsets = __Pyx_PyObject_AsString(values[6]); if (unlikely((!__pyx_v_local_offsets) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("define_var", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_26define_var(__pyx_self, __pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":279
+ *     return id
+ * 
+ * cpdef int define_var(int64_t group_id,             # <<<<<<<<<<<<<<
+ *                      char * name,
+ *                      char * path,
+ */
+
+static PyObject *__pyx_pf_5adios_26define_var(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group_id, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_dimensions, char *__pyx_v_global_dimensions, char *__pyx_v_local_offsets) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("define_var", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_define_var(__pyx_v_group_id, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_dimensions, __pyx_v_global_dimensions, __pyx_v_local_offsets, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.define_var", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":293
+ *                             local_offsets)
+ * 
+ * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
+ *                             char * name,
+ *                             char * path,
+ */
+
+static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_define_attribute(int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("define_attribute", 0);
+
+  /* "adios.pyx":304
+ *                                    <ADIOS_DATATYPES> type,
+ *                                    value,
+ *                                    var)             # <<<<<<<<<<<<<<
+ * 
+ * cpdef int select_method (int64_t group,
+ */
+  __pyx_r = adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, ((ADIOS_DATATYPES)__pyx_v_type), __pyx_v_value, __pyx_v_var);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_29define_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_group;
+  char *__pyx_v_name;
+  char *__pyx_v_path;
+  int __pyx_v_type;
+  char *__pyx_v_value;
+  char *__pyx_v_var;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("define_attribute (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,&__pyx_n_s__path,&__pyx_n_s__type,&__pyx_n_s__value,&__pyx_n_s__var,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__path)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__type)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__value)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  5:
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__var)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "define_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_group = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_path = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_type = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_type == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_value = __Pyx_PyObject_AsString(values[4]); if (unlikely((!__pyx_v_value) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_var = __Pyx_PyObject_AsString(values[5]); if (unlikely((!__pyx_v_var) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("define_attribute", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_28define_attribute(__pyx_self, __pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":293
+ *                             local_offsets)
+ * 
+ * cpdef int define_attribute (int64_t group,             # <<<<<<<<<<<<<<
+ *                             char * name,
+ *                             char * path,
+ */
+
+static PyObject *__pyx_pf_5adios_28define_attribute(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_name, char *__pyx_v_path, int __pyx_v_type, char *__pyx_v_value, char *__pyx_v_var) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("define_attribute", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_define_attribute(__pyx_v_group, __pyx_v_name, __pyx_v_path, __pyx_v_type, __pyx_v_value, __pyx_v_var, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.define_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":306
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters,
+ */
+
+static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_5adios_select_method(int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("select_method", 0);
+
+  /* "adios.pyx":313
+ *                                 method,
+ *                                 parameters,
+ *                                 base_path)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_31select_method(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int64_t __pyx_v_group;
+  char *__pyx_v_method;
+  char *__pyx_v_parameters;
+  char *__pyx_v_base_path;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("select_method (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__method,&__pyx_n_s__parameters,&__pyx_n_s__base_path,0};
+    PyObject* values[4] = {0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__method)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__parameters)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base_path)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_method") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+    }
+    __pyx_v_group = __Pyx_PyInt_from_py_int64_t(values[0]); if (unlikely((__pyx_v_group == (int64_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_method = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_method) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_parameters = __Pyx_PyObject_AsString(values[2]); if (unlikely((!__pyx_v_parameters) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_base_path = __Pyx_PyObject_AsString(values[3]); if (unlikely((!__pyx_v_base_path) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("select_method", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_30select_method(__pyx_self, __pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":306
+ *                                    var)
+ * 
+ * cpdef int select_method (int64_t group,             # <<<<<<<<<<<<<<
+ *                          char * method,
+ *                          char * parameters,
+ */
+
+static PyObject *__pyx_pf_5adios_30select_method(CYTHON_UNUSED PyObject *__pyx_self, int64_t __pyx_v_group, char *__pyx_v_method, char *__pyx_v_parameters, char *__pyx_v_base_path) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("select_method", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_f_5adios_select_method(__pyx_v_group, __pyx_v_method, __pyx_v_parameters, __pyx_v_base_path, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.select_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":320
+ * ## ==========
+ * 
+ * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ *     cdef type ntype = None
+ *     if t == adios_byte:
+ */
+
+static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
+static PyObject *__pyx_f_5adios_adios2nptype(ADIOS_DATATYPES __pyx_v_t, CYTHON_UNUSED int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_ntype = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("adios2nptype", 0);
+
+  /* "adios.pyx":321
+ * 
+ * cpdef type adios2nptype(ADIOS_DATATYPES t):
+ *     cdef type ntype = None             # <<<<<<<<<<<<<<
+ *     if t == adios_byte:
+ *         ntype = np.int8
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_ntype = ((PyObject*)Py_None);
+
+  /* "adios.pyx":346
+ *     elif t == adios_complex:
+ *         ntype = np.complex64
+ *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
+ *         ntype = np.complex128
+ *     else:
+ */
+  switch (__pyx_v_t) {
+
+    /* "adios.pyx":322
+ * cpdef type adios2nptype(ADIOS_DATATYPES t):
+ *     cdef type ntype = None
+ *     if t == adios_byte:             # <<<<<<<<<<<<<<
+ *         ntype = np.int8
+ *     elif t == adios_short:
+ */
+    case adios_byte:
+
+    /* "adios.pyx":323
+ *     cdef type ntype = None
+ *     if t == adios_byte:
+ *         ntype = np.int8             # <<<<<<<<<<<<<<
+ *     elif t == adios_short:
+ *         ntype = np.int16
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":324
+ *     if t == adios_byte:
+ *         ntype = np.int8
+ *     elif t == adios_short:             # <<<<<<<<<<<<<<
+ *         ntype = np.int16
+ *     elif t == adios_integer:
+ */
+    case adios_short:
+
+    /* "adios.pyx":325
+ *         ntype = np.int8
+ *     elif t == adios_short:
+ *         ntype = np.int16             # <<<<<<<<<<<<<<
+ *     elif t == adios_integer:
+ *         ntype = np.int32
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":326
+ *     elif t == adios_short:
+ *         ntype = np.int16
+ *     elif t == adios_integer:             # <<<<<<<<<<<<<<
+ *         ntype = np.int32
+ *     elif t == adios_long:
+ */
+    case adios_integer:
+
+    /* "adios.pyx":327
+ *         ntype = np.int16
+ *     elif t == adios_integer:
+ *         ntype = np.int32             # <<<<<<<<<<<<<<
+ *     elif t == adios_long:
+ *         ntype = np.int64
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__int32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":328
+ *     elif t == adios_integer:
+ *         ntype = np.int32
+ *     elif t == adios_long:             # <<<<<<<<<<<<<<
+ *         ntype = np.int64
+ *     elif t == adios_unsigned_byte:
+ */
+    case adios_long:
+
+    /* "adios.pyx":329
+ *         ntype = np.int32
+ *     elif t == adios_long:
+ *         ntype = np.int64             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_byte:
+ *         ntype = np.uint8
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":330
+ *     elif t == adios_long:
+ *         ntype = np.int64
+ *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
+ *         ntype = np.uint8
+ *     elif t == adios_unsigned_short:
+ */
+    case adios_unsigned_byte:
+
+    /* "adios.pyx":331
+ *         ntype = np.int64
+ *     elif t == adios_unsigned_byte:
+ *         ntype = np.uint8             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_short:
+ *         ntype = np.uint16
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__uint8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":332
+ *     elif t == adios_unsigned_byte:
+ *         ntype = np.uint8
+ *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
+ *         ntype = np.uint16
+ *     elif t == adios_unsigned_integer:
+ */
+    case adios_unsigned_short:
+
+    /* "adios.pyx":333
+ *         ntype = np.uint8
+ *     elif t == adios_unsigned_short:
+ *         ntype = np.uint16             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_integer:
+ *         ntype = np.uint32
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__uint16); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":334
+ *     elif t == adios_unsigned_short:
+ *         ntype = np.uint16
+ *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
+ *         ntype = np.uint32
+ *     elif t == adios_unsigned_long:
+ */
+    case adios_unsigned_integer:
+
+    /* "adios.pyx":335
+ *         ntype = np.uint16
+ *     elif t == adios_unsigned_integer:
+ *         ntype = np.uint32             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_long:
+ *         ntype = np.uint64
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__uint32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":336
+ *     elif t == adios_unsigned_integer:
+ *         ntype = np.uint32
+ *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
+ *         ntype = np.uint64
+ *     elif t == adios_real:
+ */
+    case adios_unsigned_long:
+
+    /* "adios.pyx":337
+ *         ntype = np.uint32
+ *     elif t == adios_unsigned_long:
+ *         ntype = np.uint64             # <<<<<<<<<<<<<<
+ *     elif t == adios_real:
+ *         ntype = np.float32
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__uint64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":338
+ *     elif t == adios_unsigned_long:
+ *         ntype = np.uint64
+ *     elif t == adios_real:             # <<<<<<<<<<<<<<
+ *         ntype = np.float32
+ *     elif t == adios_double:
+ */
+    case adios_real:
+
+    /* "adios.pyx":339
+ *         ntype = np.uint64
+ *     elif t == adios_real:
+ *         ntype = np.float32             # <<<<<<<<<<<<<<
+ *     elif t == adios_double:
+ *         ntype = np.float64
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float32); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":340
+ *     elif t == adios_real:
+ *         ntype = np.float32
+ *     elif t == adios_double:             # <<<<<<<<<<<<<<
+ *         ntype = np.float64
+ *     elif t == adios_long_double:
+ */
+    case adios_double:
+
+    /* "adios.pyx":341
+ *         ntype = np.float32
+ *     elif t == adios_double:
+ *         ntype = np.float64             # <<<<<<<<<<<<<<
+ *     elif t == adios_long_double:
+ *         ntype = np.float128
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__float64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":342
+ *     elif t == adios_double:
+ *         ntype = np.float64
+ *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
+ *         ntype = np.float128
+ *     elif t == adios_complex:
+ */
+    case adios_long_double:
+
+    /* "adios.pyx":343
+ *         ntype = np.float64
+ *     elif t == adios_long_double:
+ *         ntype = np.float128             # <<<<<<<<<<<<<<
+ *     elif t == adios_complex:
+ *         ntype = np.complex64
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__float128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+
+    /* "adios.pyx":344
+ *     elif t == adios_long_double:
+ *         ntype = np.float128
+ *     elif t == adios_complex:             # <<<<<<<<<<<<<<
+ *         ntype = np.complex64
+ *     elif t == adios_double_complex:
+ */
+    case adios_complex:
+
+    /* "adios.pyx":345
+ *         ntype = np.float128
+ *     elif t == adios_complex:
+ *         ntype = np.complex64             # <<<<<<<<<<<<<<
+ *     elif t == adios_double_complex:
+ *         ntype = np.complex128
+ */
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__complex64); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+    __pyx_t_1 = 0;
+    break;
+
+    /* "adios.pyx":346
+ *     elif t == adios_complex:
+ *         ntype = np.complex64
+ *     elif t == adios_double_complex:             # <<<<<<<<<<<<<<
+ *         ntype = np.complex128
+ *     else:
+ */
+    case adios_double_complex:
+
+    /* "adios.pyx":347
+ *         ntype = np.complex64
+ *     elif t == adios_double_complex:
+ *         ntype = np.complex128             # <<<<<<<<<<<<<<
+ *     else:
+ *         ntype = None
+ */
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__complex128); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (!(likely(PyType_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)__pyx_t_2);
+    __pyx_t_2 = 0;
+    break;
+    default:
+
+    /* "adios.pyx":349
+ *         ntype = np.complex128
+ *     else:
+ *         ntype = None             # <<<<<<<<<<<<<<
+ * 
+ *     return ntype
+ */
+    __Pyx_INCREF(Py_None);
+    __Pyx_DECREF(((PyObject *)__pyx_v_ntype));
+    __pyx_v_ntype = ((PyObject*)Py_None);
+    break;
+  }
+
+  /* "adios.pyx":351
+ *         ntype = None
+ * 
+ *     return ntype             # <<<<<<<<<<<<<<
+ * 
+ * """
+ */
+  __Pyx_XDECREF(((PyObject *)__pyx_r));
+  __Pyx_INCREF(((PyObject *)__pyx_v_ntype));
+  __pyx_r = __pyx_v_ntype;
+  goto __pyx_L0;
+
+  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ntype);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/
+static PyObject *__pyx_pw_5adios_33adios2nptype(PyObject *__pyx_self, PyObject *__pyx_arg_t) {
+  ADIOS_DATATYPES __pyx_v_t;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("adios2nptype (wrapper)", 0);
+  assert(__pyx_arg_t); {
+    __pyx_v_t = ((ADIOS_DATATYPES)PyInt_AsLong(__pyx_arg_t)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5adios_32adios2nptype(__pyx_self, ((ADIOS_DATATYPES)__pyx_v_t));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":320
+ * ## ==========
+ * 
+ * cpdef type adios2nptype(ADIOS_DATATYPES t):             # <<<<<<<<<<<<<<
+ *     cdef type ntype = None
+ *     if t == adios_byte:
+ */
+
+static PyObject *__pyx_pf_5adios_32adios2nptype(CYTHON_UNUSED PyObject *__pyx_self, ADIOS_DATATYPES __pyx_v_t) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("adios2nptype", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_t, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.adios2nptype", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":364
+ * """
+ * 
+ * cdef printAdiosFile(ADIOS_FILE * f):             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('fh', f.fh)
+ *     print '%15s : %d' % ('groups_count', f.groups_count)
+ */
+
+static PyObject *__pyx_f_5adios_printAdiosFile(ADIOS_FILE *__pyx_v_f) {
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printAdiosFile", 0);
+
+  /* "adios.pyx":365
+ * 
+ * cdef printAdiosFile(ADIOS_FILE * f):
+ *     print '%15s : %lu' % ('fh', f.fh)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('groups_count', f.groups_count)
+ *     print '%15s : %d' % ('vars_count', f.vars_count)
+ */
+  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->fh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__fh));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fh));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fh));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":366
+ * cdef printAdiosFile(ADIOS_FILE * f):
+ *     print '%15s : %lu' % ('fh', f.fh)
+ *     print '%15s : %d' % ('groups_count', f.groups_count)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('vars_count', f.vars_count)
+ *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__groups_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__groups_count));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__groups_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":367
+ *     print '%15s : %lu' % ('fh', f.fh)
+ *     print '%15s : %d' % ('groups_count', f.groups_count)
+ *     print '%15s : %d' % ('vars_count', f.vars_count)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__vars_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":368
+ *     print '%15s : %d' % ('groups_count', f.groups_count)
+ *     print '%15s : %d' % ('vars_count', f.vars_count)
+ *     print '%15s : %d' % ('attrs_count', f.attrs_count)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__attrs_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":369
+ *     print '%15s : %d' % ('vars_count', f.vars_count)
+ *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ *     print '%15s : %d' % ('tidx_start', f.tidx_start)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
+ *     print '%15s : %d' % ('version', f.version)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__tidx_start));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__tidx_start));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__tidx_start));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":370
+ *     print '%15s : %d' % ('attrs_count', f.attrs_count)
+ *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('version', f.version)
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__ntimesteps));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ntimesteps));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ntimesteps));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":371
+ *     print '%15s : %d' % ('tidx_start', f.tidx_start)
+ *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
+ *     print '%15s : %d' % ('version', f.version)             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ *     print '%15s : %d' % ('endianness', f.endianness)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__version));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__version));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__version));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":372
+ *     print '%15s : %d' % ('ntimesteps', f.ntimesteps)
+ *     print '%15s : %d' % ('version', f.version)
+ *     print '%15s : %lu' % ('file_size', f.file_size)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('endianness', f.endianness)
+ *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
+ */
+  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_f->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__file_size));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__file_size));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__file_size));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":373
+ *     print '%15s : %d' % ('version', f.version)
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ *     print '%15s : %d' % ('endianness', f.endianness)             # <<<<<<<<<<<<<<
+ *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
+ * 
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_f->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__endianness));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__endianness));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__endianness));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":374
+ *     print '%15s : %lu' % ('file_size', f.file_size)
+ *     print '%15s : %d' % ('endianness', f.endianness)
+ *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])             # <<<<<<<<<<<<<<
+ * 
+ * cdef printAdiosGroup(ADIOS_GROUP * g):
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __pyx_v_f->groups_count;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_f->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  }
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__group_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__group_namelist));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__group_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.printAdiosFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":376
+ *     print '%15s : %s' % ('group_namelist', [f.group_namelist[i] for i in range(f.groups_count)])
+ * 
+ * cdef printAdiosGroup(ADIOS_GROUP * g):             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('gh', g.gh)
+ *     print '%15s : %d' % ('grpid', g.grpid)
+ */
+
+static PyObject *__pyx_f_5adios_printAdiosGroup(ADIOS_GROUP *__pyx_v_g) {
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printAdiosGroup", 0);
+
+  /* "adios.pyx":377
+ * 
+ * cdef printAdiosGroup(ADIOS_GROUP * g):
+ *     print '%15s : %lu' % ('gh', g.gh)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('grpid', g.grpid)
+ *     print '%15s : %d' % ('vars_count', g.vars_count)
+ */
+  __pyx_t_1 = __Pyx_PyInt_to_py_uint64_t(__pyx_v_g->gh); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__gh));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gh));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gh));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":378
+ * cdef printAdiosGroup(ADIOS_GROUP * g):
+ *     print '%15s : %lu' % ('gh', g.gh)
+ *     print '%15s : %d' % ('grpid', g.grpid)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('vars_count', g.vars_count)
+ *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":379
+ *     print '%15s : %lu' % ('gh', g.gh)
+ *     print '%15s : %d' % ('grpid', g.grpid)
+ *     print '%15s : %d' % ('vars_count', g.vars_count)             # <<<<<<<<<<<<<<
+ *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
+ *     print '%15s : %d' % ('attrs_count', g.attrs_count)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__vars_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vars_count));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vars_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":380
+ *     print '%15s : %d' % ('grpid', g.grpid)
+ *     print '%15s : %d' % ('vars_count', g.vars_count)
+ *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('attrs_count', g.attrs_count)
+ *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __pyx_v_g->vars_count;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  }
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__var_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__var_namelist));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__var_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":381
+ *     print '%15s : %d' % ('vars_count', g.vars_count)
+ *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
+ *     print '%15s : %d' % ('attrs_count', g.attrs_count)             # <<<<<<<<<<<<<<
+ *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
+ *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_g->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__attrs_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attrs_count));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attrs_count));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":382
+ *     print '%15s : %s' % ('var_namelist', [g.var_namelist[i] for i in range(g.vars_count)])
+ *     print '%15s : %d' % ('attrs_count', g.attrs_count)
+ *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])             # <<<<<<<<<<<<<<
+ *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __pyx_v_g->attrs_count;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+    __pyx_t_2 = __Pyx_PyBytes_FromString((__pyx_v_g->attr_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  }
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__attr_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__attr_namelist));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__attr_namelist));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":383
+ *     print '%15s : %d' % ('attrs_count', g.attrs_count)
+ *     print '%15s : %s' % ('attr_namelist', [g.attr_namelist[i] for i in range(g.attrs_count)])
+ *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)             # <<<<<<<<<<<<<<
+ * 
+ * cdef printAdiosVariable(ADIOS_VARINFO * v):
+ */
+  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_g->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.printAdiosGroup", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":385
+ *     print '%15s : %lu' % ('fp', <unsigned long> g.fp)
+ * 
+ * cdef printAdiosVariable(ADIOS_VARINFO * v):             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('grpid', v.grpid)
+ *     print '%15s : %d' % ('varid', v.varid)
+ */
+
+static PyObject *__pyx_f_5adios_printAdiosVariable(ADIOS_VARINFO *__pyx_v_v) {
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printAdiosVariable", 0);
+
+  /* "adios.pyx":386
+ * 
+ * cdef printAdiosVariable(ADIOS_VARINFO * v):
+ *     print '%15s : %d' % ('grpid', v.grpid)             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__grpid));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__grpid));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__grpid));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":387
+ * cdef printAdiosVariable(ADIOS_VARINFO * v):
+ *     print '%15s : %d' % ('grpid', v.grpid)
+ *     print '%15s : %d' % ('varid', v.varid)             # <<<<<<<<<<<<<<
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ *     print '%15s : %d' % ('ndim', v.ndim)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__varid));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__varid));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__varid));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":388
+ *     print '%15s : %d' % ('grpid', v.grpid)
+ *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('ndim', v.ndim)
+ *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_v->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__type));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__type));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__type));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":389
+ *     print '%15s : %d' % ('varid', v.varid)
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ *     print '%15s : %d' % ('ndim', v.ndim)             # <<<<<<<<<<<<<<
+ *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
+ *     print '%15s : %d' % ('timedim', v.timedim)
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__ndim));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__ndim));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ndim));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":390
+ *     print '%15s : %s' % ('type', adios2nptype(v.type))
+ *     print '%15s : %d' % ('ndim', v.ndim)
+ *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])             # <<<<<<<<<<<<<<
+ *     print '%15s : %d' % ('timedim', v.timedim)
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __pyx_v_v->ndim;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+    __pyx_t_2 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_v->dims[__pyx_v_i])); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__dims));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__dims));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__dims));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":391
+ *     print '%15s : %d' % ('ndim', v.ndim)
+ *     print '%15s : %s' % ('dims', [v.dims[i] for i in range(v.ndim)])
+ *     print '%15s : %d' % ('timedim', v.timedim)             # <<<<<<<<<<<<<<
+ * 
+ * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
+ */
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_v->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__timedim));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__timedim));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__timedim));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_8), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.printAdiosVariable", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":393
+ *     print '%15s : %d' % ('timedim', v.timedim)
+ * 
+ * cdef adios2scalar(ADIOS_DATATYPES t, void * val):             # <<<<<<<<<<<<<<
+ *     if t == adios_byte :
+ *         return (<char *> val)[0]
+ */
+
+static PyObject *__pyx_f_5adios_adios2scalar(ADIOS_DATATYPES __pyx_v_t, void *__pyx_v_val) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("adios2scalar", 0);
+
+  /* "adios.pyx":414
+ *     elif t == adios_double:
+ *         return (<double *> val)[0]
+ *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
+ *         return (<long double *> val)[0]
+ *     else:
+ */
+  switch (__pyx_v_t) {
+
+    /* "adios.pyx":394
+ * 
+ * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
+ *     if t == adios_byte :             # <<<<<<<<<<<<<<
+ *         return (<char *> val)[0]
+ *     elif t == adios_short:
+ */
+    case adios_byte:
+
+    /* "adios.pyx":395
+ * cdef adios2scalar(ADIOS_DATATYPES t, void * val):
+ *     if t == adios_byte :
+ *         return (<char *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_short:
+ *         return (<short *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":396
+ *     if t == adios_byte :
+ *         return (<char *> val)[0]
+ *     elif t == adios_short:             # <<<<<<<<<<<<<<
+ *         return (<short *> val)[0]
+ *     elif t == adios_integer:
+ */
+    case adios_short:
+
+    /* "adios.pyx":397
+ *         return (<char *> val)[0]
+ *     elif t == adios_short:
+ *         return (<short *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_integer:
+ *         return (<int *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":398
+ *     elif t == adios_short:
+ *         return (<short *> val)[0]
+ *     elif t == adios_integer:             # <<<<<<<<<<<<<<
+ *         return (<int *> val)[0]
+ *     elif t == adios_long:
+ */
+    case adios_integer:
+
+    /* "adios.pyx":399
+ *         return (<short *> val)[0]
+ *     elif t == adios_integer:
+ *         return (<int *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_long:
+ *         return (<long *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":400
+ *     elif t == adios_integer:
+ *         return (<int *> val)[0]
+ *     elif t == adios_long:             # <<<<<<<<<<<<<<
+ *         return (<long *> val)[0]
+ *     elif t == adios_unsigned_byte:
+ */
+    case adios_long:
+
+    /* "adios.pyx":401
+ *         return (<int *> val)[0]
+ *     elif t == adios_long:
+ *         return (<long *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_byte:
+ *         return (<unsigned char *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":402
+ *     elif t == adios_long:
+ *         return (<long *> val)[0]
+ *     elif t == adios_unsigned_byte:             # <<<<<<<<<<<<<<
+ *         return (<unsigned char *> val)[0]
+ *     elif t == adios_unsigned_short:
+ */
+    case adios_unsigned_byte:
+
+    /* "adios.pyx":403
+ *         return (<long *> val)[0]
+ *     elif t == adios_unsigned_byte:
+ *         return (<unsigned char *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_short:
+ *         return (<unsigned short *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((unsigned char *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":404
+ *     elif t == adios_unsigned_byte:
+ *         return (<unsigned char *> val)[0]
+ *     elif t == adios_unsigned_short:             # <<<<<<<<<<<<<<
+ *         return (<unsigned short *> val)[0]
+ *     elif t == adios_unsigned_integer:
+ */
+    case adios_unsigned_short:
+
+    /* "adios.pyx":405
+ *         return (<unsigned char *> val)[0]
+ *     elif t == adios_unsigned_short:
+ *         return (<unsigned short *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_integer:
+ *         return (<unsigned int *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyInt_FromLong((((unsigned short *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":406
+ *     elif t == adios_unsigned_short:
+ *         return (<unsigned short *> val)[0]
+ *     elif t == adios_unsigned_integer:             # <<<<<<<<<<<<<<
+ *         return (<unsigned int *> val)[0]
+ *     elif t == adios_unsigned_long:
+ */
+    case adios_unsigned_integer:
+
+    /* "adios.pyx":407
+ *         return (<unsigned short *> val)[0]
+ *     elif t == adios_unsigned_integer:
+ *         return (<unsigned int *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_unsigned_long:
+ *         return (<unsigned long *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned int *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":408
+ *     elif t == adios_unsigned_integer:
+ *         return (<unsigned int *> val)[0]
+ *     elif t == adios_unsigned_long:             # <<<<<<<<<<<<<<
+ *         return (<unsigned long *> val)[0]
+ *     elif t == adios_real:
+ */
+    case adios_unsigned_long:
+
+    /* "adios.pyx":409
+ *         return (<unsigned int *> val)[0]
+ *     elif t == adios_unsigned_long:
+ *         return (<unsigned long *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_real:
+ *         return (<float *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyLong_FromUnsignedLong((((unsigned long *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":410
+ *     elif t == adios_unsigned_long:
+ *         return (<unsigned long *> val)[0]
+ *     elif t == adios_real:             # <<<<<<<<<<<<<<
+ *         return (<float *> val)[0]
+ *     elif t == adios_double:
+ */
+    case adios_real:
+
+    /* "adios.pyx":411
+ *         return (<unsigned long *> val)[0]
+ *     elif t == adios_real:
+ *         return (<float *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_double:
+ *         return (<double *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyFloat_FromDouble((((float *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":412
+ *     elif t == adios_real:
+ *         return (<float *> val)[0]
+ *     elif t == adios_double:             # <<<<<<<<<<<<<<
+ *         return (<double *> val)[0]
+ *     elif t == adios_long_double:
+ */
+    case adios_double:
+
+    /* "adios.pyx":413
+ *         return (<float *> val)[0]
+ *     elif t == adios_double:
+ *         return (<double *> val)[0]             # <<<<<<<<<<<<<<
+ *     elif t == adios_long_double:
+ *         return (<long double *> val)[0]
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyFloat_FromDouble((((double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+
+    /* "adios.pyx":414
+ *     elif t == adios_double:
+ *         return (<double *> val)[0]
+ *     elif t == adios_long_double:             # <<<<<<<<<<<<<<
+ *         return (<long double *> val)[0]
+ *     else:
+ */
+    case adios_long_double:
+
+    /* "adios.pyx":415
+ *         return (<double *> val)[0]
+ *     elif t == adios_long_double:
+ *         return (<long double *> val)[0]             # <<<<<<<<<<<<<<
+ *     else:
+ *         return None
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = PyFloat_FromDouble((((long double *)__pyx_v_val)[0])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_r = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+    break;
+    default:
+
+    /* "adios.pyx":417
+ *         return (<long double *> val)[0]
+ *     else:
+ *         return None             # <<<<<<<<<<<<<<
+ * 
+ * ## ==========
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    break;
+  }
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.adios2scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  char *__pyx_v_fname;
+  struct PyMPICommObject *__pyx_v_comm = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fname,&__pyx_n_s__comm,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)__pyx_k_10;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fname)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__comm);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_fname = __Pyx_PyObject_AsString(values[0]); if (unlikely((!__pyx_v_fname) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_9AdiosFile___init__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), __pyx_v_fname, __pyx_v_comm);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":440
+ *     cpdef public dict group
+ * 
+ *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *         self.fp = NULL
+ *         self.group = {}
+ */
+
+static int __pyx_pf_5adios_9AdiosFile___init__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, char *__pyx_v_fname, struct PyMPICommObject *__pyx_v_comm) {
+  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_g = 0;
+  PyObject *__pyx_v_grpname = NULL;
+  int __pyx_v_i;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  uint64_t __pyx_t_4;
+  int __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "adios.pyx":441
+ * 
+ *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+ *         self.fp = NULL             # <<<<<<<<<<<<<<
+ *         self.group = {}
+ * 
+ */
+  __pyx_v_self->fp = NULL;
+
+  /* "adios.pyx":442
+ *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+ *         self.fp = NULL
+ *         self.group = {}             # <<<<<<<<<<<<<<
+ * 
+ *         self.fp = adios_fopen(fname, comm.ob_mpi)
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_GOTREF(__pyx_v_self->group);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
+  __pyx_v_self->group = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":444
+ *         self.group = {}
+ * 
+ *         self.fp = adios_fopen(fname, comm.ob_mpi)             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ * 
+ */
+  __pyx_v_self->fp = adios_fopen(__pyx_v_fname, __pyx_v_comm->ob_mpi);
+
+  /* "adios.pyx":445
+ * 
+ *         self.fp = adios_fopen(fname, comm.ob_mpi)
+ *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ * 
+ *         self.name         = fname.split('/')[-1]  ## basename
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":447
+ *         assert self.fp != NULL, 'Not an open file'
+ * 
+ *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
+ *         self.groups_count = self.fp.groups_count
+ *         self.vars_count   = self.fp.vars_count
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_fname); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_t_1), __pyx_n_s__split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GIVEREF(__pyx_t_2);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":448
+ * 
+ *         self.name         = fname.split('/')[-1]  ## basename
+ *         self.groups_count = self.fp.groups_count             # <<<<<<<<<<<<<<
+ *         self.vars_count   = self.fp.vars_count
+ *         self.attrs_count  = self.fp.attrs_count
+ */
+  __pyx_t_3 = __pyx_v_self->fp->groups_count;
+  __pyx_v_self->groups_count = __pyx_t_3;
+
+  /* "adios.pyx":449
+ *         self.name         = fname.split('/')[-1]  ## basename
+ *         self.groups_count = self.fp.groups_count
+ *         self.vars_count   = self.fp.vars_count             # <<<<<<<<<<<<<<
+ *         self.attrs_count  = self.fp.attrs_count
+ *         self.tidx_start   = self.fp.tidx_start
+ */
+  __pyx_t_3 = __pyx_v_self->fp->vars_count;
+  __pyx_v_self->vars_count = __pyx_t_3;
+
+  /* "adios.pyx":450
+ *         self.groups_count = self.fp.groups_count
+ *         self.vars_count   = self.fp.vars_count
+ *         self.attrs_count  = self.fp.attrs_count             # <<<<<<<<<<<<<<
+ *         self.tidx_start   = self.fp.tidx_start
+ *         self.ntimesteps   = self.fp.ntimesteps
+ */
+  __pyx_t_3 = __pyx_v_self->fp->attrs_count;
+  __pyx_v_self->attrs_count = __pyx_t_3;
+
+  /* "adios.pyx":451
+ *         self.vars_count   = self.fp.vars_count
+ *         self.attrs_count  = self.fp.attrs_count
+ *         self.tidx_start   = self.fp.tidx_start             # <<<<<<<<<<<<<<
+ *         self.ntimesteps   = self.fp.ntimesteps
+ *         self.version      = self.fp.version
+ */
+  __pyx_t_3 = __pyx_v_self->fp->tidx_start;
+  __pyx_v_self->tidx_start = __pyx_t_3;
+
+  /* "adios.pyx":452
+ *         self.attrs_count  = self.fp.attrs_count
+ *         self.tidx_start   = self.fp.tidx_start
+ *         self.ntimesteps   = self.fp.ntimesteps             # <<<<<<<<<<<<<<
+ *         self.version      = self.fp.version
+ *         self.file_size    = self.fp.file_size
+ */
+  __pyx_t_3 = __pyx_v_self->fp->ntimesteps;
+  __pyx_v_self->ntimesteps = __pyx_t_3;
+
+  /* "adios.pyx":453
+ *         self.tidx_start   = self.fp.tidx_start
+ *         self.ntimesteps   = self.fp.ntimesteps
+ *         self.version      = self.fp.version             # <<<<<<<<<<<<<<
+ *         self.file_size    = self.fp.file_size
+ *         self.endianness   = self.fp.endianness
+ */
+  __pyx_t_3 = __pyx_v_self->fp->version;
+  __pyx_v_self->version = __pyx_t_3;
+
+  /* "adios.pyx":454
+ *         self.ntimesteps   = self.fp.ntimesteps
+ *         self.version      = self.fp.version
+ *         self.file_size    = self.fp.file_size             # <<<<<<<<<<<<<<
+ *         self.endianness   = self.fp.endianness
+ * 
+ */
+  __pyx_t_4 = __pyx_v_self->fp->file_size;
+  __pyx_v_self->file_size = __pyx_t_4;
+
+  /* "adios.pyx":455
+ *         self.version      = self.fp.version
+ *         self.file_size    = self.fp.file_size
+ *         self.endianness   = self.fp.endianness             # <<<<<<<<<<<<<<
+ * 
+ *         cdef AdiosGroup g
+ */
+  __pyx_t_3 = __pyx_v_self->fp->endianness;
+  __pyx_v_self->endianness = __pyx_t_3;
+
+  /* "adios.pyx":458
+ * 
+ *         cdef AdiosGroup g
+ *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:             # <<<<<<<<<<<<<<
+ *             g = AdiosGroup(self, grpname)
+ *             self.group[grpname] = g
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_v_self->groups_count;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_3; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_1 = __Pyx_PyBytes_FromString((__pyx_v_self->fp->group_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  }
+  __pyx_t_1 = ((PyObject *)__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  for (;;) {
+    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #else
+    __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #endif
+    __Pyx_XDECREF(__pyx_v_grpname);
+    __pyx_v_grpname = __pyx_t_2;
+    __pyx_t_2 = 0;
+
+    /* "adios.pyx":459
+ *         cdef AdiosGroup g
+ *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
+ *             g = AdiosGroup(self, grpname)             # <<<<<<<<<<<<<<
+ *             self.group[grpname] = g
+ * 
+ */
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+    __Pyx_INCREF(__pyx_v_grpname);
+    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_grpname);
+    __Pyx_GIVEREF(__pyx_v_grpname);
+    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosGroup)), ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    __Pyx_XDECREF(((PyObject *)__pyx_v_g));
+    __pyx_v_g = ((struct __pyx_obj_5adios_AdiosGroup *)__pyx_t_7);
+    __pyx_t_7 = 0;
+
+    /* "adios.pyx":460
+ *         for grpname in [self.fp.group_namelist[i] for i in range(self.groups_count)]:
+ *             g = AdiosGroup(self, grpname)
+ *             self.group[grpname] = g             # <<<<<<<<<<<<<<
+ * 
+ *     def __del__(self):
+ */
+    if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    if (PyDict_SetItem(((PyObject *)__pyx_v_self->group), __pyx_v_grpname, ((PyObject *)__pyx_v_g)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("adios.AdiosFile.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_g);
+  __Pyx_XDECREF(__pyx_v_grpname);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_2__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":462
+ *             self.group[grpname] = g
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_2__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__del__", 0);
+
+  /* "adios.pyx":463
+ * 
+ *     def __del__(self):
+ *         self.close()             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef close(self):
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":465
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         for g in self.group.values():
+ */
+
+static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_9AdiosFile_close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_g = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  PyObject *(*__pyx_t_4)(PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":466
+ * 
+ *     cpdef close(self):
+ *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         for g in self.group.values():
+ *             g.close()
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":467
+ *     cpdef close(self):
+ *         assert self.fp != NULL, 'Not an open file'
+ *         for g in self.group.values():             # <<<<<<<<<<<<<<
+ *             g.close()
+ *         adios_fclose(self.fp)
+ */
+  if (unlikely(((PyObject *)__pyx_v_self->group) == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->group); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
+    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  for (;;) {
+    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #else
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #endif
+    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #else
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #endif
+    } else {
+      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
+      if (unlikely(!__pyx_t_1)) {
+        if (PyErr_Occurred()) {
+          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+    }
+    __Pyx_XDECREF(__pyx_v_g);
+    __pyx_v_g = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "adios.pyx":468
+ *         assert self.fp != NULL, 'Not an open file'
+ *         for g in self.group.values():
+ *             g.close()             # <<<<<<<<<<<<<<
+ *         adios_fclose(self.fp)
+ *         self.fp = NULL
+ */
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_g, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios.pyx":469
+ *         for g in self.group.values():
+ *             g.close()
+ *         adios_fclose(self.fp)             # <<<<<<<<<<<<<<
+ *         self.fp = NULL
+ * 
+ */
+  adios_fclose(__pyx_v_self->fp);
+
+  /* "adios.pyx":470
+ *             g.close()
+ *         adios_fclose(self.fp)
+ *         self.fp = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef printself(self):
+ */
+  __pyx_v_self->fp = NULL;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_g);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("close (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_4close(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":465
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         for g in self.group.values():
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_4close(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":472
+ *         self.fp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='
+ */
+
+static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_9AdiosFile_printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":473
+ * 
+ *     cpdef printself(self):
+ *         assert self.fp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         print '=== AdiosFile ==='
+ *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->fp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":474
+ *     cpdef printself(self):
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='             # <<<<<<<<<<<<<<
+ *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
+ *         printAdiosFile(self.fp)
+ */
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":475
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='
+ *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)             # <<<<<<<<<<<<<<
+ *         printAdiosFile(self.fp)
+ * 
+ */
+  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->fp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__fp));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__fp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__fp));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":476
+ *         print '=== AdiosFile ==='
+ *         print '%15s : %lu' % ('fp', <unsigned long> self.fp)
+ *         printAdiosFile(self.fp)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_1 = __pyx_f_5adios_printAdiosFile(__pyx_v_self->fp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_6printself(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":472
+ *         self.fp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.fp != NULL, 'Not an open file'
+ *         print '=== AdiosFile ==='
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_6printself(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosFile *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_4name_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":428
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int groups_count
+ *     cpdef public int vars_count
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_4name___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
+  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_4name_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_4name_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_4name_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_4name_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":429
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int groups_count             # <<<<<<<<<<<<<<
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_12groups_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->groups_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_12groups_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->groups_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.groups_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":430
+ *     cpdef public bytes name
+ *     cpdef public int groups_count
+ *     cpdef public int vars_count             # <<<<<<<<<<<<<<
+ *     cpdef public int attrs_count
+ *     cpdef public int tidx_start
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_10vars_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->vars_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":431
+ *     cpdef public int groups_count
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
+ *     cpdef public int tidx_start
+ *     cpdef public int ntimesteps
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_11attrs_count___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->attrs_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":432
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count
+ *     cpdef public int tidx_start             # <<<<<<<<<<<<<<
+ *     cpdef public int ntimesteps
+ *     cpdef public int version
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_10tidx_start___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->tidx_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_10tidx_start_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->tidx_start = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.tidx_start.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":433
+ *     cpdef public int attrs_count
+ *     cpdef public int tidx_start
+ *     cpdef public int ntimesteps             # <<<<<<<<<<<<<<
+ *     cpdef public int version
+ *     cpdef public int file_size
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_10ntimesteps___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ntimesteps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_10ntimesteps_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->ntimesteps = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.ntimesteps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_7version_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":434
+ *     cpdef public int tidx_start
+ *     cpdef public int ntimesteps
+ *     cpdef public int version             # <<<<<<<<<<<<<<
+ *     cpdef public int file_size
+ *     cpdef public int endianness
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_7version___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_7version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_7version_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_7version_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->version = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.version.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_9file_size_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":435
+ *     cpdef public int ntimesteps
+ *     cpdef public int version
+ *     cpdef public int file_size             # <<<<<<<<<<<<<<
+ *     cpdef public int endianness
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_9file_size___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->file_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.file_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_9file_size_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->file_size = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.file_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_10endianness_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":436
+ *     cpdef public int version
+ *     cpdef public int file_size
+ *     cpdef public int endianness             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef public dict group
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_10endianness___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->endianness); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosFile.endianness.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_10endianness_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->endianness = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.endianness.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_9AdiosFile_5group_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group___get__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":438
+ *     cpdef public int endianness
+ * 
+ *     cpdef public dict group             # <<<<<<<<<<<<<<
+ * 
+ *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):
+ */
+
+static PyObject *__pyx_pf_5adios_9AdiosFile_5group___get__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->group));
+  __pyx_r = ((PyObject *)__pyx_v_self->group);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_5group_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_2__set__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_5group_2__set__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->group);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
+  __pyx_v_self->group = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosFile.group.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_9AdiosFile_5group_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_9AdiosFile_5group_4__del__(((struct __pyx_obj_5adios_AdiosFile *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_9AdiosFile_5group_4__del__(struct __pyx_obj_5adios_AdiosFile *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->group);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
+  __pyx_v_self->group = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct __pyx_obj_5adios_AdiosFile *__pyx_v_file = 0;
+  char *__pyx_v_name;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__name,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_file = ((struct __pyx_obj_5adios_AdiosFile *)values[0]);
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_5adios_AdiosFile, 1, "file", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup___init__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), __pyx_v_file, __pyx_v_name);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":494
+ *     cpdef public dict var
+ * 
+ *     def __init__(self, AdiosFile file, char * name):             # <<<<<<<<<<<<<<
+ *         self.file = file
+ *         self.var = {}
+ */
+
+static int __pyx_pf_5adios_10AdiosGroup___init__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, struct __pyx_obj_5adios_AdiosFile *__pyx_v_file, char *__pyx_v_name) {
+  struct __pyx_obj_5adios_AdiosVariable *__pyx_v_v = 0;
+  PyObject *__pyx_v_varname = NULL;
+  int __pyx_v_i;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "adios.pyx":495
+ * 
+ *     def __init__(self, AdiosFile file, char * name):
+ *         self.file = file             # <<<<<<<<<<<<<<
+ *         self.var = {}
+ * 
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_file));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_file));
+  __Pyx_GOTREF(__pyx_v_self->file);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->file));
+  __pyx_v_self->file = __pyx_v_file;
+
+  /* "adios.pyx":496
+ *     def __init__(self, AdiosFile file, char * name):
+ *         self.file = file
+ *         self.var = {}             # <<<<<<<<<<<<<<
+ * 
+ *         self.gp = adios_gopen(self.file.fp, name)
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
+  __pyx_v_self->var = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":498
+ *         self.var = {}
+ * 
+ *         self.gp = adios_gopen(self.file.fp, name)             # <<<<<<<<<<<<<<
+ *         assert self.gp != NULL, 'Not an open group'
+ * 
+ */
+  __pyx_v_self->gp = adios_gopen(__pyx_v_self->file->fp, __pyx_v_name);
+
+  /* "adios.pyx":499
+ * 
+ *         self.gp = adios_gopen(self.file.fp, name)
+ *         assert self.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
+ * 
+ *         self.name         = name
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":501
+ *         assert self.gp != NULL, 'Not an open group'
+ * 
+ *         self.name         = name             # <<<<<<<<<<<<<<
+ *         self.grpid        = self.gp.grpid
+ *         self.vars_count   = self.gp.vars_count
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":502
+ * 
+ *         self.name         = name
+ *         self.grpid        = self.gp.grpid             # <<<<<<<<<<<<<<
+ *         self.vars_count   = self.gp.vars_count
+ *         self.attrs_count  = self.gp.attrs_count
+ */
+  __pyx_t_2 = __pyx_v_self->gp->grpid;
+  __pyx_v_self->grpid = __pyx_t_2;
+
+  /* "adios.pyx":503
+ *         self.name         = name
+ *         self.grpid        = self.gp.grpid
+ *         self.vars_count   = self.gp.vars_count             # <<<<<<<<<<<<<<
+ *         self.attrs_count  = self.gp.attrs_count
+ *         self.timestep     = self.gp.timestep
+ */
+  __pyx_t_2 = __pyx_v_self->gp->vars_count;
+  __pyx_v_self->vars_count = __pyx_t_2;
+
+  /* "adios.pyx":504
+ *         self.grpid        = self.gp.grpid
+ *         self.vars_count   = self.gp.vars_count
+ *         self.attrs_count  = self.gp.attrs_count             # <<<<<<<<<<<<<<
+ *         self.timestep     = self.gp.timestep
+ *         self.lasttimestep = self.gp.lasttimestep
+ */
+  __pyx_t_2 = __pyx_v_self->gp->attrs_count;
+  __pyx_v_self->attrs_count = __pyx_t_2;
+
+  /* "adios.pyx":505
+ *         self.vars_count   = self.gp.vars_count
+ *         self.attrs_count  = self.gp.attrs_count
+ *         self.timestep     = self.gp.timestep             # <<<<<<<<<<<<<<
+ *         self.lasttimestep = self.gp.lasttimestep
+ * 
+ */
+  __pyx_t_2 = __pyx_v_self->gp->timestep;
+  __pyx_v_self->timestep = __pyx_t_2;
+
+  /* "adios.pyx":506
+ *         self.attrs_count  = self.gp.attrs_count
+ *         self.timestep     = self.gp.timestep
+ *         self.lasttimestep = self.gp.lasttimestep             # <<<<<<<<<<<<<<
+ * 
+ *         cdef AdiosVariable v
+ */
+  __pyx_t_2 = __pyx_v_self->gp->lasttimestep;
+  __pyx_v_self->lasttimestep = __pyx_t_2;
+
+  /* "adios.pyx":509
+ * 
+ *         cdef AdiosVariable v
+ *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:             # <<<<<<<<<<<<<<
+ *             v = AdiosVariable(self, varname)
+ *             self.var[varname] = v
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_v_self->vars_count;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+    __pyx_t_4 = __Pyx_PyBytes_FromString((__pyx_v_self->gp->var_namelist[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+  }
+  __pyx_t_4 = ((PyObject *)__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  for (;;) {
+    if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #else
+    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #endif
+    __Pyx_XDECREF(__pyx_v_varname);
+    __pyx_v_varname = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "adios.pyx":510
+ *         cdef AdiosVariable v
+ *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
+ *             v = AdiosVariable(self, varname)             # <<<<<<<<<<<<<<
+ *             self.var[varname] = v
+ * 
+ */
+    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+    __Pyx_INCREF(__pyx_v_varname);
+    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_varname);
+    __Pyx_GIVEREF(__pyx_v_varname);
+    __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_5adios_AdiosVariable)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    __Pyx_XDECREF(((PyObject *)__pyx_v_v));
+    __pyx_v_v = ((struct __pyx_obj_5adios_AdiosVariable *)__pyx_t_6);
+    __pyx_t_6 = 0;
+
+    /* "adios.pyx":511
+ *         for varname in [self.gp.var_namelist[i] for i in range(self.vars_count)]:
+ *             v = AdiosVariable(self, varname)
+ *             self.var[varname] = v             # <<<<<<<<<<<<<<
+ * 
+ *     def __del__(self):
+ */
+    if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+    if (PyDict_SetItem(((PyObject *)__pyx_v_self->var), __pyx_v_varname, ((PyObject *)__pyx_v_v)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("adios.AdiosGroup.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_v);
+  __Pyx_XDECREF(__pyx_v_varname);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_2__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":513
+ *             self.var[varname] = v
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_2__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__del__", 0);
+
+  /* "adios.pyx":514
+ * 
+ *     def __del__(self):
+ *         self.close()             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef close(self):
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":516
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.gp != NULL, 'Not an open file'
+ *         for v in self.var.values():
+ */
+
+static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_10AdiosGroup_close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_v_v = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  PyObject *(*__pyx_t_4)(PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":517
+ * 
+ *     cpdef close(self):
+ *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         for v in self.var.values():
+ *             v.close()
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":518
+ *     cpdef close(self):
+ *         assert self.gp != NULL, 'Not an open file'
+ *         for v in self.var.values():             # <<<<<<<<<<<<<<
+ *             v.close()
+ *         adios_gclose(self.gp)
+ */
+  if (unlikely(((PyObject *)__pyx_v_self->var) == Py_None)) {
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_1 = __Pyx_PyDict_Values(__pyx_v_self->var); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
+    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  for (;;) {
+    if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #else
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #endif
+    } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) {
+      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #else
+      __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      #endif
+    } else {
+      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
+      if (unlikely(!__pyx_t_1)) {
+        if (PyErr_Occurred()) {
+          if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
+          else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+    }
+    __Pyx_XDECREF(__pyx_v_v);
+    __pyx_v_v = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "adios.pyx":519
+ *         assert self.gp != NULL, 'Not an open file'
+ *         for v in self.var.values():
+ *             v.close()             # <<<<<<<<<<<<<<
+ *         adios_gclose(self.gp)
+ *         self.gp = NULL
+ */
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios.pyx":520
+ *         for v in self.var.values():
+ *             v.close()
+ *         adios_gclose(self.gp)             # <<<<<<<<<<<<<<
+ *         self.gp = NULL
+ * 
+ */
+  adios_gclose(__pyx_v_self->gp);
+
+  /* "adios.pyx":521
+ *             v.close()
+ *         adios_gclose(self.gp)
+ *         self.gp = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef printself(self):
+ */
+  __pyx_v_self->gp = NULL;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_v);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("close (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4close(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":516
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.gp != NULL, 'Not an open file'
+ *         for v in self.var.values():
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_4close(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":523
+ *         self.gp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.gp != NULL, 'Not an open file'
+ *         print '=== AdiosGroup ==='
+ */
+
+static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_10AdiosGroup_printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":524
+ * 
+ *     cpdef printself(self):
+ *         assert self.gp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         print '=== AdiosGroup ==='
+ *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->gp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":525
+ *     cpdef printself(self):
+ *         assert self.gp != NULL, 'Not an open file'
+ *         print '=== AdiosGroup ==='             # <<<<<<<<<<<<<<
+ *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
+ *         printAdiosGroup(self.gp)
+ */
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":526
+ *         assert self.gp != NULL, 'Not an open file'
+ *         print '=== AdiosGroup ==='
+ *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)             # <<<<<<<<<<<<<<
+ *         printAdiosGroup(self.gp)
+ * 
+ */
+  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->gp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__gp));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__gp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__gp));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":527
+ *         print '=== AdiosGroup ==='
+ *         print '%15s : %lu' % ('gp', <unsigned long> self.gp)
+ *         printAdiosGroup(self.gp)             # <<<<<<<<<<<<<<
+ * 
+ * cdef class AdiosVariable:
+ */
+  __pyx_t_1 = __pyx_f_5adios_printAdiosGroup(__pyx_v_self->gp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_7printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_6printself(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":523
+ *         self.gp = NULL
+ * 
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.gp != NULL, 'Not an open file'
+ *         print '=== AdiosGroup ==='
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_6printself(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosGroup *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_4name_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":485
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int grpid
+ *     cpdef public int vars_count
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_4name___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
+  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_4name_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_4name_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_4name_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_4name_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":486
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int grpid             # <<<<<<<<<<<<<<
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_5grpid___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->grpid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_5grpid_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->grpid = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.grpid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":487
+ *     cpdef public bytes name
+ *     cpdef public int grpid
+ *     cpdef public int vars_count             # <<<<<<<<<<<<<<
+ *     cpdef public int attrs_count
+ *     cpdef public int timestep
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_10vars_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->vars_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_10vars_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->vars_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.vars_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":488
+ *     cpdef public int grpid
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count             # <<<<<<<<<<<<<<
+ *     cpdef public int timestep
+ *     cpdef public int lasttimestep
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_11attrs_count___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->attrs_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_11attrs_count_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->attrs_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.attrs_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":489
+ *     cpdef public int vars_count
+ *     cpdef public int attrs_count
+ *     cpdef public int timestep             # <<<<<<<<<<<<<<
+ *     cpdef public int lasttimestep
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_8timestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_8timestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->timestep = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.timestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":490
+ *     cpdef public int attrs_count
+ *     cpdef public int timestep
+ *     cpdef public int lasttimestep             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef public dict var
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_12lasttimestep___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->lasttimestep); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_12lasttimestep_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->lasttimestep = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.lasttimestep.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_10AdiosGroup_3var_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var___get__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":492
+ *     cpdef public int lasttimestep
+ * 
+ *     cpdef public dict var             # <<<<<<<<<<<<<<
+ * 
+ *     def __init__(self, AdiosFile file, char * name):
+ */
+
+static PyObject *__pyx_pf_5adios_10AdiosGroup_3var___get__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->var));
+  __pyx_r = ((PyObject *)__pyx_v_self->var);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_3var_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_2__set__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_3var_2__set__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
+  __pyx_v_self->var = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosGroup.var.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_10AdiosGroup_3var_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_10AdiosGroup_3var_4__del__(((struct __pyx_obj_5adios_AdiosGroup *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_10AdiosGroup_3var_4__del__(struct __pyx_obj_5adios_AdiosGroup *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->var);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->var));
+  __pyx_v_self->var = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group = 0;
+  char *__pyx_v_name;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__group,&__pyx_n_s__name,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__group)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__name)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_group = ((struct __pyx_obj_5adios_AdiosGroup *)values[0]);
+    __pyx_v_name = __Pyx_PyObject_AsString(values[1]); if (unlikely((!__pyx_v_name) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_5adios_AdiosGroup, 1, "group", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable___init__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_group, __pyx_v_name);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":543
+ *     cpdef public int characteristics_count
+ * 
+ *     def __init__(self, AdiosGroup group, char * name):             # <<<<<<<<<<<<<<
+ *         self.group = group
+ *         self.vp = NULL
+ */
+
+static int __pyx_pf_5adios_13AdiosVariable___init__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, struct __pyx_obj_5adios_AdiosGroup *__pyx_v_group, char *__pyx_v_name) {
+  int __pyx_v_i;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "adios.pyx":544
+ * 
+ *     def __init__(self, AdiosGroup group, char * name):
+ *         self.group = group             # <<<<<<<<<<<<<<
+ *         self.vp = NULL
+ * 
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_group));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_group));
+  __Pyx_GOTREF(__pyx_v_self->group);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->group));
+  __pyx_v_self->group = __pyx_v_group;
+
+  /* "adios.pyx":545
+ *     def __init__(self, AdiosGroup group, char * name):
+ *         self.group = group
+ *         self.vp = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         self.vp = adios_inq_var(self.group.gp, name)
+ */
+  __pyx_v_self->vp = NULL;
+
+  /* "adios.pyx":547
+ *         self.vp = NULL
+ * 
+ *         self.vp = adios_inq_var(self.group.gp, name)             # <<<<<<<<<<<<<<
+ *         assert self.group.gp != NULL, 'Not an open group'
+ * 
+ */
+  __pyx_v_self->vp = adios_inq_var(__pyx_v_self->group->gp, __pyx_v_name);
+
+  /* "adios.pyx":548
+ * 
+ *         self.vp = adios_inq_var(self.group.gp, name)
+ *         assert self.group.gp != NULL, 'Not an open group'             # <<<<<<<<<<<<<<
+ * 
+ *         self.name                  = name
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->group->gp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_15));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":550
+ *         assert self.group.gp != NULL, 'Not an open group'
+ * 
+ *         self.name                  = name             # <<<<<<<<<<<<<<
+ *         self.varid                 = self.vp.varid
+ *         self.type                  = adios2nptype(self.vp.type)
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":551
+ * 
+ *         self.name                  = name
+ *         self.varid                 = self.vp.varid             # <<<<<<<<<<<<<<
+ *         self.type                  = adios2nptype(self.vp.type)
+ *         self.ndim                  = self.vp.ndim
+ */
+  __pyx_t_2 = __pyx_v_self->vp->varid;
+  __pyx_v_self->varid = __pyx_t_2;
+
+  /* "adios.pyx":552
+ *         self.name                  = name
+ *         self.varid                 = self.vp.varid
+ *         self.type                  = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
+ *         self.ndim                  = self.vp.ndim
+ *         self.timedim               = self.vp.timedim
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":553
+ *         self.varid                 = self.vp.varid
+ *         self.type                  = adios2nptype(self.vp.type)
+ *         self.ndim                  = self.vp.ndim             # <<<<<<<<<<<<<<
+ *         self.timedim               = self.vp.timedim
+ *         self.characteristics_count = self.vp.characteristics_count
+ */
+  __pyx_t_2 = __pyx_v_self->vp->ndim;
+  __pyx_v_self->ndim = __pyx_t_2;
+
+  /* "adios.pyx":554
+ *         self.type                  = adios2nptype(self.vp.type)
+ *         self.ndim                  = self.vp.ndim
+ *         self.timedim               = self.vp.timedim             # <<<<<<<<<<<<<<
+ *         self.characteristics_count = self.vp.characteristics_count
+ * 
+ */
+  __pyx_t_2 = __pyx_v_self->vp->timedim;
+  __pyx_v_self->timedim = __pyx_t_2;
+
+  /* "adios.pyx":555
+ *         self.ndim                  = self.vp.ndim
+ *         self.timedim               = self.vp.timedim
+ *         self.characteristics_count = self.vp.characteristics_count             # <<<<<<<<<<<<<<
+ * 
+ *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ */
+  __pyx_t_2 = __pyx_v_self->vp->characteristics_count;
+  __pyx_v_self->characteristics_count = __pyx_t_2;
+
+  /* "adios.pyx":557
+ *         self.characteristics_count = self.vp.characteristics_count
+ * 
+ *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])             # <<<<<<<<<<<<<<
+ * 
+ *     def __del__(self):
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+    __pyx_t_4 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __pyx_t_4 = ((PyObject *)PyList_AsTuple(((PyObject*)__pyx_t_1))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
+  __pyx_v_self->dims = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("adios.AdiosVariable.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_3__del__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_2__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":559
+ *         self.dims = tuple([self.vp.dims[i] for i in range(self.vp.ndim)])
+ * 
+ *     def __del__(self):             # <<<<<<<<<<<<<<
+ *         self.close()
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_2__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__del__", 0);
+
+  /* "adios.pyx":560
+ * 
+ *     def __del__(self):
+ *         self.close()             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef close(self):
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":562
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open file'
+ *         adios_free_varinfo(self.vp)
+ */
+
+static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_13AdiosVariable_close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":563
+ * 
+ *     cpdef close(self):
+ *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         adios_free_varinfo(self.vp)
+ *         self.vp = NULL
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":564
+ *     cpdef close(self):
+ *         assert self.vp != NULL, 'Not an open file'
+ *         adios_free_varinfo(self.vp)             # <<<<<<<<<<<<<<
+ *         self.vp = NULL
+ * 
+ */
+  adios_free_varinfo(__pyx_v_self->vp);
+
+  /* "adios.pyx":565
+ *         assert self.vp != NULL, 'Not an open file'
+ *         adios_free_varinfo(self.vp)
+ *         self.vp = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     cpdef read(self, tuple offset = (), tuple count = ()):
+ */
+  __pyx_v_self->vp = NULL;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_5close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("close (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4close(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":562
+ *         self.close()
+ * 
+ *     cpdef close(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open file'
+ *         adios_free_varinfo(self.vp)
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4close(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("close", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":567
+ *         self.vp = NULL
+ * 
+ *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
+ *         cdef type ntype = adios2nptype(self.vp.type)
+ *         assert ntype is not None, 'Data type is not supported yet'
+ */
+
+static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_f_5adios_13AdiosVariable_read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args) {
+  PyObject *__pyx_v_offset = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_count = ((PyObject*)__pyx_empty_tuple);
+  PyObject *__pyx_v_ntype = 0;
+  PyObject *__pyx_v_lshape = 0;
+  PyArrayObject *__pyx_v_npshape = 0;
+  PyArrayObject *__pyx_v_npoffset = 0;
+  PyArrayObject *__pyx_v_npcount = 0;
+  PyArrayObject *__pyx_v_var = 0;
+  int64_t __pyx_v_nbytes;
+  int __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read", 0);
+  if (__pyx_optional_args) {
+    if (__pyx_optional_args->__pyx_n > 0) {
+      __pyx_v_offset = __pyx_optional_args->offset;
+      if (__pyx_optional_args->__pyx_n > 1) {
+        __pyx_v_count = __pyx_optional_args->count;
+      }
+    }
+  }
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__read); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_INCREF(((PyObject *)__pyx_v_offset));
+      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_offset));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
+      __Pyx_INCREF(((PyObject *)__pyx_v_count));
+      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_count));
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
+      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+      __pyx_r = __pyx_t_3;
+      __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":568
+ * 
+ *     cpdef read(self, tuple offset = (), tuple count = ()):
+ *         cdef type ntype = adios2nptype(self.vp.type)             # <<<<<<<<<<<<<<
+ *         assert ntype is not None, 'Data type is not supported yet'
+ * 
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_5adios_adios2nptype(__pyx_v_self->vp->type, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ntype = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":569
+ *     cpdef read(self, tuple offset = (), tuple count = ()):
+ *         cdef type ntype = adios2nptype(self.vp.type)
+ *         assert ntype is not None, 'Data type is not supported yet'             # <<<<<<<<<<<<<<
+ * 
+ *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  __pyx_t_4 = (__pyx_v_ntype != ((PyObject*)Py_None));
+  if (unlikely(!(__pyx_t_4 != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_17));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":571
+ *         assert ntype is not None, 'Data type is not supported yet'
+ * 
+ *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]             # <<<<<<<<<<<<<<
+ *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = __pyx_v_self->vp->ndim;
+  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+    __pyx_v_i = __pyx_t_6;
+    __pyx_t_3 = __Pyx_PyInt_to_py_uint64_t((__pyx_v_self->vp->dims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  }
+  __pyx_v_lshape = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":572
+ * 
+ *         cdef list lshape = [self.vp.dims[i] for i in range(self.vp.ndim)]
+ *         cdef np.ndarray npshape = np.array(lshape, dtype=np.int64)             # <<<<<<<<<<<<<<
+ * 
+ *         cdef np.ndarray npoffset
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s__array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_lshape));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_lshape));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_lshape));
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__int64); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_npshape = ((PyArrayObject *)__pyx_t_8);
+  __pyx_t_8 = 0;
+
+  /* "adios.pyx":575
+ * 
+ *         cdef np.ndarray npoffset
+ *         if len(offset) == 0:             # <<<<<<<<<<<<<<
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)
+ */
+  if (unlikely(((PyObject *)__pyx_v_offset) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_offset)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
+  if (__pyx_t_4) {
+
+    /* "adios.pyx":576
+ *         cdef np.ndarray npoffset
+ *         if len(offset) == 0:
+ *             npoffset = npshape.copy()             # <<<<<<<<<<<<<<
+ *             npoffset.fill(0)
+ *         else:
+ */
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npshape), __pyx_n_s__copy); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    __pyx_t_2 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_2);
+    __pyx_t_2 = 0;
+
+    /* "adios.pyx":577
+ *         if len(offset) == 0:
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)             # <<<<<<<<<<<<<<
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)
+ */
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_npoffset), __pyx_n_s__fill); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_8 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_18), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "adios.pyx":579
+ *             npoffset.fill(0)
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)             # <<<<<<<<<<<<<<
+ * 
+ *         cdef np.ndarray npcount
+ */
+    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_INCREF(((PyObject *)__pyx_v_offset));
+    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_offset));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_offset));
+    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__int64); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_7 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npoffset = ((PyArrayObject *)__pyx_t_7);
+    __pyx_t_7 = 0;
+  }
+  __pyx_L5:;
+
+  /* "adios.pyx":582
+ * 
+ *         cdef np.ndarray npcount
+ *         if len(count) == 0:             # <<<<<<<<<<<<<<
+ *             npcount = npshape - npoffset
+ *         else:
+ */
+  if (unlikely(((PyObject *)__pyx_v_count) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_9 = PyTuple_GET_SIZE(((PyObject *)__pyx_v_count)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((__pyx_t_9 == 0) != 0);
+  if (__pyx_t_4) {
+
+    /* "adios.pyx":583
+ *         cdef np.ndarray npcount
+ *         if len(count) == 0:
+ *             npcount = npshape - npoffset             # <<<<<<<<<<<<<<
+ *         else:
+ *             npcount = np.array(count, dtype=np.int64)
+ */
+    __pyx_t_7 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_7);
+    __pyx_t_7 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "adios.pyx":585
+ *             npcount = npshape - npoffset
+ *         else:
+ *             npcount = np.array(count, dtype=np.int64)             # <<<<<<<<<<<<<<
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ */
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_INCREF(((PyObject *)__pyx_v_count));
+    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_count));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_count));
+    __pyx_t_8 = PyDict_New(); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_8));
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__int64); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (PyDict_SetItem(__pyx_t_8, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_8)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_npcount = ((PyArrayObject *)__pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+  __pyx_L6:;
+
+  /* "adios.pyx":587
+ *             npcount = np.array(count, dtype=np.int64)
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'             # <<<<<<<<<<<<<<
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
+ *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npoffset->nd) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_19));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":588
+ * 
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'             # <<<<<<<<<<<<<<
+ *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+ * 
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_npshape->nd == __pyx_v_npcount->nd) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_20));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":589
+ *         assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+ *         assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
+ *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'             # <<<<<<<<<<<<<<
+ * 
+ *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  __pyx_t_3 = PyNumber_Subtract(((PyObject *)__pyx_v_npshape), ((PyObject *)__pyx_v_npoffset)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, ((PyObject *)__pyx_v_npcount), Py_GT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__all); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_4)) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_21));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":591
+ *         assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+ * 
+ *         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)             # <<<<<<<<<<<<<<
+ *         cdef int64_t nbytes = adios_read_var_byid(
+ *             self.group.gp,
+ */
+  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__np); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_INCREF(((PyObject *)__pyx_v_npcount));
+  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_npcount));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_npcount));
+  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
+  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), ((PyObject *)__pyx_v_ntype)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_var = ((PyArrayObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "adios.pyx":597
+ *             <uint64_t *> npoffset.data,
+ *             <uint64_t *> npcount.data,
+ *             <void *> var.data             # <<<<<<<<<<<<<<
+ *             )
+ * 
+ */
+  __pyx_v_nbytes = adios_read_var_byid(__pyx_v_self->group->gp, __pyx_v_self->vp->varid, ((uint64_t *)__pyx_v_npoffset->data), ((uint64_t *)__pyx_v_npcount->data), ((void *)__pyx_v_var->data));
+
+  /* "adios.pyx":600
+ *             )
+ * 
+ *         if nbytes < 0:             # <<<<<<<<<<<<<<
+ *             print "[WARNING] bytes read :", nbytes
+ * 
+ */
+  __pyx_t_4 = ((__pyx_v_nbytes < 0) != 0);
+  if (__pyx_t_4) {
+
+    /* "adios.pyx":601
+ * 
+ *         if nbytes < 0:
+ *             print "[WARNING] bytes read :", nbytes             # <<<<<<<<<<<<<<
+ * 
+ *         return var
+ */
+    __pyx_t_1 = __Pyx_PyInt_to_py_int64_t(__pyx_v_nbytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_INCREF(((PyObject *)__pyx_kp_s_22));
+    PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_s_22));
+    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_22));
+    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_1);
+    __pyx_t_1 = 0;
+    if (__Pyx_Print(0, ((PyObject *)__pyx_t_7), 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "adios.pyx":603
+ *             print "[WARNING] bytes read :", nbytes
+ * 
+ *         return var             # <<<<<<<<<<<<<<
+ * 
+ *     """ Print self """
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_var));
+  __pyx_r = ((PyObject *)__pyx_v_var);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ntype);
+  __Pyx_XDECREF(__pyx_v_lshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npshape);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npoffset);
+  __Pyx_XDECREF((PyObject *)__pyx_v_npcount);
+  __Pyx_XDECREF((PyObject *)__pyx_v_var);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_7read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_offset = 0;
+  PyObject *__pyx_v_count = 0;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("read (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__offset,&__pyx_n_s__count,0};
+    PyObject* values[2] = {0,0};
+
+    /* "adios.pyx":567
+ *         self.vp = NULL
+ * 
+ *     cpdef read(self, tuple offset = (), tuple count = ()):             # <<<<<<<<<<<<<<
+ *         cdef type ntype = adios2nptype(self.vp.type)
+ *         assert ntype is not None, 'Data type is not supported yet'
+ */
+    values[0] = ((PyObject*)__pyx_empty_tuple);
+    values[1] = ((PyObject*)__pyx_empty_tuple);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__offset);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__count);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_offset = ((PyObject*)values[0]);
+    __pyx_v_count = ((PyObject*)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("read", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_offset), (&PyTuple_Type), 1, "offset", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyTuple_Type), 1, "count", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_6read(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), __pyx_v_offset, __pyx_v_count);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_6read(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_count) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  struct __pyx_opt_args_5adios_13AdiosVariable_read __pyx_t_2;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("read", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2.__pyx_n = 2;
+  __pyx_t_2.offset = __pyx_v_offset;
+  __pyx_t_2.count = __pyx_v_count;
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->read(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":606
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open file'
+ *         print '=== AdiosVariable ==='
+ */
+
+static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_f_5adios_13AdiosVariable_printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, int __pyx_skip_dispatch) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s__printself); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself)) {
+      __Pyx_XDECREF(__pyx_r);
+      __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_r = __pyx_t_2;
+      __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L0;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+
+  /* "adios.pyx":607
+ *     """ Print self """
+ *     cpdef printself(self):
+ *         assert self.vp != NULL, 'Not an open file'             # <<<<<<<<<<<<<<
+ *         print '=== AdiosVariable ==='
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!((__pyx_v_self->vp != NULL) != 0))) {
+    PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_s_11));
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  #endif
+
+  /* "adios.pyx":608
+ *     cpdef printself(self):
+ *         assert self.vp != NULL, 'Not an open file'
+ *         print '=== AdiosVariable ==='             # <<<<<<<<<<<<<<
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+ *         printAdiosVariable(self.vp)
+ */
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_kp_s_23)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":609
+ *         assert self.vp != NULL, 'Not an open file'
+ *         print '=== AdiosVariable ==='
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)             # <<<<<<<<<<<<<<
+ *         printAdiosVariable(self.vp)
+ */
+  __pyx_t_1 = PyLong_FromUnsignedLong(((unsigned long)__pyx_v_self->vp)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__vp));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__vp));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__vp));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  if (__Pyx_PrintOne(0, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+
+  /* "adios.pyx":610
+ *         print '=== AdiosVariable ==='
+ *         print '%15s : %lu' % ('vp', <unsigned long> self.vp)
+ *         printAdiosVariable(self.vp)             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_1 = __pyx_f_5adios_printAdiosVariable(__pyx_v_self->vp); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_9printself(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printself (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_8printself(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":606
+ * 
+ *     """ Print self """
+ *     cpdef printself(self):             # <<<<<<<<<<<<<<
+ *         assert self.vp != NULL, 'Not an open file'
+ *         print '=== AdiosVariable ==='
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_8printself(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("printself", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_5adios_AdiosVariable *)__pyx_v_self->__pyx_vtab)->printself(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.printself", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4name_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":535
+ * 
+ *     """ Public Memeber """
+ *     cpdef public bytes name             # <<<<<<<<<<<<<<
+ *     cpdef public int varid
+ *     cpdef public type type
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4name___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->name));
+  __pyx_r = ((PyObject *)__pyx_v_self->name);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4name_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyBytes_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4name_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4name_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4name_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->name));
+  __pyx_v_self->name = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_5varid_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":536
+ *     """ Public Memeber """
+ *     cpdef public bytes name
+ *     cpdef public int varid             # <<<<<<<<<<<<<<
+ *     cpdef public type type
+ *     cpdef public int ndim
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_5varid___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->varid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.varid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_5varid_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->varid = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.varid.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4type_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":537
+ *     cpdef public bytes name
+ *     cpdef public int varid
+ *     cpdef public type type             # <<<<<<<<<<<<<<
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4type___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->type));
+  __pyx_r = ((PyObject *)__pyx_v_self->type);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4type_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyType_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected type, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4type_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4type_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4type_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->type);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->type));
+  __pyx_v_self->type = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":538
+ *     cpdef public int varid
+ *     cpdef public type type
+ *     cpdef public int ndim             # <<<<<<<<<<<<<<
+ *     cpdef public tuple dims
+ *     cpdef public int timedim
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4ndim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4ndim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->ndim = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.ndim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_4dims_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":539
+ *     cpdef public type type
+ *     cpdef public int ndim
+ *     cpdef public tuple dims             # <<<<<<<<<<<<<<
+ *     cpdef public int timedim
+ *     cpdef public int characteristics_count
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_4dims___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self->dims));
+  __pyx_r = ((PyObject *)__pyx_v_self->dims);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4dims_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_v_value)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
+  __pyx_v_self->dims = ((PyObject*)__pyx_v_value);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.dims.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_4dims_4__del__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->dims);
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->dims));
+  __pyx_v_self->dims = ((PyObject*)Py_None);
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":540
+ *     cpdef public int ndim
+ *     cpdef public tuple dims
+ *     cpdef public int timedim             # <<<<<<<<<<<<<<
+ *     cpdef public int characteristics_count
+ * 
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_7timedim___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->timedim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_7timedim_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->timedim = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.timedim.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "adios.pyx":541
+ *     cpdef public tuple dims
+ *     cpdef public int timedim
+ *     cpdef public int characteristics_count             # <<<<<<<<<<<<<<
+ * 
+ *     def __init__(self, AdiosGroup group, char * name):
+ */
+
+static PyObject *__pyx_pf_5adios_13AdiosVariable_21characteristics_count___get__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_self->characteristics_count); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(((struct __pyx_obj_5adios_AdiosVariable *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5adios_13AdiosVariable_21characteristics_count_2__set__(struct __pyx_obj_5adios_AdiosVariable *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->characteristics_count = __pyx_t_1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("adios.AdiosVariable.characteristics_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":194
+ *         # experimental exception made for __getbuffer__ and __releasebuffer__
+ *         # -- the details of this may change.
+ *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
+
+static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_copy_shape;
+  int __pyx_v_i;
+  int __pyx_v_ndim;
+  int __pyx_v_endian_detector;
+  int __pyx_v_little_endian;
+  int __pyx_v_t;
+  char *__pyx_v_f;
+  PyArray_Descr *__pyx_v_descr = 0;
+  int __pyx_v_offset;
+  int __pyx_v_hasfields;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  char *__pyx_t_9;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__getbuffer__", 0);
+  if (__pyx_v_info != NULL) {
+    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(__pyx_v_info->obj);
+  }
+
+  /* "numpy.pxd":200
+ *             # of flags
+ * 
+ *             if info == NULL: return             # <<<<<<<<<<<<<<
+ * 
+ *             cdef int copy_shape, i, ndim
+ */
+  __pyx_t_1 = ((__pyx_v_info == NULL) != 0);
+  if (__pyx_t_1) {
+    __pyx_r = 0;
+    goto __pyx_L0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "numpy.pxd":203
+ * 
+ *             cdef int copy_shape, i, ndim
+ *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
+ *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ * 
+ */
+  __pyx_v_endian_detector = 1;
+
+  /* "numpy.pxd":204
+ *             cdef int copy_shape, i, ndim
+ *             cdef int endian_detector = 1
+ *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
+ * 
+ *             ndim = PyArray_NDIM(self)
+ */
+  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+
+  /* "numpy.pxd":206
+ *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ * 
+ *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
+
+  /* "numpy.pxd":208
+ *             ndim = PyArray_NDIM(self)
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 copy_shape = 1
+ *             else:
+ */
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":209
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 copy_shape = 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 copy_shape = 0
+ */
+    __pyx_v_copy_shape = 1;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":211
+ *                 copy_shape = 1
+ *             else:
+ *                 copy_shape = 0             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ */
+    __pyx_v_copy_shape = 0;
+  }
+  __pyx_L4:;
+
+  /* "numpy.pxd":213
+ *                 copy_shape = 0
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not C contiguous")
+ */
+  __pyx_t_1 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":214
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError(u"ndarray is not C contiguous")
+ * 
+ */
+    __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0);
+    __pyx_t_3 = __pyx_t_2;
+  } else {
+    __pyx_t_3 = __pyx_t_1;
+  }
+  if (__pyx_t_3) {
+
+    /* "numpy.pxd":215
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ */
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_25), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "numpy.pxd":217
+ *                 raise ValueError(u"ndarray is not C contiguous")
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not Fortran contiguous")
+ */
+  __pyx_t_3 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
+  if (__pyx_t_3) {
+
+    /* "numpy.pxd":218
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError(u"ndarray is not Fortran contiguous")
+ * 
+ */
+    __pyx_t_1 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0);
+    __pyx_t_2 = __pyx_t_1;
+  } else {
+    __pyx_t_2 = __pyx_t_3;
+  }
+  if (__pyx_t_2) {
+
+    /* "numpy.pxd":219
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             info.buf = PyArray_DATA(self)
+ */
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_27), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "numpy.pxd":221
+ *                 raise ValueError(u"ndarray is not Fortran contiguous")
+ * 
+ *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
+ *             info.ndim = ndim
+ *             if copy_shape:
+ */
+  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
+
+  /* "numpy.pxd":222
+ * 
+ *             info.buf = PyArray_DATA(self)
+ *             info.ndim = ndim             # <<<<<<<<<<<<<<
+ *             if copy_shape:
+ *                 # Allocate new buffer for strides and shape info.
+ */
+  __pyx_v_info->ndim = __pyx_v_ndim;
+
+  /* "numpy.pxd":223
+ *             info.buf = PyArray_DATA(self)
+ *             info.ndim = ndim
+ *             if copy_shape:             # <<<<<<<<<<<<<<
+ *                 # Allocate new buffer for strides and shape info.
+ *                 # This is allocated as one block, strides first.
+ */
+  __pyx_t_2 = (__pyx_v_copy_shape != 0);
+  if (__pyx_t_2) {
+
+    /* "numpy.pxd":226
+ *                 # Allocate new buffer for strides and shape info.
+ *                 # This is allocated as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
+
+    /* "numpy.pxd":227
+ *                 # This is allocated as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
+ *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ */
+    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
+
+    /* "numpy.pxd":228
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):             # <<<<<<<<<<<<<<
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ */
+    __pyx_t_5 = __pyx_v_ndim;
+    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+      __pyx_v_i = __pyx_t_6;
+
+      /* "numpy.pxd":229
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ */
+      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
+
+      /* "numpy.pxd":230
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ */
+      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
+    }
+    goto __pyx_L7;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":232
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
+
+    /* "numpy.pxd":233
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ */
+    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
+  }
+  __pyx_L7:;
+
+  /* "numpy.pxd":234
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
+ */
+  __pyx_v_info->suboffsets = NULL;
+
+  /* "numpy.pxd":235
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
+ * 
+ */
+  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
+
+  /* "numpy.pxd":236
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
+ * 
+ *             cdef int t
+ */
+  __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
+
+  /* "numpy.pxd":239
+ * 
+ *             cdef int t
+ *             cdef char* f = NULL             # <<<<<<<<<<<<<<
+ *             cdef dtype descr = self.descr
+ *             cdef list stack
+ */
+  __pyx_v_f = NULL;
+
+  /* "numpy.pxd":240
+ *             cdef int t
+ *             cdef char* f = NULL
+ *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
+ *             cdef list stack
+ *             cdef int offset
+ */
+  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
+  __Pyx_INCREF(__pyx_t_4);
+  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "numpy.pxd":244
+ *             cdef int offset
+ * 
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ * 
+ *             if not hasfields and not copy_shape:
+ */
+  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
+
+  /* "numpy.pxd":246
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
+ * 
+ *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
+ *                 # do not call releasebuffer
+ *                 info.obj = None
+ */
+  __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((!(__pyx_v_copy_shape != 0)) != 0);
+    __pyx_t_1 = __pyx_t_3;
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+  }
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":248
+ *             if not hasfields and not copy_shape:
+ *                 # do not call releasebuffer
+ *                 info.obj = None             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # need to call releasebuffer
+ */
+    __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(Py_None);
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = Py_None;
+    goto __pyx_L10;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":251
+ *             else:
+ *                 # need to call releasebuffer
+ *                 info.obj = self             # <<<<<<<<<<<<<<
+ * 
+ *             if not hasfields:
+ */
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+  }
+  __pyx_L10:;
+
+  /* "numpy.pxd":253
+ *                 info.obj = self
+ * 
+ *             if not hasfields:             # <<<<<<<<<<<<<<
+ *                 t = descr.type_num
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ */
+  __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":254
+ * 
+ *             if not hasfields:
+ *                 t = descr.type_num             # <<<<<<<<<<<<<<
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ *                     (descr.byteorder == c'<' and not little_endian)):
+ */
+    __pyx_t_5 = __pyx_v_descr->type_num;
+    __pyx_v_t = __pyx_t_5;
+
+    /* "numpy.pxd":255
+ *             if not hasfields:
+ *                 t = descr.type_num
+ *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
+ *                     (descr.byteorder == c'<' and not little_endian)):
+ *                     raise ValueError(u"Non-native byte order not supported")
+ */
+    __pyx_t_1 = ((__pyx_v_descr->byteorder == '>') != 0);
+    if (__pyx_t_1) {
+      __pyx_t_2 = (__pyx_v_little_endian != 0);
+    } else {
+      __pyx_t_2 = __pyx_t_1;
+    }
+    if (!__pyx_t_2) {
+
+      /* "numpy.pxd":256
+ *                 t = descr.type_num
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
+ *                     raise ValueError(u"Non-native byte order not supported")
+ *                 if   t == NPY_BYTE:        f = "b"
+ */
+      __pyx_t_1 = ((__pyx_v_descr->byteorder == '<') != 0);
+      if (__pyx_t_1) {
+        __pyx_t_3 = ((!(__pyx_v_little_endian != 0)) != 0);
+        __pyx_t_7 = __pyx_t_3;
+      } else {
+        __pyx_t_7 = __pyx_t_1;
+      }
+      __pyx_t_1 = __pyx_t_7;
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+    }
+    if (__pyx_t_1) {
+
+      /* "numpy.pxd":257
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ *                     (descr.byteorder == c'<' and not little_endian)):
+ *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ */
+      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L12;
+    }
+    __pyx_L12:;
+
+    /* "numpy.pxd":274
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+    switch (__pyx_v_t) {
+
+      /* "numpy.pxd":258
+ *                     (descr.byteorder == c'<' and not little_endian)):
+ *                     raise ValueError(u"Non-native byte order not supported")
+ *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ */
+      case NPY_BYTE:
+      __pyx_v_f = __pyx_k__b;
+      break;
+
+      /* "numpy.pxd":259
+ *                     raise ValueError(u"Non-native byte order not supported")
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ */
+      case NPY_UBYTE:
+      __pyx_v_f = __pyx_k__B;
+      break;
+
+      /* "numpy.pxd":260
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ */
+      case NPY_SHORT:
+      __pyx_v_f = __pyx_k__h;
+      break;
+
+      /* "numpy.pxd":261
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
+ */
+      case NPY_USHORT:
+      __pyx_v_f = __pyx_k__H;
+      break;
+
+      /* "numpy.pxd":262
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ */
+      case NPY_INT:
+      __pyx_v_f = __pyx_k__i;
+      break;
+
+      /* "numpy.pxd":263
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ */
+      case NPY_UINT:
+      __pyx_v_f = __pyx_k__I;
+      break;
+
+      /* "numpy.pxd":264
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ */
+      case NPY_LONG:
+      __pyx_v_f = __pyx_k__l;
+      break;
+
+      /* "numpy.pxd":265
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ */
+      case NPY_ULONG:
+      __pyx_v_f = __pyx_k__L;
+      break;
+
+      /* "numpy.pxd":266
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ */
+      case NPY_LONGLONG:
+      __pyx_v_f = __pyx_k__q;
+      break;
+
+      /* "numpy.pxd":267
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ */
+      case NPY_ULONGLONG:
+      __pyx_v_f = __pyx_k__Q;
+      break;
+
+      /* "numpy.pxd":268
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ */
+      case NPY_FLOAT:
+      __pyx_v_f = __pyx_k__f;
+      break;
+
+      /* "numpy.pxd":269
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ */
+      case NPY_DOUBLE:
+      __pyx_v_f = __pyx_k__d;
+      break;
+
+      /* "numpy.pxd":270
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ */
+      case NPY_LONGDOUBLE:
+      __pyx_v_f = __pyx_k__g;
+      break;
+
+      /* "numpy.pxd":271
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ */
+      case NPY_CFLOAT:
+      __pyx_v_f = __pyx_k__Zf;
+      break;
+
+      /* "numpy.pxd":272
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"
+ */
+      case NPY_CDOUBLE:
+      __pyx_v_f = __pyx_k__Zd;
+      break;
+
+      /* "numpy.pxd":273
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ */
+      case NPY_CLONGDOUBLE:
+      __pyx_v_f = __pyx_k__Zg;
+      break;
+
+      /* "numpy.pxd":274
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      case NPY_OBJECT:
+      __pyx_v_f = __pyx_k__O;
+      break;
+      default:
+
+      /* "numpy.pxd":276
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *                 info.format = f
+ *                 return
+ */
+      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
+      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
+      __pyx_t_8 = 0;
+      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      break;
+    }
+
+    /* "numpy.pxd":277
+ *                 else:
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f             # <<<<<<<<<<<<<<
+ *                 return
+ *             else:
+ */
+    __pyx_v_info->format = __pyx_v_f;
+
+    /* "numpy.pxd":278
+ *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f
+ *                 return             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+    goto __pyx_L11;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":280
+ *                 return
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
+ *                 info.format[0] = c'^' # Native data types, manual alignment
+ *                 offset = 0
+ */
+    __pyx_v_info->format = ((char *)malloc(255));
+
+    /* "numpy.pxd":281
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
+ *                 offset = 0
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ */
+    (__pyx_v_info->format[0]) = '^';
+
+    /* "numpy.pxd":282
+ *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
+ *                 info.format[0] = c'^' # Native data types, manual alignment
+ *                 offset = 0             # <<<<<<<<<<<<<<
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ *                                       info.format + _buffer_format_string_len,
+ */
+    __pyx_v_offset = 0;
+
+    /* "numpy.pxd":285
+ *                 f = _util_dtypestring(descr, info.format + 1,
+ *                                       info.format + _buffer_format_string_len,
+ *                                       &offset)             # <<<<<<<<<<<<<<
+ *                 f[0] = c'\0' # Terminate format string
+ * 
+ */
+    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_f = __pyx_t_9;
+
+    /* "numpy.pxd":286
+ *                                       info.format + _buffer_format_string_len,
+ *                                       &offset)
+ *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ */
+    (__pyx_v_f[0]) = '\x00';
+  }
+  __pyx_L11:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+  }
+  goto __pyx_L2;
+  __pyx_L0:;
+  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
+    __Pyx_GOTREF(Py_None);
+    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
+  }
+  __pyx_L2:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
+static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
+  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "numpy.pxd":288
+ *                 f[0] = c'\0' # Terminate format string
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
+static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
+
+  /* "numpy.pxd":289
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":290
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)
+ */
+    free(__pyx_v_info->format);
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "numpy.pxd":291
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.strides)
+ *                 # info.shape was stored after info.strides in the same block
+ */
+  __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":292
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
+ *                 # info.shape was stored after info.strides in the same block
+ * 
+ */
+    free(__pyx_v_info->strides);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "numpy.pxd":768
+ * ctypedef npy_cdouble     complex_t
+ * 
+ * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
+
+  /* "numpy.pxd":769
+ * 
+ * cdef inline object PyArray_MultiIterNew1(a):
+ *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":771
+ *     return PyArray_MultiIterNew(1, <void*>a)
+ * 
+ * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
+
+  /* "numpy.pxd":772
+ * 
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":774
+ *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
+
+  /* "numpy.pxd":775
+ * 
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":777
+ *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
+
+  /* "numpy.pxd":778
+ * 
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":780
+ *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
+
+  /* "numpy.pxd":781
+ * 
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":783
+ *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
+ * 
+ * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
+ *     # Recursive utility function used in __getbuffer__ to get format
+ *     # string. The new location in the format string is returned.
+ */
+
+static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
+  PyArray_Descr *__pyx_v_child = 0;
+  int __pyx_v_endian_detector;
+  int __pyx_v_little_endian;
+  PyObject *__pyx_v_fields = 0;
+  PyObject *__pyx_v_childname = NULL;
+  PyObject *__pyx_v_new_offset = NULL;
+  PyObject *__pyx_v_t = NULL;
+  char *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  long __pyx_t_11;
+  char *__pyx_t_12;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
+
+  /* "numpy.pxd":790
+ *     cdef int delta_offset
+ *     cdef tuple i
+ *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
+ *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
+ *     cdef tuple fields
+ */
+  __pyx_v_endian_detector = 1;
+
+  /* "numpy.pxd":791
+ *     cdef tuple i
+ *     cdef int endian_detector = 1
+ *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
+ *     cdef tuple fields
+ * 
+ */
+  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
+
+  /* "numpy.pxd":794
+ *     cdef tuple fields
+ * 
+ *     for childname in descr.names:             # <<<<<<<<<<<<<<
+ *         fields = descr.fields[childname]
+ *         child, new_offset = fields
+ */
+  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
+  for (;;) {
+    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #else
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #endif
+    __Pyx_XDECREF(__pyx_v_childname);
+    __pyx_v_childname = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "numpy.pxd":795
+ * 
+ *     for childname in descr.names:
+ *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
+ *         child, new_offset = fields
+ * 
+ */
+    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
+    __pyx_v_fields = ((PyObject*)__pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "numpy.pxd":796
+ *     for childname in descr.names:
+ *         fields = descr.fields[childname]
+ *         child, new_offset = fields             # <<<<<<<<<<<<<<
+ * 
+ *         if (end - f) - (new_offset - offset[0]) < 15:
+ */
+    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
+      PyObject* sequence = ((PyObject *)__pyx_v_fields);
+      #if CYTHON_COMPILING_IN_CPYTHON
+      Py_ssize_t size = Py_SIZE(sequence);
+      #else
+      Py_ssize_t size = PySequence_Size(sequence);
+      #endif
+      if (unlikely(size != 2)) {
+        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
+      #if CYTHON_COMPILING_IN_CPYTHON
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
+      #else
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      #endif
+    } else if (1) {
+      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    } else
+    {
+      Py_ssize_t index = -1;
+      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_3);
+      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_4);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = NULL;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      goto __pyx_L6_unpacking_done;
+      __pyx_L5_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_6 = NULL;
+      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_L6_unpacking_done:;
+    }
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
+    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
+    __pyx_t_3 = 0;
+    __Pyx_XDECREF(__pyx_v_new_offset);
+    __pyx_v_new_offset = __pyx_t_4;
+    __pyx_t_4 = 0;
+
+    /* "numpy.pxd":798
+ *         child, new_offset = fields
+ * 
+ *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
+ * 
+ */
+    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (__pyx_t_7) {
+
+      /* "numpy.pxd":799
+ * 
+ *         if (end - f) - (new_offset - offset[0]) < 15:
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
+ * 
+ *         if ((child.byteorder == c'>' and little_endian) or
+ */
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_32), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "numpy.pxd":801
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
+ * 
+ *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
+ *             (child.byteorder == c'<' and not little_endian)):
+ *             raise ValueError(u"Non-native byte order not supported")
+ */
+    __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0);
+    if (__pyx_t_7) {
+      __pyx_t_8 = (__pyx_v_little_endian != 0);
+    } else {
+      __pyx_t_8 = __pyx_t_7;
+    }
+    if (!__pyx_t_8) {
+
+      /* "numpy.pxd":802
+ * 
+ *         if ((child.byteorder == c'>' and little_endian) or
+ *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
+ *             raise ValueError(u"Non-native byte order not supported")
+ *             # One could encode it in the format string and have Cython
+ */
+      __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
+      if (__pyx_t_7) {
+        __pyx_t_9 = ((!(__pyx_v_little_endian != 0)) != 0);
+        __pyx_t_10 = __pyx_t_9;
+      } else {
+        __pyx_t_10 = __pyx_t_7;
+      }
+      __pyx_t_7 = __pyx_t_10;
+    } else {
+      __pyx_t_7 = __pyx_t_8;
+    }
+    if (__pyx_t_7) {
+
+      /* "numpy.pxd":803
+ *         if ((child.byteorder == c'>' and little_endian) or
+ *             (child.byteorder == c'<' and not little_endian)):
+ *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
+ *             # One could encode it in the format string and have Cython
+ *             # complain instead, BUT: < and > in format strings also imply
+ */
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_33), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+
+    /* "numpy.pxd":813
+ * 
+ *         # Output padding bytes
+ *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1
+ */
+    while (1) {
+      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (!__pyx_t_7) break;
+
+      /* "numpy.pxd":814
+ *         # Output padding bytes
+ *         while offset[0] < new_offset:
+ *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
+ *             f += 1
+ *             offset[0] += 1
+ */
+      (__pyx_v_f[0]) = 120;
+
+      /* "numpy.pxd":815
+ *         while offset[0] < new_offset:
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1             # <<<<<<<<<<<<<<
+ *             offset[0] += 1
+ * 
+ */
+      __pyx_v_f = (__pyx_v_f + 1);
+
+      /* "numpy.pxd":816
+ *             f[0] = 120 # "x"; pad byte
+ *             f += 1
+ *             offset[0] += 1             # <<<<<<<<<<<<<<
+ * 
+ *         offset[0] += child.itemsize
+ */
+      __pyx_t_11 = 0;
+      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
+    }
+
+    /* "numpy.pxd":818
+ *             offset[0] += 1
+ * 
+ *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
+ * 
+ *         if not PyDataType_HASFIELDS(child):
+ */
+    __pyx_t_11 = 0;
+    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
+
+    /* "numpy.pxd":820
+ *         offset[0] += child.itemsize
+ * 
+ *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
+ *             t = child.type_num
+ *             if end - f < 5:
+ */
+    __pyx_t_7 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
+    if (__pyx_t_7) {
+
+      /* "numpy.pxd":821
+ * 
+ *         if not PyDataType_HASFIELDS(child):
+ *             t = child.type_num             # <<<<<<<<<<<<<<
+ *             if end - f < 5:
+ *                 raise RuntimeError(u"Format string allocated too short.")
+ */
+      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_XDECREF(__pyx_v_t);
+      __pyx_v_t = __pyx_t_3;
+      __pyx_t_3 = 0;
+
+      /* "numpy.pxd":822
+ *         if not PyDataType_HASFIELDS(child):
+ *             t = child.type_num
+ *             if end - f < 5:             # <<<<<<<<<<<<<<
+ *                 raise RuntimeError(u"Format string allocated too short.")
+ * 
+ */
+      __pyx_t_7 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
+      if (__pyx_t_7) {
+
+        /* "numpy.pxd":823
+ *             t = child.type_num
+ *             if end - f < 5:
+ *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
+ * 
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
+ */
+        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_35), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L12;
+      }
+      __pyx_L12:;
+
+      /* "numpy.pxd":826
+ * 
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
+ *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 98;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":827
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
+ *             if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 66;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":828
+ *             if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 104;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":829
+ *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 72;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":830
+ *             elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 105;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":831
+ *             elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 73;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":832
+ *             elif t == NPY_INT:         f[0] = 105 #"i"
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 108;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":833
+ *             elif t == NPY_UINT:        f[0] =  73 #"I"
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 76;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":834
+ *             elif t == NPY_LONG:        f[0] = 108 #"l"
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 113;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":835
+ *             elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 81;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":836
+ *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 102;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":837
+ *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 100;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":838
+ *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 103;
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":839
+ *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 102;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":840
+ *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 100;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":841
+ *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *             else:
+ */
+      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 90;
+        (__pyx_v_f[1]) = 103;
+        __pyx_v_f = (__pyx_v_f + 1);
+        goto __pyx_L13;
+      }
+
+      /* "numpy.pxd":842
+ *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
+ *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
+ *             else:
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      if (__pyx_t_7) {
+        (__pyx_v_f[0]) = 79;
+        goto __pyx_L13;
+      }
+      /*else*/ {
+
+        /* "numpy.pxd":844
+ *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *             else:
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *             f += 1
+ *         else:
+ */
+        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_30), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
+        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
+        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
+        __pyx_t_5 = 0;
+        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      }
+      __pyx_L13:;
+
+      /* "numpy.pxd":845
+ *             else:
+ *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
+ *             f += 1             # <<<<<<<<<<<<<<
+ *         else:
+ *             # Cython ignores struct boundary information ("T{...}"),
+ */
+      __pyx_v_f = (__pyx_v_f + 1);
+      goto __pyx_L11;
+    }
+    /*else*/ {
+
+      /* "numpy.pxd":849
+ *             # Cython ignores struct boundary information ("T{...}"),
+ *             # so don't output it
+ *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
+ *     return f
+ * 
+ */
+      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_v_f = __pyx_t_12;
+    }
+    __pyx_L11:;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "numpy.pxd":850
+ *             # so don't output it
+ *             f = _util_dtypestring(child, f, end, offset)
+ *     return f             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = __pyx_v_f;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_child);
+  __Pyx_XDECREF(__pyx_v_fields);
+  __Pyx_XDECREF(__pyx_v_childname);
+  __Pyx_XDECREF(__pyx_v_new_offset);
+  __Pyx_XDECREF(__pyx_v_t);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "numpy.pxd":965
+ * 
+ * 
+ * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
+ *      cdef PyObject* baseptr
+ *      if base is None:
+ */
+
+static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
+  PyObject *__pyx_v_baseptr;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("set_array_base", 0);
+
+  /* "numpy.pxd":967
+ * cdef inline void set_array_base(ndarray arr, object base):
+ *      cdef PyObject* baseptr
+ *      if base is None:             # <<<<<<<<<<<<<<
+ *          baseptr = NULL
+ *      else:
+ */
+  __pyx_t_1 = (__pyx_v_base == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "numpy.pxd":968
+ *      cdef PyObject* baseptr
+ *      if base is None:
+ *          baseptr = NULL             # <<<<<<<<<<<<<<
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!
+ */
+    __pyx_v_baseptr = NULL;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":970
+ *          baseptr = NULL
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
+ *          baseptr = <PyObject*>base
+ *      Py_XDECREF(arr.base)
+ */
+    Py_INCREF(__pyx_v_base);
+
+    /* "numpy.pxd":971
+ *      else:
+ *          Py_INCREF(base) # important to do this before decref below!
+ *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
+ *      Py_XDECREF(arr.base)
+ *      arr.base = baseptr
+ */
+    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
+  }
+  __pyx_L3:;
+
+  /* "numpy.pxd":972
+ *          Py_INCREF(base) # important to do this before decref below!
+ *          baseptr = <PyObject*>base
+ *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
+ *      arr.base = baseptr
+ * 
+ */
+  Py_XDECREF(__pyx_v_arr->base);
+
+  /* "numpy.pxd":973
+ *          baseptr = <PyObject*>base
+ *      Py_XDECREF(arr.base)
+ *      arr.base = baseptr             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object get_array_base(ndarray arr):
+ */
+  __pyx_v_arr->base = __pyx_v_baseptr;
+
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "numpy.pxd":975
+ *      arr.base = baseptr
+ * 
+ * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
+ *     if arr.base is NULL:
+ *         return None
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("get_array_base", 0);
+
+  /* "numpy.pxd":976
+ * 
+ * cdef inline object get_array_base(ndarray arr):
+ *     if arr.base is NULL:             # <<<<<<<<<<<<<<
+ *         return None
+ *     else:
+ */
+  __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "numpy.pxd":977
+ * cdef inline object get_array_base(ndarray arr):
+ *     if arr.base is NULL:
+ *         return None             # <<<<<<<<<<<<<<
+ *     else:
+ *         return <object>arr.base
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "numpy.pxd":979
+ *         return None
+ *     else:
+ *         return <object>arr.base             # <<<<<<<<<<<<<<
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
+    __pyx_r = ((PyObject *)__pyx_v_arr->base);
+    goto __pyx_L0;
+  }
+  __pyx_L3:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_5adios_AdiosFile __pyx_vtable_5adios_AdiosFile;
+
+static PyObject *__pyx_tp_new_5adios_AdiosFile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_5adios_AdiosFile *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_5adios_AdiosFile *)o);
+  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosFile;
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_5adios_AdiosFile(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->group);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_5adios_AdiosFile(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
+  if (p->name) {
+    e = (*v)(p->name, a); if (e) return e;
+  }
+  if (p->group) {
+    e = (*v)(p->group, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_5adios_AdiosFile(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosFile *p = (struct __pyx_obj_5adios_AdiosFile *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->name);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->group);
+  p->group = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_4name_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_4name_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_9AdiosFile_4name_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_groups_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_12groups_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_groups_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_12groups_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_10vars_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_10vars_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_11attrs_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_11attrs_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_tidx_start(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_10tidx_start_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_tidx_start(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_10tidx_start_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_ntimesteps(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_10ntimesteps_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_ntimesteps(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_10ntimesteps_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_7version_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_7version_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_file_size(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_9file_size_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_file_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_9file_size_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_endianness(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_10endianness_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_endianness(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_10endianness_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_9AdiosFile_group(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_9AdiosFile_5group_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_9AdiosFile_group(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_9AdiosFile_5group_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_9AdiosFile_5group_5__del__(o);
+  }
+}
+
+static PyMethodDef __pyx_methods_5adios_AdiosFile[] = {
+  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_9AdiosFile_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_5adios_AdiosFile[] = {
+  {(char *)"name", __pyx_getprop_5adios_9AdiosFile_name, __pyx_setprop_5adios_9AdiosFile_name, 0, 0},
+  {(char *)"groups_count", __pyx_getprop_5adios_9AdiosFile_groups_count, __pyx_setprop_5adios_9AdiosFile_groups_count, 0, 0},
+  {(char *)"vars_count", __pyx_getprop_5adios_9AdiosFile_vars_count, __pyx_setprop_5adios_9AdiosFile_vars_count, 0, 0},
+  {(char *)"attrs_count", __pyx_getprop_5adios_9AdiosFile_attrs_count, __pyx_setprop_5adios_9AdiosFile_attrs_count, 0, 0},
+  {(char *)"tidx_start", __pyx_getprop_5adios_9AdiosFile_tidx_start, __pyx_setprop_5adios_9AdiosFile_tidx_start, 0, 0},
+  {(char *)"ntimesteps", __pyx_getprop_5adios_9AdiosFile_ntimesteps, __pyx_setprop_5adios_9AdiosFile_ntimesteps, 0, 0},
+  {(char *)"version", __pyx_getprop_5adios_9AdiosFile_version, __pyx_setprop_5adios_9AdiosFile_version, 0, 0},
+  {(char *)"file_size", __pyx_getprop_5adios_9AdiosFile_file_size, __pyx_setprop_5adios_9AdiosFile_file_size, 0, 0},
+  {(char *)"endianness", __pyx_getprop_5adios_9AdiosFile_endianness, __pyx_setprop_5adios_9AdiosFile_endianness, 0, 0},
+  {(char *)"group", __pyx_getprop_5adios_9AdiosFile_group, __pyx_setprop_5adios_9AdiosFile_group, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_5adios_AdiosFile = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("adios.AdiosFile"), /*tp_name*/
+  sizeof(struct __pyx_obj_5adios_AdiosFile), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5adios_AdiosFile, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_5adios_AdiosFile, /*tp_traverse*/
+  __pyx_tp_clear_5adios_AdiosFile, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5adios_AdiosFile, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5adios_AdiosFile, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_5adios_9AdiosFile_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_5adios_AdiosFile, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+static struct __pyx_vtabstruct_5adios_AdiosGroup __pyx_vtable_5adios_AdiosGroup;
+
+static PyObject *__pyx_tp_new_5adios_AdiosGroup(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_5adios_AdiosGroup *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_5adios_AdiosGroup *)o);
+  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosGroup;
+  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_5adios_AdiosGroup(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->file);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->var);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_5adios_AdiosGroup(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
+  if (p->file) {
+    e = (*v)(((PyObject*)p->file), a); if (e) return e;
+  }
+  if (p->name) {
+    e = (*v)(p->name, a); if (e) return e;
+  }
+  if (p->var) {
+    e = (*v)(p->var, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_5adios_AdiosGroup(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosGroup *p = (struct __pyx_obj_5adios_AdiosGroup *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->file);
+  p->file = ((struct __pyx_obj_5adios_AdiosFile *)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->name);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->var);
+  p->var = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_4name_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_4name_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_10AdiosGroup_4name_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_grpid(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_5grpid_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_grpid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_5grpid_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_vars_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_10vars_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_vars_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_10vars_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_attrs_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_11attrs_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_attrs_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_11attrs_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_timestep(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_8timestep_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_timestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_8timestep_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_lasttimestep(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_12lasttimestep_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_10AdiosGroup_var(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_10AdiosGroup_3var_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_10AdiosGroup_var(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_10AdiosGroup_3var_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_10AdiosGroup_3var_5__del__(o);
+  }
+}
+
+static PyMethodDef __pyx_methods_5adios_AdiosGroup[] = {
+  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_10AdiosGroup_7printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_5adios_AdiosGroup[] = {
+  {(char *)"name", __pyx_getprop_5adios_10AdiosGroup_name, __pyx_setprop_5adios_10AdiosGroup_name, 0, 0},
+  {(char *)"grpid", __pyx_getprop_5adios_10AdiosGroup_grpid, __pyx_setprop_5adios_10AdiosGroup_grpid, 0, 0},
+  {(char *)"vars_count", __pyx_getprop_5adios_10AdiosGroup_vars_count, __pyx_setprop_5adios_10AdiosGroup_vars_count, 0, 0},
+  {(char *)"attrs_count", __pyx_getprop_5adios_10AdiosGroup_attrs_count, __pyx_setprop_5adios_10AdiosGroup_attrs_count, 0, 0},
+  {(char *)"timestep", __pyx_getprop_5adios_10AdiosGroup_timestep, __pyx_setprop_5adios_10AdiosGroup_timestep, 0, 0},
+  {(char *)"lasttimestep", __pyx_getprop_5adios_10AdiosGroup_lasttimestep, __pyx_setprop_5adios_10AdiosGroup_lasttimestep, 0, 0},
+  {(char *)"var", __pyx_getprop_5adios_10AdiosGroup_var, __pyx_setprop_5adios_10AdiosGroup_var, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_5adios_AdiosGroup = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("adios.AdiosGroup"), /*tp_name*/
+  sizeof(struct __pyx_obj_5adios_AdiosGroup), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5adios_AdiosGroup, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_5adios_AdiosGroup, /*tp_traverse*/
+  __pyx_tp_clear_5adios_AdiosGroup, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5adios_AdiosGroup, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5adios_AdiosGroup, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_5adios_10AdiosGroup_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_5adios_AdiosGroup, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+static struct __pyx_vtabstruct_5adios_AdiosVariable __pyx_vtable_5adios_AdiosVariable;
+
+static PyObject *__pyx_tp_new_5adios_AdiosVariable(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_5adios_AdiosVariable *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_5adios_AdiosVariable *)o);
+  p->__pyx_vtab = __pyx_vtabptr_5adios_AdiosVariable;
+  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_5adios_AdiosVariable(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->group);
+  Py_CLEAR(p->name);
+  Py_CLEAR(p->type);
+  Py_CLEAR(p->dims);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_5adios_AdiosVariable(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
+  if (p->group) {
+    e = (*v)(((PyObject*)p->group), a); if (e) return e;
+  }
+  if (p->name) {
+    e = (*v)(p->name, a); if (e) return e;
+  }
+  if (p->type) {
+    e = (*v)(p->type, a); if (e) return e;
+  }
+  if (p->dims) {
+    e = (*v)(p->dims, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_5adios_AdiosVariable(PyObject *o) {
+  struct __pyx_obj_5adios_AdiosVariable *p = (struct __pyx_obj_5adios_AdiosVariable *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->group);
+  p->group = ((struct __pyx_obj_5adios_AdiosGroup *)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->name);
+  p->name = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->type);
+  p->type = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->dims);
+  p->dims = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_4name_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_4name_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_13AdiosVariable_4name_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_varid(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_5varid_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_varid(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_5varid_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_4type_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_4type_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_13AdiosVariable_4type_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_ndim(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_4ndim_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_ndim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_4ndim_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_dims(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_4dims_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_dims(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_4dims_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5adios_13AdiosVariable_4dims_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_timedim(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_7timedim_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_timedim(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_7timedim_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_1__get__(o);
+}
+
+static int __pyx_setprop_5adios_13AdiosVariable_characteristics_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5adios_13AdiosVariable_21characteristics_count_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyMethodDef __pyx_methods_5adios_AdiosVariable[] = {
+  {__Pyx_NAMESTR("__del__"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_3__del__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_5close, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_7read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("printself"), (PyCFunction)__pyx_pw_5adios_13AdiosVariable_9printself, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_5adios_AdiosVariable[] = {
+  {(char *)"name", __pyx_getprop_5adios_13AdiosVariable_name, __pyx_setprop_5adios_13AdiosVariable_name, 0, 0},
+  {(char *)"varid", __pyx_getprop_5adios_13AdiosVariable_varid, __pyx_setprop_5adios_13AdiosVariable_varid, 0, 0},
+  {(char *)"type", __pyx_getprop_5adios_13AdiosVariable_type, __pyx_setprop_5adios_13AdiosVariable_type, 0, 0},
+  {(char *)"ndim", __pyx_getprop_5adios_13AdiosVariable_ndim, __pyx_setprop_5adios_13AdiosVariable_ndim, 0, 0},
+  {(char *)"dims", __pyx_getprop_5adios_13AdiosVariable_dims, __pyx_setprop_5adios_13AdiosVariable_dims, 0, 0},
+  {(char *)"timedim", __pyx_getprop_5adios_13AdiosVariable_timedim, __pyx_setprop_5adios_13AdiosVariable_timedim, 0, 0},
+  {(char *)"characteristics_count", __pyx_getprop_5adios_13AdiosVariable_characteristics_count, __pyx_setprop_5adios_13AdiosVariable_characteristics_count, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_5adios_AdiosVariable = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("adios.AdiosVariable"), /*tp_name*/
+  sizeof(struct __pyx_obj_5adios_AdiosVariable), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5adios_AdiosVariable, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR(" Private Memeber "), /*tp_doc*/
+  __pyx_tp_traverse_5adios_AdiosVariable, /*tp_traverse*/
+  __pyx_tp_clear_5adios_AdiosVariable, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5adios_AdiosVariable, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5adios_AdiosVariable, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_5adios_13AdiosVariable_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_5adios_AdiosVariable, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static PyMethodDef __pyx_methods[] = {
+  {__Pyx_NAMESTR("init"), (PyCFunction)__pyx_pw_5adios_1init, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("open"), (PyCFunction)__pyx_pw_5adios_3open, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("set_group_size"), (PyCFunction)__pyx_pw_5adios_5set_group_size, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_5adios_7write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_int"), (PyCFunction)__pyx_pw_5adios_9write_int, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_long"), (PyCFunction)__pyx_pw_5adios_11write_long, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write_float"), (PyCFunction)__pyx_pw_5adios_13write_float, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_5adios_15read, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_5adios_17close, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("finalize"), (PyCFunction)__pyx_pw_5adios_19finalize, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("init_noxml"), (PyCFunction)__pyx_pw_5adios_21init_noxml, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("allocate_buffer"), (PyCFunction)__pyx_pw_5adios_23allocate_buffer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("declare_group"), (PyCFunction)__pyx_pw_5adios_25declare_group, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("define_var"), (PyCFunction)__pyx_pw_5adios_27define_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("define_attribute"), (PyCFunction)__pyx_pw_5adios_29define_attribute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("select_method"), (PyCFunction)__pyx_pw_5adios_31select_method, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("adios2nptype"), (PyCFunction)__pyx_pw_5adios_33adios2nptype, METH_O, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+  #else
+    PyModuleDef_HEAD_INIT,
+  #endif
+    __Pyx_NAMESTR("adios"),
+    __Pyx_DOCSTR(__pyx_k_36), /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
+  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
+  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
+  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
+  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
+  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
+  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
+  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
+  {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
+  {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0},
+  {&__pyx_kp_s_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 0, 1, 0},
+  {&__pyx_kp_u_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 1, 0, 0},
+  {&__pyx_kp_u_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 1, 0, 0},
+  {&__pyx_kp_u_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 1, 0, 0},
+  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
+  {&__pyx_kp_u_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0, 0},
+  {&__pyx_kp_u_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 1, 0, 0},
+  {&__pyx_kp_u_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 1, 0, 0},
+  {&__pyx_n_s_37, __pyx_k_37, sizeof(__pyx_k_37), 0, 0, 1, 1},
+  {&__pyx_n_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 1},
+  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
+  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
+  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
+  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
+  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
+  {&__pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_k__BUFFER_ALLOC_WHEN, sizeof(__pyx_k__BUFFER_ALLOC_WHEN), 0, 0, 1, 1},
+  {&__pyx_n_s__COMM_WORLD, __pyx_k__COMM_WORLD, sizeof(__pyx_k__COMM_WORLD), 0, 0, 1, 1},
+  {&__pyx_n_s__DATATYPE, __pyx_k__DATATYPE, sizeof(__pyx_k__DATATYPE), 0, 0, 1, 1},
+  {&__pyx_n_s__FLAG, __pyx_k__FLAG, sizeof(__pyx_k__FLAG), 0, 0, 1, 1},
+  {&__pyx_n_s__LATER, __pyx_k__LATER, sizeof(__pyx_k__LATER), 0, 0, 1, 1},
+  {&__pyx_n_s__MPI, __pyx_k__MPI, sizeof(__pyx_k__MPI), 0, 0, 1, 1},
+  {&__pyx_n_s__NO, __pyx_k__NO, sizeof(__pyx_k__NO), 0, 0, 1, 1},
+  {&__pyx_n_s__NOW, __pyx_k__NOW, sizeof(__pyx_k__NOW), 0, 0, 1, 1},
+  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
+  {&__pyx_n_s__UNKNOWN, __pyx_k__UNKNOWN, sizeof(__pyx_k__UNKNOWN), 0, 0, 1, 1},
+  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
+  {&__pyx_n_s__YES, __pyx_k__YES, sizeof(__pyx_k__YES), 0, 0, 1, 1},
+  {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1},
+  {&__pyx_n_s____import__, __pyx_k____import__, sizeof(__pyx_k____import__), 0, 0, 1, 1},
+  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
+  {&__pyx_n_s____metaclass__, __pyx_k____metaclass__, sizeof(__pyx_k____metaclass__), 0, 0, 1, 1},
+  {&__pyx_n_s____module__, __pyx_k____module__, sizeof(__pyx_k____module__), 0, 0, 1, 1},
+  {&__pyx_n_s____pyx_vtable__, __pyx_k____pyx_vtable__, sizeof(__pyx_k____pyx_vtable__), 0, 0, 1, 1},
+  {&__pyx_n_s____qualname__, __pyx_k____qualname__, sizeof(__pyx_k____qualname__), 0, 0, 1, 1},
+  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
+  {&__pyx_n_s__adios, __pyx_k__adios, sizeof(__pyx_k__adios), 0, 0, 1, 1},
+  {&__pyx_n_s__all, __pyx_k__all, sizeof(__pyx_k__all), 0, 0, 1, 1},
+  {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1},
+  {&__pyx_n_s__attr_namelist, __pyx_k__attr_namelist, sizeof(__pyx_k__attr_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s__attrs_count, __pyx_k__attrs_count, sizeof(__pyx_k__attrs_count), 0, 0, 1, 1},
+  {&__pyx_n_s__base_path, __pyx_k__base_path, sizeof(__pyx_k__base_path), 0, 0, 1, 1},
+  {&__pyx_n_s__buffer_size, __pyx_k__buffer_size, sizeof(__pyx_k__buffer_size), 0, 0, 1, 1},
+  {&__pyx_n_s__byte, __pyx_k__byte, sizeof(__pyx_k__byte), 0, 0, 1, 1},
+  {&__pyx_n_s__close, __pyx_k__close, sizeof(__pyx_k__close), 0, 0, 1, 1},
+  {&__pyx_n_s__comm, __pyx_k__comm, sizeof(__pyx_k__comm), 0, 0, 1, 1},
+  {&__pyx_n_s__complex, __pyx_k__complex, sizeof(__pyx_k__complex), 0, 0, 1, 1},
+  {&__pyx_n_s__complex128, __pyx_k__complex128, sizeof(__pyx_k__complex128), 0, 0, 1, 1},
+  {&__pyx_n_s__complex64, __pyx_k__complex64, sizeof(__pyx_k__complex64), 0, 0, 1, 1},
+  {&__pyx_n_s__config, __pyx_k__config, sizeof(__pyx_k__config), 0, 0, 1, 1},
+  {&__pyx_n_s__contiguous, __pyx_k__contiguous, sizeof(__pyx_k__contiguous), 0, 0, 1, 1},
+  {&__pyx_n_s__copy, __pyx_k__copy, sizeof(__pyx_k__copy), 0, 0, 1, 1},
+  {&__pyx_n_s__count, __pyx_k__count, sizeof(__pyx_k__count), 0, 0, 1, 1},
+  {&__pyx_n_s__data_size, __pyx_k__data_size, sizeof(__pyx_k__data_size), 0, 0, 1, 1},
+  {&__pyx_n_s__dimensions, __pyx_k__dimensions, sizeof(__pyx_k__dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s__dims, __pyx_k__dims, sizeof(__pyx_k__dims), 0, 0, 1, 1},
+  {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1},
+  {&__pyx_n_s__double_complex, __pyx_k__double_complex, sizeof(__pyx_k__double_complex), 0, 0, 1, 1},
+  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
+  {&__pyx_n_s__end, __pyx_k__end, sizeof(__pyx_k__end), 0, 0, 1, 1},
+  {&__pyx_n_s__endianness, __pyx_k__endianness, sizeof(__pyx_k__endianness), 0, 0, 1, 1},
+  {&__pyx_n_s__fd_p, __pyx_k__fd_p, sizeof(__pyx_k__fd_p), 0, 0, 1, 1},
+  {&__pyx_n_s__fh, __pyx_k__fh, sizeof(__pyx_k__fh), 0, 0, 1, 1},
+  {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1},
+  {&__pyx_n_s__file_size, __pyx_k__file_size, sizeof(__pyx_k__file_size), 0, 0, 1, 1},
+  {&__pyx_n_s__fill, __pyx_k__fill, sizeof(__pyx_k__fill), 0, 0, 1, 1},
+  {&__pyx_n_s__flags, __pyx_k__flags, sizeof(__pyx_k__flags), 0, 0, 1, 1},
+  {&__pyx_n_s__float128, __pyx_k__float128, sizeof(__pyx_k__float128), 0, 0, 1, 1},
+  {&__pyx_n_s__float32, __pyx_k__float32, sizeof(__pyx_k__float32), 0, 0, 1, 1},
+  {&__pyx_n_s__float64, __pyx_k__float64, sizeof(__pyx_k__float64), 0, 0, 1, 1},
+  {&__pyx_n_s__fname, __pyx_k__fname, sizeof(__pyx_k__fname), 0, 0, 1, 1},
+  {&__pyx_n_s__fp, __pyx_k__fp, sizeof(__pyx_k__fp), 0, 0, 1, 1},
+  {&__pyx_n_s__gh, __pyx_k__gh, sizeof(__pyx_k__gh), 0, 0, 1, 1},
+  {&__pyx_n_s__global_dimensions, __pyx_k__global_dimensions, sizeof(__pyx_k__global_dimensions), 0, 0, 1, 1},
+  {&__pyx_n_s__gp, __pyx_k__gp, sizeof(__pyx_k__gp), 0, 0, 1, 1},
+  {&__pyx_n_s__group, __pyx_k__group, sizeof(__pyx_k__group), 0, 0, 1, 1},
+  {&__pyx_n_s__group_id, __pyx_k__group_id, sizeof(__pyx_k__group_id), 0, 0, 1, 1},
+  {&__pyx_n_s__group_name, __pyx_k__group_name, sizeof(__pyx_k__group_name), 0, 0, 1, 1},
+  {&__pyx_n_s__group_namelist, __pyx_k__group_namelist, sizeof(__pyx_k__group_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s__groups_count, __pyx_k__groups_count, sizeof(__pyx_k__groups_count), 0, 0, 1, 1},
+  {&__pyx_n_s__grpid, __pyx_k__grpid, sizeof(__pyx_k__grpid), 0, 0, 1, 1},
+  {&__pyx_n_s__int16, __pyx_k__int16, sizeof(__pyx_k__int16), 0, 0, 1, 1},
+  {&__pyx_n_s__int32, __pyx_k__int32, sizeof(__pyx_k__int32), 0, 0, 1, 1},
+  {&__pyx_n_s__int64, __pyx_k__int64, sizeof(__pyx_k__int64), 0, 0, 1, 1},
+  {&__pyx_n_s__int8, __pyx_k__int8, sizeof(__pyx_k__int8), 0, 0, 1, 1},
+  {&__pyx_n_s__integer, __pyx_k__integer, sizeof(__pyx_k__integer), 0, 0, 1, 1},
+  {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1},
+  {&__pyx_n_s__local_offsets, __pyx_k__local_offsets, sizeof(__pyx_k__local_offsets), 0, 0, 1, 1},
+  {&__pyx_n_s__long, __pyx_k__long, sizeof(__pyx_k__long), 0, 0, 1, 1},
+  {&__pyx_n_s__long_double, __pyx_k__long_double, sizeof(__pyx_k__long_double), 0, 0, 1, 1},
+  {&__pyx_n_s__method, __pyx_k__method, sizeof(__pyx_k__method), 0, 0, 1, 1},
+  {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1},
+  {&__pyx_n_s__mype, __pyx_k__mype, sizeof(__pyx_k__mype), 0, 0, 1, 1},
+  {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1},
+  {&__pyx_n_s__ndim, __pyx_k__ndim, sizeof(__pyx_k__ndim), 0, 0, 1, 1},
+  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
+  {&__pyx_n_s__ntimesteps, __pyx_k__ntimesteps, sizeof(__pyx_k__ntimesteps), 0, 0, 1, 1},
+  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
+  {&__pyx_n_s__object, __pyx_k__object, sizeof(__pyx_k__object), 0, 0, 1, 1},
+  {&__pyx_n_s__offset, __pyx_k__offset, sizeof(__pyx_k__offset), 0, 0, 1, 1},
+  {&__pyx_n_s__parameters, __pyx_k__parameters, sizeof(__pyx_k__parameters), 0, 0, 1, 1},
+  {&__pyx_n_s__path, __pyx_k__path, sizeof(__pyx_k__path), 0, 0, 1, 1},
+  {&__pyx_n_s__print, __pyx_k__print, sizeof(__pyx_k__print), 0, 0, 1, 1},
+  {&__pyx_n_s__printself, __pyx_k__printself, sizeof(__pyx_k__printself), 0, 0, 1, 1},
+  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
+  {&__pyx_n_s__read, __pyx_k__read, sizeof(__pyx_k__read), 0, 0, 1, 1},
+  {&__pyx_n_s__real, __pyx_k__real, sizeof(__pyx_k__real), 0, 0, 1, 1},
+  {&__pyx_n_s__short, __pyx_k__short, sizeof(__pyx_k__short), 0, 0, 1, 1},
+  {&__pyx_n_s__size, __pyx_k__size, sizeof(__pyx_k__size), 0, 0, 1, 1},
+  {&__pyx_n_s__split, __pyx_k__split, sizeof(__pyx_k__split), 0, 0, 1, 1},
+  {&__pyx_n_s__stats, __pyx_k__stats, sizeof(__pyx_k__stats), 0, 0, 1, 1},
+  {&__pyx_n_s__string, __pyx_k__string, sizeof(__pyx_k__string), 0, 0, 1, 1},
+  {&__pyx_n_s__tidx_start, __pyx_k__tidx_start, sizeof(__pyx_k__tidx_start), 0, 0, 1, 1},
+  {&__pyx_n_s__time_index, __pyx_k__time_index, sizeof(__pyx_k__time_index), 0, 0, 1, 1},
+  {&__pyx_n_s__timedim, __pyx_k__timedim, sizeof(__pyx_k__timedim), 0, 0, 1, 1},
+  {&__pyx_n_s__type, __pyx_k__type, sizeof(__pyx_k__type), 0, 0, 1, 1},
+  {&__pyx_n_s__uint16, __pyx_k__uint16, sizeof(__pyx_k__uint16), 0, 0, 1, 1},
+  {&__pyx_n_s__uint32, __pyx_k__uint32, sizeof(__pyx_k__uint32), 0, 0, 1, 1},
+  {&__pyx_n_s__uint64, __pyx_k__uint64, sizeof(__pyx_k__uint64), 0, 0, 1, 1},
+  {&__pyx_n_s__uint8, __pyx_k__uint8, sizeof(__pyx_k__uint8), 0, 0, 1, 1},
+  {&__pyx_n_s__unknown, __pyx_k__unknown, sizeof(__pyx_k__unknown), 0, 0, 1, 1},
+  {&__pyx_n_s__unsigned_byte, __pyx_k__unsigned_byte, sizeof(__pyx_k__unsigned_byte), 0, 0, 1, 1},
+  {&__pyx_n_s__unsigned_integer, __pyx_k__unsigned_integer, sizeof(__pyx_k__unsigned_integer), 0, 0, 1, 1},
+  {&__pyx_n_s__unsigned_long, __pyx_k__unsigned_long, sizeof(__pyx_k__unsigned_long), 0, 0, 1, 1},
+  {&__pyx_n_s__unsigned_short, __pyx_k__unsigned_short, sizeof(__pyx_k__unsigned_short), 0, 0, 1, 1},
+  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
+  {&__pyx_n_s__value, __pyx_k__value, sizeof(__pyx_k__value), 0, 0, 1, 1},
+  {&__pyx_n_s__values, __pyx_k__values, sizeof(__pyx_k__values), 0, 0, 1, 1},
+  {&__pyx_n_s__var, __pyx_k__var, sizeof(__pyx_k__var), 0, 0, 1, 1},
+  {&__pyx_n_s__var_namelist, __pyx_k__var_namelist, sizeof(__pyx_k__var_namelist), 0, 0, 1, 1},
+  {&__pyx_n_s__varid, __pyx_k__varid, sizeof(__pyx_k__varid), 0, 0, 1, 1},
+  {&__pyx_n_s__vars_count, __pyx_k__vars_count, sizeof(__pyx_k__vars_count), 0, 0, 1, 1},
+  {&__pyx_n_s__version, __pyx_k__version, sizeof(__pyx_k__version), 0, 0, 1, 1},
+  {&__pyx_n_s__vp, __pyx_k__vp, sizeof(__pyx_k__vp), 0, 0, 1, 1},
+  {&__pyx_n_s__when, __pyx_k__when, sizeof(__pyx_k__when), 0, 0, 1, 1},
+  {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s__object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+
+  /* "adios.pyx":447
+ *         assert self.fp != NULL, 'Not an open file'
+ * 
+ *         self.name         = fname.split('/')[-1]  ## basename             # <<<<<<<<<<<<<<
+ *         self.groups_count = self.fp.groups_count
+ *         self.vars_count   = self.fp.vars_count
+ */
+  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_13);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
+
+  /* "adios.pyx":577
+ *         if len(offset) == 0:
+ *             npoffset = npshape.copy()
+ *             npoffset.fill(0)             # <<<<<<<<<<<<<<
+ *         else:
+ *             npoffset = np.array(offset, dtype=np.int64)
+ */
+  __pyx_k_tuple_18 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_k_tuple_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_18);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_18));
+
+  /* "numpy.pxd":215
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ */
+  __pyx_k_tuple_25 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_24)); if (unlikely(!__pyx_k_tuple_25)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_25);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
+
+  /* "numpy.pxd":219
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             info.buf = PyArray_DATA(self)
+ */
+  __pyx_k_tuple_27 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_26)); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_27);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_27));
+
+  /* "numpy.pxd":257
+ *                 if ((descr.byteorder == c'>' and little_endian) or
+ *                     (descr.byteorder == c'<' and not little_endian)):
+ *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ */
+  __pyx_k_tuple_29 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_29);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29));
+
+  /* "numpy.pxd":799
+ * 
+ *         if (end - f) - (new_offset - offset[0]) < 15:
+ *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
+ * 
+ *         if ((child.byteorder == c'>' and little_endian) or
+ */
+  __pyx_k_tuple_32 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_31)); if (unlikely(!__pyx_k_tuple_32)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_32);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_32));
+
+  /* "numpy.pxd":803
+ *         if ((child.byteorder == c'>' and little_endian) or
+ *             (child.byteorder == c'<' and not little_endian)):
+ *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
+ *             # One could encode it in the format string and have Cython
+ *             # complain instead, BUT: < and > in format strings also imply
+ */
+  __pyx_k_tuple_33 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_33)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_33);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_33));
+
+  /* "numpy.pxd":823
+ *             t = child.type_num
+ *             if end - f < 5:
+ *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
+ * 
+ *             # Until ticket #99 is fixed, use integers to avoid warnings
+ */
+  __pyx_k_tuple_35 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_34)); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_35);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));
+  __Pyx_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_52 = PyInt_FromLong(52); if (unlikely(!__pyx_int_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_54 = PyInt_FromLong(54); if (unlikely(!__pyx_int_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initadios(void); /*proto*/
+PyMODINIT_FUNC initadios(void)
+#else
+PyMODINIT_FUNC PyInit_adios(void); /*proto*/
+PyMODINIT_FUNC PyInit_adios(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_REFNANNY
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_adios(void)", 0);
+  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #ifdef __Pyx_CyFunction_USED
+  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("adios"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_36), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_d);
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "adios")) {
+      if (unlikely(PyDict_SetItemString(modules, "adios", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+  }
+  #endif
+  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  if (__pyx_module_is_main_adios) {
+    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  }
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Constants init code ---*/
+  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Global init code ---*/
+  /*--- Variable export code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_5adios_AdiosFile = &__pyx_vtable_5adios_AdiosFile;
+  __pyx_vtable_5adios_AdiosFile.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_close;
+  __pyx_vtable_5adios_AdiosFile.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosFile *, int __pyx_skip_dispatch))__pyx_f_5adios_9AdiosFile_printself;
+  if (PyType_Ready(&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosFile.tp_dict, __pyx_vtabptr_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "AdiosFile", (PyObject *)&__pyx_type_5adios_AdiosFile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5adios_AdiosFile = &__pyx_type_5adios_AdiosFile;
+  __pyx_vtabptr_5adios_AdiosGroup = &__pyx_vtable_5adios_AdiosGroup;
+  __pyx_vtable_5adios_AdiosGroup.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_close;
+  __pyx_vtable_5adios_AdiosGroup.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosGroup *, int __pyx_skip_dispatch))__pyx_f_5adios_10AdiosGroup_printself;
+  if (PyType_Ready(&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosGroup.tp_dict, __pyx_vtabptr_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "AdiosGroup", (PyObject *)&__pyx_type_5adios_AdiosGroup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5adios_AdiosGroup = &__pyx_type_5adios_AdiosGroup;
+  __pyx_vtabptr_5adios_AdiosVariable = &__pyx_vtable_5adios_AdiosVariable;
+  __pyx_vtable_5adios_AdiosVariable.close = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_close;
+  __pyx_vtable_5adios_AdiosVariable.read = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch, struct __pyx_opt_args_5adios_13AdiosVariable_read *__pyx_optional_args))__pyx_f_5adios_13AdiosVariable_read;
+  __pyx_vtable_5adios_AdiosVariable.printself = (PyObject *(*)(struct __pyx_obj_5adios_AdiosVariable *, int __pyx_skip_dispatch))__pyx_f_5adios_13AdiosVariable_printself;
+  if (PyType_Ready(&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_5adios_AdiosVariable.tp_dict, __pyx_vtabptr_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "AdiosVariable", (PyObject *)&__pyx_type_5adios_AdiosVariable) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5adios_AdiosVariable = &__pyx_type_5adios_AdiosVariable;
+  /*--- Type import code ---*/
+  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
+  #if CYTHON_COMPILING_IN_PYPY
+  sizeof(PyTypeObject),
+  #else
+  sizeof(PyHeapTypeObject),
+  #endif
+  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Status = __Pyx_ImportType("mpi4py.MPI", "Status", sizeof(struct PyMPIStatusObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Status)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Datatype = __Pyx_ImportType("mpi4py.MPI", "Datatype", sizeof(struct PyMPIDatatypeObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Datatype)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Request = __Pyx_ImportType("mpi4py.MPI", "Request", sizeof(struct PyMPIRequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Request)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Prequest = __Pyx_ImportType("mpi4py.MPI", "Prequest", sizeof(struct PyMPIPrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Prequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Grequest = __Pyx_ImportType("mpi4py.MPI", "Grequest", sizeof(struct PyMPIGrequestObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Grequest)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Op = __Pyx_ImportType("mpi4py.MPI", "Op", sizeof(struct PyMPIOpObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Op)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Group = __Pyx_ImportType("mpi4py.MPI", "Group", sizeof(struct PyMPIGroupObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Group)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Info = __Pyx_ImportType("mpi4py.MPI", "Info", sizeof(struct PyMPIInfoObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Info)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Errhandler = __Pyx_ImportType("mpi4py.MPI", "Errhandler", sizeof(struct PyMPIErrhandlerObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Errhandler)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Comm = __Pyx_ImportType("mpi4py.MPI", "Comm", sizeof(struct PyMPICommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Comm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Intracomm = __Pyx_ImportType("mpi4py.MPI", "Intracomm", sizeof(struct PyMPIIntracommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intracomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Cartcomm = __Pyx_ImportType("mpi4py.MPI", "Cartcomm", sizeof(struct PyMPICartcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Cartcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Graphcomm = __Pyx_ImportType("mpi4py.MPI", "Graphcomm", sizeof(struct PyMPIGraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Graphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = __Pyx_ImportType("mpi4py.MPI", "Distgraphcomm", sizeof(struct PyMPIDistgraphcommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Distgraphcomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Intercomm = __Pyx_ImportType("mpi4py.MPI", "Intercomm", sizeof(struct PyMPIIntercommObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Intercomm)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_Win = __Pyx_ImportType("mpi4py.MPI", "Win", sizeof(struct PyMPIWinObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_Win)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_6mpi4py_3MPI_File = __Pyx_ImportType("mpi4py.MPI", "File", sizeof(struct PyMPIFileObject), 1); if (unlikely(!__pyx_ptype_6mpi4py_3MPI_File)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Variable import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+
+  /* "adios.pyx":8
+ * """
+ * 
+ * import numpy as np             # <<<<<<<<<<<<<<
+ * cimport numpy as np
+ * 
+ */
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "adios.pyx":11
+ * cimport numpy as np
+ * 
+ * import mpi4py.MPI as MPI             # <<<<<<<<<<<<<<
+ * cimport mpi4py.MPI as MPI
+ * 
+ */
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s_38));
+  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_38));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s_38));
+  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_37), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s__MPI, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "adios.pyx":180
+ * ## ==========
+ * 
+ * class DATATYPE(object):             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
+ */
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+
+  /* "adios.pyx":181
+ * 
+ * class DATATYPE(object):
+ *     unknown = -1             # <<<<<<<<<<<<<<
+ *     byte = 0
+ *     short = 1
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unknown, __pyx_int_neg_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":182
+ * class DATATYPE(object):
+ *     unknown = -1
+ *     byte = 0             # <<<<<<<<<<<<<<
+ *     short = 1
+ *     integer = 2
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__byte, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":183
+ *     unknown = -1
+ *     byte = 0
+ *     short = 1             # <<<<<<<<<<<<<<
+ *     integer = 2
+ *     long = 4
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__short, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":184
+ *     byte = 0
+ *     short = 1
+ *     integer = 2             # <<<<<<<<<<<<<<
+ *     long = 4
+ *     unsigned_byte = 50
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__integer, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":185
+ *     short = 1
+ *     integer = 2
+ *     long = 4             # <<<<<<<<<<<<<<
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long, __pyx_int_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":186
+ *     integer = 2
+ *     long = 4
+ *     unsigned_byte = 50             # <<<<<<<<<<<<<<
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_byte, __pyx_int_50) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":187
+ *     long = 4
+ *     unsigned_byte = 50
+ *     unsigned_short = 51             # <<<<<<<<<<<<<<
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_short, __pyx_int_51) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":188
+ *     unsigned_byte = 50
+ *     unsigned_short = 51
+ *     unsigned_integer = 52             # <<<<<<<<<<<<<<
+ *     unsigned_long = 54
+ *     real = 5
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_integer, __pyx_int_52) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":189
+ *     unsigned_short = 51
+ *     unsigned_integer = 52
+ *     unsigned_long = 54             # <<<<<<<<<<<<<<
+ *     real = 5
+ *     double = 6
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__unsigned_long, __pyx_int_54) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":190
+ *     unsigned_integer = 52
+ *     unsigned_long = 54
+ *     real = 5             # <<<<<<<<<<<<<<
+ *     double = 6
+ *     long_double = 7
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__real, __pyx_int_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":191
+ *     unsigned_long = 54
+ *     real = 5
+ *     double = 6             # <<<<<<<<<<<<<<
+ *     long_double = 7
+ *     string = 9
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double, __pyx_int_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":192
+ *     real = 5
+ *     double = 6
+ *     long_double = 7             # <<<<<<<<<<<<<<
+ *     string = 9
+ *     complex = 10
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__long_double, __pyx_int_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":193
+ *     double = 6
+ *     long_double = 7
+ *     string = 9             # <<<<<<<<<<<<<<
+ *     complex = 10
+ *     double_complex = 11
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__string, __pyx_int_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":194
+ *     long_double = 7
+ *     string = 9
+ *     complex = 10             # <<<<<<<<<<<<<<
+ *     double_complex = 11
+ * 
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__complex, __pyx_int_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":195
+ *     string = 9
+ *     complex = 10
+ *     double_complex = 11             # <<<<<<<<<<<<<<
+ * 
+ * class FLAG(object):
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__double_complex, __pyx_int_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":180
+ * ## ==========
+ * 
+ * class DATATYPE(object):             # <<<<<<<<<<<<<<
+ *     unknown = -1
+ *     byte = 0
+ */
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__DATATYPE, __pyx_n_s__DATATYPE, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s__DATATYPE, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+
+  /* "adios.pyx":197
+ *     double_complex = 11
+ * 
+ * class FLAG(object):             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     YES = 1
+ */
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+
+  /* "adios.pyx":198
+ * 
+ * class FLAG(object):
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     YES = 1
+ *     NO = 2
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":199
+ * class FLAG(object):
+ *     UNKNOWN = 0
+ *     YES = 1             # <<<<<<<<<<<<<<
+ *     NO = 2
+ * 
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__YES, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":200
+ *     UNKNOWN = 0
+ *     YES = 1
+ *     NO = 2             # <<<<<<<<<<<<<<
+ * 
+ * class BUFFER_ALLOC_WHEN(object):
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NO, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":197
+ *     double_complex = 11
+ * 
+ * class FLAG(object):             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     YES = 1
+ */
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  __pyx_t_1 = __Pyx_CreateClass(((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_2), __pyx_n_s__FLAG, __pyx_n_s__FLAG, __pyx_n_s__adios); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s__FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+
+  /* "adios.pyx":202
+ *     NO = 2
+ * 
+ * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     NOW = 1
+ */
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+
+  /* "adios.pyx":203
+ * 
+ * class BUFFER_ALLOC_WHEN(object):
+ *     UNKNOWN = 0             # <<<<<<<<<<<<<<
+ *     NOW = 1
+ *     LATER = 2
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__UNKNOWN, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":204
+ * class BUFFER_ALLOC_WHEN(object):
+ *     UNKNOWN = 0
+ *     NOW = 1             # <<<<<<<<<<<<<<
+ *     LATER = 2
+ * 
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__NOW, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":205
+ *     UNKNOWN = 0
+ *     NOW = 1
+ *     LATER = 2             # <<<<<<<<<<<<<<
+ * 
+ * ## ==========
+ */
+  if (PyObject_SetItem(__pyx_t_2, __pyx_n_s__LATER, __pyx_int_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "adios.pyx":202
+ *     NO = 2
+ * 
+ * class BUFFER_ALLOC_WHEN(object):             # <<<<<<<<<<<<<<
+ *     UNKNOWN = 0
+ *     NOW = 1
+ */
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CreateClass(((PyObject *)__pyx_t_1), ((PyObject *)__pyx_t_2), __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_n_s__adios); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s__BUFFER_ALLOC_WHEN, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+
+  /* "adios.pyx":211
+ * ## ==========
+ * 
+ * cpdef init(char * config, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init(config, comm.ob_mpi)
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_1 = ((struct PyMPICommObject *)__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "adios.pyx":217
+ *                    char * name,
+ *                    char * mode,
+ *                    MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     cdef int64_t fd
+ *     cdef int result
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_2 = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":261
+ * ## ADIOS No-XML API
+ * ## ==========
+ * cpdef int init_noxml(MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *     return adios_init_noxml(comm.ob_mpi)
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_6 = ((struct PyMPICommObject *)__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "adios.pyx":440
+ *     cpdef public dict group
+ * 
+ *     def __init__(self, char * fname, MPI.Comm comm = MPI.COMM_WORLD):             # <<<<<<<<<<<<<<
+ *         self.fp = NULL
+ *         self.group = {}
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__MPI); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s__COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Comm))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_10 = ((struct PyMPICommObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "adios.pyx":1
+ * """             # <<<<<<<<<<<<<<
+ *  ADIOS is freely available under the terms of the BSD license described
+ *  in the COPYING file in the top level directory of this source distribution.
+ */
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+
+  /* "numpy.pxd":975
+ *      arr.base = baseptr
+ * 
+ * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
+ *     if arr.base is NULL:
+ *         return None
+ */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  if (__pyx_m) {
+    __Pyx_AddTraceback("init adios", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init adios");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
+
+/* Runtime support code */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+}
+#endif /* CYTHON_REFNANNY */
+
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
+}
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
+        }
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
+        } else
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
+                #endif
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
+                }
+            }
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    PyErr_Format(PyExc_TypeError,
+                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
+}
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (!type) {
+        PyErr_Format(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (Py_TYPE(obj) == type) return 1;
+    }
+    else {
+        if (PyObject_TypeCheck(obj, type)) return 1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%s' has incorrect type (expected %s, got %s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+    return 0;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+    PyObject *result;
+#if CYTHON_COMPILING_IN_CPYTHON
+    result = PyDict_GetItem(__pyx_d, name);
+    if (result) {
+        Py_INCREF(result);
+    } else {
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    if (!result) {
+        PyErr_Clear();
+#endif
+        result = __Pyx_GetBuiltinName(name);
+    }
+    return result;
+}
+
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_Format(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (likely(PyObject_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
+    return 0;
+}
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_Restore(type, value, tb);
+#endif
+}
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(type, value, tb);
+#endif
+}
+
+static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
+}
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
+                        PyErr_Clear();
+                    else
+                        return NULL;
+                }
+            }
+            return m->sq_item(o, i);
+        }
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
+
+#if PY_MAJOR_VERSION >= 3
+static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
+    return PyObject_CallMethodObjArgs(d, __pyx_n_s__values, NULL);
+}
+#endif
+
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
+    }
+    #if PY_VERSION_HEX < 0x02050000
+    if (PyClass_Check(type)) {
+    #else
+    if (PyType_Check(type)) {
+    #endif
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        #if PY_VERSION_HEX < 0x02050000
+        if (PyInstance_Check(type)) {
+            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+            Py_INCREF(type);
+        } else {
+            type = 0;
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception must be an old-style class or instance");
+            goto raise_error;
+        }
+        #else
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+        #endif
+    }
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else /* Python 3+ */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *args;
+        if (!value)
+            args = PyTuple_New(0);
+        else if (PyTuple_Check(value)) {
+            Py_INCREF(value);
+            args = value;
+        } else
+            args = PyTuple_Pack(1, value);
+        if (!args)
+            goto bad;
+        owned_instance = PyEval_CallObject(type, args);
+        Py_DECREF(args);
+        if (!owned_instance)
+            goto bad;
+        value = owned_instance;
+        if (!PyExceptionInstance_Check(value)) {
+            PyErr_Format(PyExc_TypeError,
+                         "calling %R should have returned an instance of "
+                         "BaseException, not %R",
+                         type, Py_TYPE(value));
+            goto bad;
+        }
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+#if PY_VERSION_HEX >= 0x03030000
+    if (cause) {
+#else
+    if (cause && cause != Py_None) {
+#endif
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
+    PyErr_SetObject(type, value);
+    if (tb) {
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+    }
+bad:
+    Py_XDECREF(owned_instance);
+    return;
+}
+#endif
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    PyErr_Format(PyExc_ValueError,
+                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+    PyErr_Format(PyExc_ValueError,
+                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
+                 index, (index == 1) ? "" : "s");
+}
+
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+}
+
+static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject* exc_type = tstate->curexc_type;
+    if (unlikely(exc_type)) {
+        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+            PyObject *exc_value, *exc_tb;
+            exc_value = tstate->curexc_value;
+            exc_tb = tstate->curexc_traceback;
+            tstate->curexc_type = 0;
+            tstate->curexc_value = 0;
+            tstate->curexc_traceback = 0;
+            Py_DECREF(exc_type);
+            Py_XDECREF(exc_value);
+            Py_XDECREF(exc_tb);
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#else
+    if (unlikely(PyErr_Occurred())) {
+        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
+            PyErr_Clear();
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#endif
+}
+
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else {
+        return __Pyx_IterFinish();
+    }
+    return 0;
+}
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s____pyx_vtable__, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s____import__);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    #if PY_VERSION_HEX >= 0x02050000
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0; /* try absolute import on failure */
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+    #else
+    if (level>0) {
+        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
+        goto bad;
+    }
+    module = PyObject_CallFunctionObjArgs(py_import,
+        name, global_dict, empty_dict, list, NULL);
+    #endif
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+static PyObject *__Pyx_FindPy2Metaclass(PyObject *bases) {
+    PyObject *metaclass;
+#if PY_MAJOR_VERSION < 3
+    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
+        PyObject *base = PyTuple_GET_ITEM(bases, 0);
+        metaclass = __Pyx_PyObject_GetAttrStr(base, __pyx_n_s____class__);
+        if (!metaclass) {
+            PyErr_Clear();
+            metaclass = (PyObject*) Py_TYPE(base);
+        }
+    } else {
+        metaclass = (PyObject *) &PyClass_Type;
+    }
+#else
+    if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
+        PyObject *base = PyTuple_GET_ITEM(bases, 0);
+        metaclass = (PyObject*) Py_TYPE(base);
+    } else {
+        metaclass = (PyObject *) &PyType_Type;
+    }
+#endif
+    Py_INCREF(metaclass);
+    return metaclass;
+}
+
+static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name,
+                                   PyObject *qualname, PyObject *modname) {
+    PyObject *result;
+    PyObject *metaclass;
+    if (PyDict_SetItem(dict, __pyx_n_s____module__, modname) < 0)
+        return NULL;
+    if (PyDict_SetItem(dict, __pyx_n_s____qualname__, qualname) < 0)
+        return NULL;
+    metaclass = PyDict_GetItem(dict, __pyx_n_s____metaclass__);
+    if (metaclass) {
+        Py_INCREF(metaclass);
+    } else {
+        metaclass = __Pyx_FindPy2Metaclass(bases);
+    }
+    result = PyObject_CallFunctionObjArgs(metaclass, name, bases, dict, NULL);
+    Py_DECREF(metaclass);
+    return result;
+}
+
+static CYTHON_INLINE int64_t __Pyx_PyInt_from_py_int64_t(PyObject* x) {
+    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
+    const int is_unsigned = const_zero < neg_one;
+    if (sizeof(int64_t) == sizeof(char)) {
+        if (is_unsigned)
+            return (int64_t)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (int64_t)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(int64_t) == sizeof(short)) {
+        if (is_unsigned)
+            return (int64_t)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (int64_t)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(int64_t) == sizeof(int)) {
+        if (is_unsigned)
+            return (int64_t)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (int64_t)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(int64_t) == sizeof(long)) {
+        if (is_unsigned)
+            return (int64_t)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (int64_t)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (int64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (int64_t)__Pyx_PyInt_AsSignedLongLong(x);
+    }  else {
+        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+        PyErr_SetString(PyExc_RuntimeError,
+                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+        #else
+        int64_t val;
+        PyObject *v = __Pyx_PyNumber_Int(x);
+        #if PY_MAJOR_VERSION < 3
+        if (likely(v) && !PyLong_Check(v)) {
+            PyObject *tmp = v;
+            v = PyNumber_Long(tmp);
+            Py_DECREF(tmp);
+        }
+        #endif
+        if (likely(v)) {
+            int one = 1; int is_little = (int)*(unsigned char *)&one;
+            unsigned char *bytes = (unsigned char *)&val;
+            int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                          bytes, sizeof(val),
+                                          is_little, !is_unsigned);
+            Py_DECREF(v);
+            if (likely(!ret))
+                return val;
+        }
+        #endif
+        return (int64_t)-1;
+    }
+}
+
+static CYTHON_INLINE uint64_t __Pyx_PyInt_from_py_uint64_t(PyObject* x) {
+    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
+    const int is_unsigned = const_zero < neg_one;
+    if (sizeof(uint64_t) == sizeof(char)) {
+        if (is_unsigned)
+            return (uint64_t)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (uint64_t)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(uint64_t) == sizeof(short)) {
+        if (is_unsigned)
+            return (uint64_t)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (uint64_t)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(uint64_t) == sizeof(int)) {
+        if (is_unsigned)
+            return (uint64_t)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (uint64_t)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(uint64_t) == sizeof(long)) {
+        if (is_unsigned)
+            return (uint64_t)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (uint64_t)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (uint64_t)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (uint64_t)__Pyx_PyInt_AsSignedLongLong(x);
+    }  else {
+        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+        PyErr_SetString(PyExc_RuntimeError,
+                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+        #else
+        uint64_t val;
+        PyObject *v = __Pyx_PyNumber_Int(x);
+        #if PY_MAJOR_VERSION < 3
+        if (likely(v) && !PyLong_Check(v)) {
+            PyObject *tmp = v;
+            v = PyNumber_Long(tmp);
+            Py_DECREF(tmp);
+        }
+        #endif
+        if (likely(v)) {
+            int one = 1; int is_little = (int)*(unsigned char *)&one;
+            unsigned char *bytes = (unsigned char *)&val;
+            int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                          bytes, sizeof(val),
+                                          is_little, !is_unsigned);
+            Py_DECREF(v);
+            if (likely(!ret))
+                return val;
+        }
+        #endif
+        return (uint64_t)-1;
+    }
+}
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_int64_t(int64_t val) {
+    const int64_t neg_one = (int64_t)-1, const_zero = (int64_t)0;
+    const int is_unsigned = const_zero < neg_one;
+    if ((sizeof(int64_t) == sizeof(char))  ||
+        (sizeof(int64_t) == sizeof(short))) {
+        return PyInt_FromLong((long)val);
+    } else if ((sizeof(int64_t) == sizeof(int)) ||
+               (sizeof(int64_t) == sizeof(long))) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else if (sizeof(int64_t) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    } else {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&val;
+        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static PyObject *__Pyx_GetStdout(void) {
+    PyObject *f = PySys_GetObject((char *)"stdout");
+    if (!f) {
+        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+    }
+    return f;
+}
+static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
+    int i;
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
+        PyObject* v;
+        if (PyFile_SoftSpace(f, 1)) {
+            if (PyFile_WriteString(" ", f) < 0)
+                goto error;
+        }
+        v = PyTuple_GET_ITEM(arg_tuple, i);
+        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
+            goto error;
+        if (PyString_Check(v)) {
+            char *s = PyString_AsString(v);
+            Py_ssize_t len = PyString_Size(v);
+            if (len > 0 &&
+                isspace(Py_CHARMASK(s[len-1])) &&
+                s[len-1] != ' ')
+                    PyFile_SoftSpace(f, 0);
+        }
+    }
+    if (newline) {
+        if (PyFile_WriteString("\n", f) < 0)
+            goto error;
+        PyFile_SoftSpace(f, 0);
+    }
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+}
+#else /* Python 3 has a print function */
+static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
+    PyObject* kwargs = 0;
+    PyObject* result = 0;
+    PyObject* end_string;
+    if (unlikely(!__pyx_print)) {
+        __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s__print);
+        if (!__pyx_print)
+            return -1;
+    }
+    if (stream) {
+        kwargs = PyDict_New();
+        if (unlikely(!kwargs))
+            return -1;
+        if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s__file, stream) < 0))
+            goto bad;
+        if (!newline) {
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                goto bad;
+            if (PyDict_SetItem(kwargs, __pyx_n_s__end, end_string) < 0) {
+                Py_DECREF(end_string);
+                goto bad;
+            }
+            Py_DECREF(end_string);
+        }
+    } else if (!newline) {
+        if (unlikely(!__pyx_print_kwargs)) {
+            __pyx_print_kwargs = PyDict_New();
+            if (unlikely(!__pyx_print_kwargs))
+                return -1;
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (unlikely(!end_string))
+                return -1;
+            if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s__end, end_string) < 0) {
+                Py_DECREF(end_string);
+                return -1;
+            }
+            Py_DECREF(end_string);
+        }
+        kwargs = __pyx_print_kwargs;
+    }
+    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
+    if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
+        Py_DECREF(kwargs);
+    if (!result)
+        return -1;
+    Py_DECREF(result);
+    return 0;
+bad:
+    if (kwargs != __pyx_print_kwargs)
+        Py_XDECREF(kwargs);
+    return -1;
+}
+#endif
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_uint64_t(uint64_t val) {
+    const uint64_t neg_one = (uint64_t)-1, const_zero = (uint64_t)0;
+    const int is_unsigned = const_zero < neg_one;
+    if ((sizeof(uint64_t) == sizeof(char))  ||
+        (sizeof(uint64_t) == sizeof(short))) {
+        return PyInt_FromLong((long)val);
+    } else if ((sizeof(uint64_t) == sizeof(int)) ||
+               (sizeof(uint64_t) == sizeof(long))) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else if (sizeof(uint64_t) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    } else {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&val;
+        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
+static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
+    if (!f) {
+        if (!(f = __Pyx_GetStdout()))
+            return -1;
+    }
+    Py_INCREF(f);
+    if (PyFile_SoftSpace(f, 0)) {
+        if (PyFile_WriteString(" ", f) < 0)
+            goto error;
+    }
+    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
+        goto error;
+    if (PyFile_WriteString("\n", f) < 0)
+        goto error;
+    Py_DECREF(f);
+    return 0;
+error:
+    Py_DECREF(f);
+    return -1;
+    /* the line below is just to avoid C compiler
+     * warnings about unused functions */
+    return __Pyx_Print(f, NULL, 0);
+}
+#else /* Python 3 has a print function */
+static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
+    int res;
+    PyObject* arg_tuple = PyTuple_Pack(1, o);
+    if (unlikely(!arg_tuple))
+        return -1;
+    res = __Pyx_Print(stream, arg_tuple, 1);
+    Py_DECREF(arg_tuple);
+    return res;
+}
+#endif
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return ::std::complex< float >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      return x + y*(__pyx_t_float_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
+      __pyx_t_float_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
+#endif
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+        __pyx_t_float_complex z;
+        float denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
+        __pyx_t_float_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrtf(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypotf(z.real, z.imag);
+          #endif
+        }
+        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
+            __pyx_t_float_complex z;
+            float r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    float denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(a, a);
+                    case 3:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, a);
+                    case 4:
+                        z = __Pyx_c_prodf(a, a);
+                        return __Pyx_c_prodf(z, z);
+                }
+            }
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
+                }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_absf(a);
+                theta = atan2f(a.imag, a.real);
+            }
+            lnr = logf(r);
+            z_r = expf(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cosf(z_theta);
+            z.imag = z_r * sinf(z_theta);
+            return z;
+        }
+    #endif
+#endif
+
+#if CYTHON_CCOMPLEX
+  #ifdef __cplusplus
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return ::std::complex< double >(x, y);
+    }
+  #else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      return x + y*(__pyx_t_double_complex)_Complex_I;
+    }
+  #endif
+#else
+    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
+      __pyx_t_double_complex z;
+      z.real = x;
+      z.imag = y;
+      return z;
+    }
+#endif
+
+#if CYTHON_CCOMPLEX
+#else
+    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+       return (a.real == b.real) && (a.imag == b.imag);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real + b.real;
+        z.imag = a.imag + b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real - b.real;
+        z.imag = a.imag - b.imag;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        z.real = a.real * b.real - a.imag * b.imag;
+        z.imag = a.real * b.imag + a.imag * b.real;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+        __pyx_t_double_complex z;
+        double denom = b.real * b.real + b.imag * b.imag;
+        z.real = (a.real * b.real + a.imag * b.imag) / denom;
+        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
+        return z;
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real = -a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
+       return (a.real == 0) && (a.imag == 0);
+    }
+    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
+        __pyx_t_double_complex z;
+        z.real =  a.real;
+        z.imag = -a.imag;
+        return z;
+    }
+    #if 1
+        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
+          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
+            return sqrt(z.real*z.real + z.imag*z.imag);
+          #else
+            return hypot(z.real, z.imag);
+          #endif
+        }
+        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
+            __pyx_t_double_complex z;
+            double r, lnr, theta, z_r, z_theta;
+            if (b.imag == 0 && b.real == (int)b.real) {
+                if (b.real < 0) {
+                    double denom = a.real * a.real + a.imag * a.imag;
+                    a.real = a.real / denom;
+                    a.imag = -a.imag / denom;
+                    b.real = -b.real;
+                }
+                switch ((int)b.real) {
+                    case 0:
+                        z.real = 1;
+                        z.imag = 0;
+                        return z;
+                    case 1:
+                        return a;
+                    case 2:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(a, a);
+                    case 3:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, a);
+                    case 4:
+                        z = __Pyx_c_prod(a, a);
+                        return __Pyx_c_prod(z, z);
+                }
+            }
+            if (a.imag == 0) {
+                if (a.real == 0) {
+                    return a;
+                }
+                r = a.real;
+                theta = 0;
+            } else {
+                r = __Pyx_c_abs(a);
+                theta = atan2(a.imag, a.real);
+            }
+            lnr = log(r);
+            z_r = exp(lnr * b.real - theta * b.imag);
+            z_theta = theta * b.real + lnr * b.imag;
+            z.real = z_r * cos(z_theta);
+            z.imag = z_r * sin(z_theta);
+            return z;
+        }
+    #endif
+#endif
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
+    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned char" :
+                    "value too large to convert to unsigned char");
+            }
+            return (unsigned char)-1;
+        }
+        return (unsigned char)val;
+    }
+    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
+    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned short" :
+                    "value too large to convert to unsigned short");
+            }
+            return (unsigned short)-1;
+        }
+        return (unsigned short)val;
+    }
+    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
+    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned int" :
+                    "value too large to convert to unsigned int");
+            }
+            return (unsigned int)-1;
+        }
+        return (unsigned int)val;
+    }
+    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
+    const char neg_one = (char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to char" :
+                    "value too large to convert to char");
+            }
+            return (char)-1;
+        }
+        return (char)val;
+    }
+    return (char)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
+    const short neg_one = (short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to short" :
+                    "value too large to convert to short");
+            }
+            return (short)-1;
+        }
+        return (short)val;
+    }
+    return (short)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
+    const int neg_one = (int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to int" :
+                    "value too large to convert to int");
+            }
+            return (int)-1;
+        }
+        return (int)val;
+    }
+    return (int)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
+    const signed char neg_one = (signed char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed char" :
+                    "value too large to convert to signed char");
+            }
+            return (signed char)-1;
+        }
+        return (signed char)val;
+    }
+    return (signed char)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
+    const signed short neg_one = (signed short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed short" :
+                    "value too large to convert to signed short");
+            }
+            return (signed short)-1;
+        }
+        return (signed short)val;
+    }
+    return (signed short)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
+    const signed int neg_one = (signed int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed int" :
+                    "value too large to convert to signed int");
+            }
+            return (signed int)-1;
+        }
+        return (signed int)val;
+    }
+    return (signed int)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
+    const int neg_one = (int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to int" :
+                    "value too large to convert to int");
+            }
+            return (int)-1;
+        }
+        return (int)val;
+    }
+    return (int)__Pyx_PyInt_AsLong(x);
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
+    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned long");
+            return (unsigned long)-1;
+        }
+        return (unsigned long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(unsigned long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned long");
+                return (unsigned long)-1;
+            }
+            return (unsigned long)PyLong_AsUnsignedLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(unsigned long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(unsigned long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (unsigned long)PyLong_AsLong(x);
+        }
+    } else {
+        unsigned long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned long)-1;
+        val = __Pyx_PyInt_AsUnsignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
+    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned PY_LONG_LONG");
+            return (unsigned PY_LONG_LONG)-1;
+        }
+        return (unsigned PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned PY_LONG_LONG");
+                return (unsigned PY_LONG_LONG)-1;
+            }
+            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(unsigned PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(unsigned PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
+        }
+    } else {
+        unsigned PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
+    const long neg_one = (long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to long");
+            return (long)-1;
+        }
+        return (long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to long");
+                return (long)-1;
+            }
+            return (long)PyLong_AsUnsignedLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(long) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (long)PyLong_AsLong(x);
+        }
+    } else {
+        long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (long)-1;
+        val = __Pyx_PyInt_AsLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
+    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to PY_LONG_LONG");
+            return (PY_LONG_LONG)-1;
+        }
+        return (PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to PY_LONG_LONG");
+                return (PY_LONG_LONG)-1;
+            }
+            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (PY_LONG_LONG)PyLong_AsLongLong(x);
+        }
+    } else {
+        PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
+    const signed long neg_one = (signed long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed long");
+            return (signed long)-1;
+        }
+        return (signed long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(signed long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (signed long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed long");
+                return (signed long)-1;
+            }
+            return (signed long)PyLong_AsUnsignedLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(signed long)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(signed long) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(signed long) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (signed long)PyLong_AsLong(x);
+        }
+    } else {
+        signed long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed long)-1;
+        val = __Pyx_PyInt_AsSignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+#include "longintrepr.h"
+#endif
+#endif
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
+    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed PY_LONG_LONG");
+            return (signed PY_LONG_LONG)-1;
+        }
+        return (signed PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return (signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed PY_LONG_LONG");
+                return (signed PY_LONG_LONG)-1;
+            }
+            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
+        } else {
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+#if CYTHON_USE_PYLONG_INTERNALS
+            if (sizeof(digit) <= sizeof(signed PY_LONG_LONG)) {
+                switch (Py_SIZE(x)) {
+                    case  0: return 0;
+                    case  1: return +(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                    case -1: return -(signed PY_LONG_LONG) ((PyLongObject*)x)->ob_digit[0];
+                }
+            }
+#endif
+#endif
+            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
+        }
+    } else {
+        signed PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsSignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static int __Pyx_check_binary_version(void) {
+    char ctversion[4], rtversion[4];
+    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
+    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+        char message[200];
+        PyOS_snprintf(message, sizeof(message),
+                      "compiletime version %s of module '%.100s' "
+                      "does not match runtime version %s",
+                      ctversion, __Pyx_MODULE_NAME, rtversion);
+        #if PY_VERSION_HEX < 0x02050000
+        return PyErr_Warn(NULL, message);
+        #else
+        return PyErr_WarnEx(NULL, message, 1);
+        #endif
+    }
+    return 0;
+}
+
+#ifndef __PYX_HAVE_RT_ImportModule
+#define __PYX_HAVE_RT_ImportModule
+static PyObject *__Pyx_ImportModule(const char *name) {
+    PyObject *py_name = 0;
+    PyObject *py_module = 0;
+    py_name = __Pyx_PyIdentifier_FromString(name);
+    if (!py_name)
+        goto bad;
+    py_module = PyImport_Import(py_name);
+    Py_DECREF(py_name);
+    return py_module;
+bad:
+    Py_XDECREF(py_name);
+    return 0;
+}
+#endif
+
+#ifndef __PYX_HAVE_RT_ImportType
+#define __PYX_HAVE_RT_ImportType
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
+    size_t size, int strict)
+{
+    PyObject *py_module = 0;
+    PyObject *result = 0;
+    PyObject *py_name = 0;
+    char warning[200];
+    Py_ssize_t basicsize;
+#ifdef Py_LIMITED_API
+    PyObject *py_basicsize;
+#endif
+    py_module = __Pyx_ImportModule(module_name);
+    if (!py_module)
+        goto bad;
+    py_name = __Pyx_PyIdentifier_FromString(class_name);
+    if (!py_name)
+        goto bad;
+    result = PyObject_GetAttr(py_module, py_name);
+    Py_DECREF(py_name);
+    py_name = 0;
+    Py_DECREF(py_module);
+    py_module = 0;
+    if (!result)
+        goto bad;
+    if (!PyType_Check(result)) {
+        PyErr_Format(PyExc_TypeError,
+            "%s.%s is not a type object",
+            module_name, class_name);
+        goto bad;
+    }
+#ifndef Py_LIMITED_API
+    basicsize = ((PyTypeObject *)result)->tp_basicsize;
+#else
+    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
+    if (!py_basicsize)
+        goto bad;
+    basicsize = PyLong_AsSsize_t(py_basicsize);
+    Py_DECREF(py_basicsize);
+    py_basicsize = 0;
+    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
+        goto bad;
+#endif
+    if (!strict && (size_t)basicsize > size) {
+        PyOS_snprintf(warning, sizeof(warning),
+            "%s.%s size changed, may indicate binary incompatibility",
+            module_name, class_name);
+        #if PY_VERSION_HEX < 0x02050000
+        if (PyErr_Warn(NULL, warning) < 0) goto bad;
+        #else
+        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
+        #endif
+    }
+    else if ((size_t)basicsize != size) {
+        PyErr_Format(PyExc_ValueError,
+            "%s.%s has the wrong size, try recompiling",
+            module_name, class_name);
+        goto bad;
+    }
+    return (PyTypeObject *)result;
+bad:
+    Py_XDECREF(py_module);
+    Py_XDECREF(result);
+    return NULL;
+}
+#endif
+
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    int start = 0, mid = 0, end = count - 1;
+    if (end >= 0 && code_line > entries[end].code_line) {
+        return count;
+    }
+    while (start < end) {
+        mid = (start + end) / 2;
+        if (code_line < entries[mid].code_line) {
+            end = mid;
+        } else if (code_line > entries[mid].code_line) {
+             start = mid + 1;
+        } else {
+            return mid;
+        }
+    }
+    if (code_line <= entries[mid].code_line) {
+        return mid;
+    } else {
+        return mid + 1;
+    }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+    PyCodeObject* code_object;
+    int pos;
+    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+        return NULL;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+        return NULL;
+    }
+    code_object = __pyx_code_cache.entries[pos].code_object;
+    Py_INCREF(code_object);
+    return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+    int pos, i;
+    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+    if (unlikely(!code_line)) {
+        return;
+    }
+    if (unlikely(!entries)) {
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (likely(entries)) {
+            __pyx_code_cache.entries = entries;
+            __pyx_code_cache.max_count = 64;
+            __pyx_code_cache.count = 1;
+            entries[0].code_line = code_line;
+            entries[0].code_object = code_object;
+            Py_INCREF(code_object);
+        }
+        return;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+        PyCodeObject* tmp = entries[pos].code_object;
+        entries[pos].code_object = code_object;
+        Py_DECREF(tmp);
+        return;
+    }
+    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+        int new_max = __pyx_code_cache.max_count + 64;
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (unlikely(!entries)) {
+            return;
+        }
+        __pyx_code_cache.entries = entries;
+        __pyx_code_cache.max_count = new_max;
+    }
+    for (i=__pyx_code_cache.count; i>pos; i--) {
+        entries[i] = entries[i-1];
+    }
+    entries[pos].code_line = code_line;
+    entries[pos].code_object = code_object;
+    __pyx_code_cache.count++;
+    Py_INCREF(code_object);
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+            const char *funcname, int c_line,
+            int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(filename);
+    #else
+    py_srcfile = PyUnicode_FromString(filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (c_line) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_code = __Pyx_PyCode_New(
+        0,            /*int argcount,*/
+        0,            /*int kwonlyargcount,*/
+        0,            /*int nlocals,*/
+        0,            /*int stacksize,*/
+        0,            /*int flags,*/
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple, /*PyObject *consts,*/
+        __pyx_empty_tuple, /*PyObject *names,*/
+        __pyx_empty_tuple, /*PyObject *varnames,*/
+        __pyx_empty_tuple, /*PyObject *freevars,*/
+        __pyx_empty_tuple, /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        py_line,      /*int firstlineno,*/
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    Py_DECREF(py_srcfile);
+    Py_DECREF(py_funcname);
+    return py_code;
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_globals = 0;
+    PyFrameObject *py_frame = 0;
+    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
+    if (!py_code) {
+        py_code = __Pyx_CreateCodeObjectForTraceback(
+            funcname, c_line, py_line, filename);
+        if (!py_code) goto bad;
+        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
+    }
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        py_globals,          /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    py_frame->f_lineno = py_line;
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else  /* Python 3+ has unicode identifiers */
+        if (t->is_unicode | t->is_str) {
+            if (t->intern) {
+                *t->p = PyUnicode_InternFromString(t->s);
+            } else if (t->encoding) {
+                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+            } else {
+                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+            }
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        ++t;
+    }
+    return 0;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) {
+    return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str));
+}
+static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
+    Py_ssize_t ignore;
+    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
+}
+static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+    if (
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+            __Pyx_sys_getdefaultencoding_not_ascii &&
+#endif
+            PyUnicode_Check(o)) {
+#if PY_VERSION_HEX < 0x03030000
+        char* defenc_c;
+        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+        if (!defenc) return NULL;
+        defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+        {
+            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+            char* c;
+            for (c = defenc_c; c < end; c++) {
+                if ((unsigned char) (*c) >= 128) {
+                    PyUnicode_AsASCIIString(o);
+                    return NULL;
+                }
+            }
+        }
+#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/
+        *length = PyBytes_GET_SIZE(defenc);
+        return defenc_c;
+#else /* PY_VERSION_HEX < 0x03030000 */
+        if (PyUnicode_READY(o) == -1) return NULL;
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+        if (PyUnicode_IS_ASCII(o)) {
+            *length = PyUnicode_GET_DATA_SIZE(o);
+            return PyUnicode_AsUTF8(o);
+        } else {
+            PyUnicode_AsASCIIString(o);
+            return NULL;
+        }
+#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
+        return PyUnicode_AsUTF8AndSize(o, length);
+#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */
+#endif /* PY_VERSION_HEX < 0x03030000 */
+    } else
+#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+    {
+        char* result;
+        int r = PyBytes_AsStringAndSize(o, &result, length);
+        if (r < 0) {
+            return NULL;
+        } else {
+            return result;
+        }
+    }
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   int is_true = x == Py_True;
+   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
+   else return PyObject_IsTrue(x);
+}
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
+  PyNumberMethods *m;
+  const char *name = NULL;
+  PyObject *res = NULL;
+#if PY_MAJOR_VERSION < 3
+  if (PyInt_Check(x) || PyLong_Check(x))
+#else
+  if (PyLong_Check(x))
+#endif
+    return Py_INCREF(x), x;
+  m = Py_TYPE(x)->tp_as_number;
+#if PY_MAJOR_VERSION < 3
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Int(x);
+  }
+  else if (m && m->nb_long) {
+    name = "long";
+    res = PyNumber_Long(x);
+  }
+#else
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Long(x);
+  }
+#endif
+  if (res) {
+#if PY_MAJOR_VERSION < 3
+    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+#else
+    if (!PyLong_Check(res)) {
+#endif
+      PyErr_Format(PyExc_TypeError,
+                   "__%s__ returned non-%s (type %.200s)",
+                   name, name, Py_TYPE(res)->tp_name);
+      Py_DECREF(res);
+      return NULL;
+    }
+  }
+  else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_TypeError,
+                    "an integer is required");
+  }
+  return res;
+}
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject* x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+#if PY_VERSION_HEX < 0x02050000
+   if (ival <= LONG_MAX)
+       return PyInt_FromLong((long)ival);
+   else {
+       unsigned char *bytes = (unsigned char *) &ival;
+       int one = 1; int little = (int)*(unsigned char*)&one;
+       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
+   }
+#else
+   return PyInt_FromSize_t(ival);
+#endif
+}
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
+   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
+   if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
+       if ((val != (unsigned PY_LONG_LONG)-1) || !PyErr_Occurred())
+           PyErr_SetString(PyExc_OverflowError,
+                           "value too large to convert to size_t");
+       return (size_t)-1;
+   }
+   return (size_t)val;
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/wrappers/numpy/adios.pyx b/wrappers/numpy/adios.pyx
index dac0c03..7e6b2e9 100644
--- a/wrappers/numpy/adios.pyx
+++ b/wrappers/numpy/adios.pyx
@@ -577,18 +577,17 @@ cdef class AdiosVariable:
             npoffset.fill(0)
         else:
             npoffset = np.array(offset, dtype=np.int64)
-            assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
         
         cdef np.ndarray npcount
         if len(count) == 0:
             npcount = npshape - npoffset
         else:
             npcount = np.array(count, dtype=np.int64)
-            npcount = npcount - npoffset
 
-        assert npshape.ndim == npcount.ndim, 'Shape dimension mismatch.'
-        assert (npshape - npoffset >= npcount).all(), 'Count is larger than shape.'
-            
+        assert npshape.ndim == npoffset.ndim, 'Offset dimension mismatch'
+        assert npshape.ndim == npcount.ndim, 'Count dimension mismatch.'
+        assert (npshape - npoffset > npcount).all(), 'Count is larger than shape.'
+
         cdef np.ndarray var = np.zeros(npcount, dtype=ntype)
         cdef int64_t nbytes = adios_read_var_byid(
             self.group.gp, 
diff --git a/wrappers/numpy/setup.py b/wrappers/numpy/setup.py
new file mode 100644
index 0000000..838c3b2
--- /dev/null
+++ b/wrappers/numpy/setup.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+# Author:  Jong Choi
+# Contact: choij at ornl.gov
+
+from distutils.extension import Extension
+import numpy as np
+
+# Use mpi4py dist utils: https://bitbucket.org/mpi4py/mpi4py
+from mpidistutils import setup
+
+import subprocess
+
+m1 = Extension('adios', 
+               sources=['adios.cpp'], 
+               define_macros=[('ADIOS_USE_READ_API_1', None)],
+               include_dirs = [np.get_include()],
+               library_dirs = [],
+               libraries = [],
+               extra_objects = [])
+
+p = subprocess.Popen(["adios_config", "-c"], stdout=subprocess.PIPE)
+for path in p.communicate()[0].strip().split(" "):
+    if path.startswith('-I'):
+        m1.include_dirs.append(path.replace('-I', '', 1))
+
+p = subprocess.Popen(["adios_config", "-l"], stdout=subprocess.PIPE)
+for path in p.communicate()[0].strip().split(" "):
+    if path.startswith('-L'):
+        m1.library_dirs.append(path.replace('-L', '', 1))
+    if path.startswith('-l'):
+        m1.libraries.append(path.replace('-l', '', 1))
+
+setup(name = 'Adios',
+      version = '1.0',
+      description = 'Python Module for Adios',
+      url = 'http://www.olcf.ornl.gov/center-projects/adios/',
+      ext_modules = [m1])

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/adios.git



More information about the debian-science-commits mailing list